Skip to content
modkitv0.2

camera2d.h

#include <modkit/camera2d.h>19 functions · 2 structs · 1 enums · 3 typedefs

Y-down 2D camera and virtual-resolution helpers.

Functions

mk_camera2d_begin_canvasfunction

bool mk_camera2d_begin_canvas(const mk_camera2d *camera, mk_canvas_t canvas)

Push a camera transform and viewport clip onto a Canvas.

ParameterTypeDescription
cameraconst mk_camera2d *Camera to apply.
canvasmk_canvas_tDestination Canvas.

Returns True on success.

mk_camera2d_begin_spritefunction

bool mk_camera2d_begin_sprite(const mk_camera2d *camera, struct mk_sprite_ctx *sprite)

Push a camera transform and viewport clip onto a sprite context.

ParameterTypeDescription
cameraconst mk_camera2d *Camera to apply.
spritestruct mk_sprite_ctx *Destination sprite context.

Returns True on success.

mk_camera2d_end_canvasfunction

bool mk_camera2d_end_canvas(mk_canvas_t canvas)

Pop a camera transform and viewport clip from a Canvas.

ParameterTypeDescription
canvasmk_canvas_tDestination Canvas.

Returns True on success.

mk_camera2d_end_spritefunction

bool mk_camera2d_end_sprite(struct mk_sprite_ctx *sprite)

Pop a camera transform and viewport clip from a sprite context.

ParameterTypeDescription
spritestruct mk_sprite_ctx *Destination sprite context.

Returns True on success.

mk_camera2d_is_validfunction

bool mk_camera2d_is_valid(const mk_camera2d *camera)

Test whether a camera and its viewport are usable.

ParameterTypeDescription
cameraconst mk_camera2d *Camera to inspect.

Returns True when valid.

mk_camera2d_makefunction

mk_camera2d mk_camera2d_make(mk_viewport2d viewport, float pixels_per_meter)

Create an origin-centered camera with zero rotation and unit zoom.

ParameterTypeDescription
viewportmk_viewport2dOutput viewport.
pixels_per_meterfloatVirtual pixels per world unit.

Returns The initialized camera.

mk_camera2d_screen_scalefunction

float mk_camera2d_screen_scale(const mk_camera2d *camera)

Get virtual screen pixels per world unit after zoom.

ParameterTypeDescription
cameraconst mk_camera2d *Camera to inspect.

Returns The scale, or zero for an invalid camera.

mk_camera2d_screen_to_worldfunction

bool mk_camera2d_screen_to_world(const mk_camera2d *camera, float screen_x, float screen_y, float *world_x, float *world_y)

Convert output coordinates to unclamped world coordinates.

ParameterTypeDescription
cameraconst mk_camera2d *Source camera.
screen_xfloatOutput-space x coordinate.
screen_yfloatOutput-space y coordinate.
world_xfloat *Receives the world x coordinate.
world_yfloat *Receives the world y coordinate.

Returns True when the input point lies inside the viewport content.

mk_camera2d_visible_boundsfunction

bool mk_camera2d_visible_bounds(const mk_camera2d *camera, float *out_min_x, float *out_min_y, float *out_max_x, float *out_max_y)

Compute the conservative world-space AABB of the visible region.

Conservative under rotation: the visible area is a rotated rectangle and this returns its bounding box, so it can report more than is strictly on screen never less.

ParameterTypeDescription
cameraconst mk_camera2d *Source camera.
out_min_xfloat *Optional destination for the minimum x coordinate.
out_min_yfloat *Optional destination for the minimum y coordinate.
out_max_xfloat *Optional destination for the maximum x coordinate.
out_max_yfloat *Optional destination for the maximum y coordinate.

Returns False for an invalid camera; output pointers are not written then.

mk_camera2d_world_to_screenfunction

void mk_camera2d_world_to_screen(const mk_camera2d *camera, float world_x, float world_y, float *screen_x, float *screen_y)

Convert world coordinates to output coordinates.

ParameterTypeDescription
cameraconst mk_camera2d *Source camera.
world_xfloatWorld x coordinate.
world_yfloatWorld y coordinate.
screen_xfloat *Receives output x.
screen_yfloat *Receives output y.

mk_viewport2d_begin_canvasfunction

bool mk_viewport2d_begin_canvas(const mk_viewport2d *viewport, mk_canvas_t canvas)

Push a viewport transform and clip onto a Canvas.

ParameterTypeDescription
viewportconst mk_viewport2d *Viewport to apply.
canvasmk_canvas_tDestination Canvas.

Returns True on success.

mk_viewport2d_begin_spritefunction

bool mk_viewport2d_begin_sprite(const mk_viewport2d *viewport, struct mk_sprite_ctx *sprite)

Push a viewport transform and clip onto a sprite context.

ParameterTypeDescription
viewportconst mk_viewport2d *Viewport to apply.
spritestruct mk_sprite_ctx *Destination sprite context.

Returns True on success.

mk_viewport2d_end_canvasfunction

bool mk_viewport2d_end_canvas(mk_canvas_t canvas)

Pop a viewport transform and clip from a Canvas.

ParameterTypeDescription
canvasmk_canvas_tDestination Canvas.

Returns True on success.

mk_viewport2d_end_spritefunction

bool mk_viewport2d_end_sprite(struct mk_sprite_ctx *sprite)

Pop a viewport transform and clip from a sprite context.

ParameterTypeDescription
spritestruct mk_sprite_ctx *Destination sprite context.

Returns True on success.

mk_viewport2d_is_validfunction

bool mk_viewport2d_is_valid(const mk_viewport2d *viewport)

Test whether a viewport can be used for coordinate conversion.

ParameterTypeDescription
viewportconst mk_viewport2d *Viewport to inspect.

Returns True when valid.

mk_viewport2d_makefunction

mk_viewport2d mk_viewport2d_make(float virtual_width, float virtual_height, float output_width, float output_height, mk_viewport2d_scale_mode mode)

Build a centered fit or integer-fit viewport.

ParameterTypeDescription
virtual_widthfloatLogical content width.
virtual_heightfloatLogical content height.
output_widthfloatPhysical output width.
output_heightfloatPhysical output height.
modemk_viewport2d_scale_modeScaling policy.

Returns The computed viewport; valid is false for invalid dimensions.

mk_viewport2d_resizefunction

bool mk_viewport2d_resize(mk_viewport2d *viewport, float output_width, float output_height)

Recompute a viewport for a resized output.

ParameterTypeDescription
viewportmk_viewport2d *Viewport to update.
output_widthfloatNew physical width.
output_heightfloatNew physical height.

Returns True when the resized viewport is valid.

mk_viewport2d_screen_to_virtualfunction

bool mk_viewport2d_screen_to_virtual(const mk_viewport2d *viewport, float screen_x, float screen_y, float *virtual_x, float *virtual_y)

Convert output coordinates to unclamped virtual coordinates.

ParameterTypeDescription
viewportconst mk_viewport2d *Source viewport.
screen_xfloatOutput-space x coordinate.
screen_yfloatOutput-space y coordinate.
virtual_xfloat *Receives the virtual x coordinate.
virtual_yfloat *Receives the virtual y coordinate.

Returns True when the input point lies inside the viewport content.

mk_viewport2d_virtual_to_screenfunction

void mk_viewport2d_virtual_to_screen(const mk_viewport2d *viewport, float virtual_x, float virtual_y, float *screen_x, float *screen_y)

Convert virtual coordinates to output coordinates.

ParameterTypeDescription
viewportconst mk_viewport2d *Source viewport.
virtual_xfloatVirtual x coordinate.
virtual_yfloatVirtual y coordinate.
screen_xfloat *Receives output x.
screen_yfloat *Receives output y.

Structs

mk_camera2dstruct

Y-down world camera projected through a virtual-resolution viewport.

FieldTypeDescription
viewportmk_viewport2dOutput viewport.
xfloatCamera center in world units.
yfloatCamera center in world units.
rotationfloatClockwise rotation in radians.
zoomfloatWorld magnification multiplier.
pixels_per_meterfloatVirtual pixels per world unit at zoom 1.

mk_viewport2dstruct

Centered virtual-resolution viewport mapped into an output surface.

FieldTypeDescription
virtual_widthfloatLogical content width.
virtual_heightfloatLogical content height.
output_widthfloatPhysical output width.
output_heightfloatPhysical output height.
scalefloatOutput pixels per virtual unit.
offset_xfloatHorizontal output offset of the content.
offset_yfloatVertical output offset of the content.
modemk_viewport2d_scale_modeActive scaling policy.
validboolWhether all dimensions produce a usable viewport.

Enums

mk_viewport2d_scale_modeenum

Scaling policy for mapping a virtual canvas to an output surface.

ValueDescription
MK_VIEWPORT2D_FITPreserve aspect ratio using any positive scale.
MK_VIEWPORT2D_INTEGER_FITPreserve aspect ratio using an integer scale when possible.

Typedefs

mk_camera2dtypedef

typedef struct mk_camera2d mk_camera2d

Y-down world camera projected through a virtual-resolution viewport.

mk_viewport2dtypedef

typedef struct mk_viewport2d mk_viewport2d

Centered virtual-resolution viewport mapped into an output surface.

mk_viewport2d_scale_modetypedef

typedef enum mk_viewport2d_scale_mode mk_viewport2d_scale_mode

Scaling policy for mapping a virtual canvas to an output surface.