Skip to content
modkitv0.2

particle_render.h

#include <modkit/particle_render.h>8 functions · 4 structs · 1 enums · 5 typedefs

Batteries-included pass submission for particle emitters.

Functions

mk_particle_2d_space_camerafunction

mk_particle_2d_space mk_particle_2d_space_camera(mk_camera2d camera)

Y-down Camera2D world coordinates.

ParameterTypeDescription
cameramk_camera2dValue for camera.

Returns The resulting value.

mk_particle_2d_space_screenfunction

mk_particle_2d_space mk_particle_2d_space_screen(float output_width, float output_height)

Screen-pixel coordinates with (0,0) at the output's top-left.

ParameterTypeDescription
output_widthfloatValue for output width.
output_heightfloatValue for output height.

Returns The resulting value.

mk_particle_2d_space_virtualfunction

mk_particle_2d_space mk_particle_2d_space_virtual(mk_viewport2d viewport)

Fitted virtual-resolution coordinates with (0,0) at the virtual top-left.

ParameterTypeDescription
viewportmk_viewport2dValue for viewport.

Returns The resulting value.

mk_particle_mesh_set_geometryfunction

mk_result mk_particle_mesh_set_geometry(mk_particle_world_t *world, mk_particle_instance_t instance, uint32_t emitter_index, mk_geometry_t geometry)

Bind immutable triangle geometry to a mesh emitter.

GPU mesh emitters require this binding before mk_particle_world_prepare_gpu() so the compute pass can publish the correct indexed or non-indexed indirect command. The emitter retains the geometry until it is rebound, cleared with MK_GEOMETRY_INVALID, or destroyed. CPU mesh rendering continues to use mk_particle_render_desc.geometry. Binding after this world has already been prepared in the current frame is rejected with MK_ERROR_INVALID_STATE. Platforms compiled without the GPU particle runtime return MK_ERROR_UNSUPPORTED.

ParameterTypeDescription
worldmk_particle_world_t *Value for world.
instancemk_particle_instance_tValue for instance.
emitter_indexuint32_tValue for emitter index.
geometrymk_geometry_tValue for geometry.

Returns MK_SUCCESS or an error result.

mk_particle_renderfunction

mk_result mk_particle_render(mk_particle_world_t *world, mk_particle_instance_t instance, uint32_t emitter_index, const mk_particle_render_desc *desc, mk_particle_render_report *out_report)

Submit one emitter into the currently active pass.

ParameterTypeDescription
worldmk_particle_world_t *Value for world.
instancemk_particle_instance_tValue for instance.
emitter_indexuint32_tValue for emitter index.
descconst mk_particle_render_desc *Configuration descriptor.
out_reportmk_particle_render_report *Receives the report.

Returns MK_SUCCESS or an error result.

mk_particle_render_batchfunction

mk_result mk_particle_render_batch(mk_particle_world_t *world, const mk_particle_render_batch_item *items, uint32_t item_count, const mk_particle_render_desc *desc, mk_particle_render_report *out_report)

Submit a homogeneous CPU emitter group as one transient draw.

Every item must use the same renderer. desc supplies the shared texture, geometry, pipeline, blend, camera, and pass-order state, so applications partition items by those values before calling. GPU emitters use their device-local indirect draws and are rejected by this CPU batching path.

ParameterTypeDescription
worldmk_particle_world_t *Value for world.
itemsconst mk_particle_render_batch_item *Value for items.
item_countuint32_tNumber of item entries.
descconst mk_particle_render_desc *Configuration descriptor.
out_reportmk_particle_render_report *Receives the report.

Returns MK_SUCCESS or an error result.

mk_particle_render_batch_exfunction

mk_result mk_particle_render_batch_ex(mk_encoder_t encoder, mk_view_id_t view, mk_particle_world_t *world, const mk_particle_render_batch_item *items, uint32_t item_count, const mk_particle_render_desc *desc, mk_particle_render_report *out_report)

Worker-encoder equivalent of mk_particle_render_batch().

ParameterTypeDescription
encodermk_encoder_tValue for encoder.
viewmk_view_id_tValue for view.
worldmk_particle_world_t *Value for world.
itemsconst mk_particle_render_batch_item *Value for items.
item_countuint32_tNumber of item entries.
descconst mk_particle_render_desc *Configuration descriptor.
out_reportmk_particle_render_report *Receives the report.

Returns MK_SUCCESS or an error result.

mk_particle_render_exfunction

mk_result mk_particle_render_ex(mk_encoder_t encoder, mk_view_id_t view, mk_particle_world_t *world, mk_particle_instance_t instance, uint32_t emitter_index, const mk_particle_render_desc *desc, mk_particle_render_report *out_report)

Worker-encoder equivalent of mk_particle_render().

ParameterTypeDescription
encodermk_encoder_tValue for encoder.
viewmk_view_id_tValue for view.
worldmk_particle_world_t *Value for world.
instancemk_particle_instance_tValue for instance.
emitter_indexuint32_tValue for emitter index.
descconst mk_particle_render_desc *Configuration descriptor.
out_reportmk_particle_render_report *Receives the report.

Returns MK_SUCCESS or an error result.

Structs

mk_particle_2d_spacestruct

Data for particle 2D space.

FieldTypeDescription
modemk_particle_2d_space_modeThe mode.
output_widthfloatThe output width.
output_heightfloatThe output height.
viewportmk_viewport2dThe viewport.
cameramk_camera2dThe camera.

mk_particle_render_batch_itemstruct

Data for particle render batch item.

FieldTypeDescription
instancemk_particle_instance_tThe instance.
emitter_indexuint32_tThe emitter index.

mk_particle_render_descstruct

Per-submit renderer resources and camera basis.

Zero initialization selects a white texture, alpha blending, camera-facing billboards, a full [0,1] UV rectangle, and one atlas frame. Mesh emitters require geometry. Invalid texture and geometry fields use valid IDs authored in mk_particle_emitter_desc.references when available. Zero-valued style fields inherit mk_particle_emitter_desc.render_style; set ignore_effect_style to use only this descriptor's style. A custom pipeline must consume Modkit's documented particle instance or trail ABI and the standard particle uniforms.

FieldTypeDescription
texturemk_texture_tThe texture.
geometrymk_geometry_tThe geometry.
pipelinemk_pipeline_tThe pipeline.
blendmk_particle_blend_modeThe blend.
billboardmk_particle_billboard_modeThe billboard.
billboard_axismk_vec3Zero selects +Y.
velocity_stretchfloatZero selects 1.
uv_rectmk_vec4x, y, width, height; all-zero selects 0,0,1,1.
atlas_columnsuint16_tZero selects 1.
atlas_rowsuint16_tZero selects 1.
atlas_framesuint32_tZero selects every atlas cell.
alpha_cutofffloatMasked only; zero selects 0.5.
view_positionmk_vec3The view position.
view_forwardmk_vec3Zero selects -Z.
view_upmk_vec3Zero selects +Y.
space_2dmk_particle_2d_spaceThe space 2D.
phasemk_draw_phase_tThe phase.
depthuint32_tThe depth.
has_depthboolThe has depth.
ignore_effect_styleboolThe ignore effect style.

mk_particle_render_reportstruct

Data for particle render report.

FieldTypeDescription
resultmk_resultThe result.
backendmk_particle_backendThe backend.
renderermk_particle_renderer_typeThe renderer.
particlesuint32_tThe particles.
verticesuint32_tThe vertices.
draw_callsuint32_tThe draw calls.
transient_failuresuint32_tThe transient failures.

Enums

mk_particle_2d_space_modeenum

Values for particle 2D space mode.

ValueDescription
MK_PARTICLE_2D_PASSSelects pass.
MK_PARTICLE_2D_SCREENSelects screen.
MK_PARTICLE_2D_VIRTUALSelects virtual.
MK_PARTICLE_2D_CAMERASelects camera.

Typedefs

mk_particle_2d_spacetypedef

typedef struct mk_particle_2d_space mk_particle_2d_space

Data for particle 2D space.

mk_particle_2d_space_modetypedef

typedef enum mk_particle_2d_space_mode mk_particle_2d_space_mode

Values for particle 2D space mode.

mk_particle_render_batch_itemtypedef

typedef struct mk_particle_render_batch_item mk_particle_render_batch_item

Data for particle render batch item.

mk_particle_render_desctypedef

typedef struct mk_particle_render_desc mk_particle_render_desc

Per-submit renderer resources and camera basis.

Zero initialization selects a white texture, alpha blending, camera-facing billboards, a full [0,1] UV rectangle, and one atlas frame. Mesh emitters require geometry. Invalid texture and geometry fields use valid IDs authored in mk_particle_emitter_desc.references when available. Zero-valued style fields inherit mk_particle_emitter_desc.render_style; set ignore_effect_style to use only this descriptor's style. A custom pipeline must consume Modkit's documented particle instance or trail ABI and the standard particle uniforms.

mk_particle_render_reporttypedef

typedef struct mk_particle_render_report mk_particle_render_report

Data for particle render report.