|
Kohi Game Engine
|
A generic "interface" for the renderer backend. The renderer backend is what is responsible for making calls to the graphics API such as Vulkan, OpenGL or DirectX. Each of these should implement this interface. The frontend only interacts via this structure and has no knowledge of the way things actually work on the backend. More...
#include <renderer_types.h>
Data Fields | |
| struct renderer_system_state * | frontend_state |
| u64 | internal_context_size |
| The size of the backend-specific renderer context. More... | |
| void * | internal_context |
| The backend-specific renderer context. More... | |
| b8(* | initialize )(struct renderer_backend_interface *backend, const renderer_backend_config *config) |
| Initializes the backend. More... | |
| void(* | shutdown )(struct renderer_backend_interface *backend) |
| Shuts the renderer backend down. More... | |
| void(* | begin_debug_label )(struct renderer_backend_interface *backend, const char *label_text, vec3 colour) |
| void(* | end_debug_label )(struct renderer_backend_interface *backend) |
| b8(* | window_create )(struct renderer_backend_interface *backend, struct kwindow *window) |
| Handles window creation. More... | |
| void(* | window_destroy )(struct renderer_backend_interface *backend, struct kwindow *window) |
| Handles window destruction. More... | |
| void(* | window_resized )(struct renderer_backend_interface *backend, const struct kwindow *window) |
| Handles window resizes. More... | |
| b8(* | frame_prepare )(struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| b8(* | frame_prepare_window_surface )(struct renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data) |
| b8(* | frame_commands_begin )(struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| b8(* | frame_commands_end )(struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| b8(* | frame_submit )(struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| b8(* | frame_present )(struct renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data) |
| void(* | viewport_set )(struct renderer_backend_interface *backend, rect_2di rect) |
| Sets the renderer viewport to the given rectangle. More... | |
| void(* | viewport_reset )(struct renderer_backend_interface *backend) |
| Resets the viewport to the default, which matches the application window. More... | |
| void(* | scissor_set )(struct renderer_backend_interface *backend, rect_2di rect) |
| Sets the renderer scissor to the given rectangle. More... | |
| void(* | scissor_reset )(struct renderer_backend_interface *backend) |
| Resets the scissor to the default, which matches the application window. More... | |
| void(* | winding_set )(struct renderer_backend_interface *backend, renderer_winding winding) |
| Set the renderer to use the given winding direction. More... | |
| void(* | cull_mode_set )(struct renderer_backend_interface *backend, renderer_cull_mode cull_mode) |
| Set the renderer to use the given cull mode. More... | |
| void(* | set_stencil_test_enabled )(struct renderer_backend_interface *backend, b8 enabled) |
| Set stencil testing enabled/disabled. More... | |
| void(* | set_depth_test_enabled )(struct renderer_backend_interface *backend, b8 enabled) |
| Set depth testing enabled/disabled. More... | |
| void(* | set_depth_write_enabled )(struct renderer_backend_interface *backend, b8 enabled) |
| Set depth write enabled/disabled. More... | |
| void(* | set_depth_bias )(struct renderer_backend_interface *backend, f32 constant_factor, f32 clamp, f32 slope_factor) |
| Sets depth bias factors and clamp dynamically. More... | |
| void(* | set_depth_bias_enabled )(struct renderer_backend_interface *backend, b8 enabled) |
| Enables/disables depth bias. More... | |
| void(* | set_stencil_reference )(struct renderer_backend_interface *backend, u32 reference) |
| Set the stencil reference for testing. More... | |
| void(* | set_stencil_op )(struct renderer_backend_interface *backend, renderer_stencil_op fail_op, renderer_stencil_op pass_op, renderer_stencil_op depth_fail_op, renderer_compare_op compare_op) |
| Set stencil operation. More... | |
| void(* | begin_rendering )(struct renderer_backend_interface *backend, struct frame_data *p_frame_data, rect_2di render_area, u32 colour_target_count, ktexture *colour_targets, ktexture depth_stencil_target, u32 depth_stencil_layer) |
| void(* | end_rendering )(struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| void(* | set_stencil_compare_mask )(struct renderer_backend_interface *backend, u32 compare_mask) |
| Set stencil compare mask. More... | |
| void(* | set_stencil_write_mask )(struct renderer_backend_interface *backend, u32 write_mask) |
| Set stencil write mask. More... | |
| void(* | clear_colour_set )(struct renderer_backend_interface *backend, vec4 clear_colour) |
| void(* | clear_depth_set )(struct renderer_backend_interface *backend, f32 depth) |
| void(* | clear_stencil_set )(struct renderer_backend_interface *backend, u32 stencil) |
| void(* | clear_colour )(struct renderer_backend_interface *backend, ktexture t) |
| void(* | clear_depth_stencil )(struct renderer_backend_interface *backend, ktexture t) |
| void(* | colour_texture_prepare_for_present )(struct renderer_backend_interface *backend, ktexture t) |
| void(* | texture_prepare_for_sampling )(struct renderer_backend_interface *backend, ktexture t, ktexture_flag_bits flags) |
| b8(* | texture_resources_acquire )(struct renderer_backend_interface *backend, ktexture t, const char *name, ktexture_type type, u32 width, u32 height, u8 channel_count, u8 mip_levels, u16 array_size, ktexture_flag_bits flags) |
| void(* | texture_resources_release )(struct renderer_backend_interface *backend, ktexture t) |
| b8(* | texture_resize )(struct renderer_backend_interface *backend, ktexture t, u32 new_width, u32 new_height) |
| Resizes a texture. There is no check at this level to see if the texture is writeable. Internal resources are destroyed and re-created at the new resolution. Data is lost and would need to be reloaded. More... | |
| b8(* | texture_write_data )(struct renderer_backend_interface *backend, ktexture t, u32 offset, u32 size, const u8 *pixels, b8 include_in_frame_workload) |
| Writes the given data to the provided texture. NOTE: At this level, this can either be a writeable or non-writeable texture because this also handles the initial texture load. The texture system itself should be responsible for blocking write requests to non-writeable textures. More... | |
| b8(* | texture_read_data )(struct renderer_backend_interface *backend, ktexture t, u32 offset, u32 size, u8 **out_pixels) |
| Reads the given data from the provided texture. More... | |
| b8(* | texture_read_pixel )(struct renderer_backend_interface *backend, ktexture t, u32 x, u32 y, u8 **out_rgba) |
| Reads a pixel from the provided texture at the given x/y coordinate. More... | |
| b8(* | shader_create )(struct renderer_backend_interface *backend, kshader shader, kname name, shader_flags flags, primitive_topology_type_bits topology_types, primitive_topology_type default_type, u8 colour_attachment_count, kpixel_format *colour_attachment_formats, kpixel_format depth_attachment_format, kpixel_format stencil_attachment_format, u8 pipeline_count, shader_pipeline_config *pipelines, u8 binding_set_count, const shader_binding_set_config *binding_sets) |
| Creates internal shader resources using the provided parameters. More... | |
| void(* | shader_destroy )(struct renderer_backend_interface *backend, kshader shader) |
| Destroys the given shader and releases any resources held by it. More... | |
| b8(* | shader_reload )(struct renderer_backend_interface *backend, kshader shader, u8 pipeline_count, shader_pipeline_config *pipelines) |
| Reloads the internals of the given shader. More... | |
| b8(* | shader_use )(struct renderer_backend_interface *backend, kshader shader, u8 vertex_layout_index) |
| Uses the given shader, activating it for updates to attributes, uniforms and such, and for use in draw calls. Uses default topology specified by the shader. More... | |
| b8(* | shader_use_with_topology )(struct renderer_backend_interface *backend, kshader shader, primitive_topology_type type, u8 vertex_layout_index) |
| Uses the given shader, activating it for updates to attributes, uniforms and such, and for use in draw calls using the provided topology. More... | |
| b8(* | shader_supports_wireframe )(const struct renderer_backend_interface *backend, kshader shader) |
| Indicates if the supplied shader supports wireframe mode. More... | |
| b8(* | shader_flag_get )(const struct renderer_backend_interface *backend, kshader shader, shader_flags flag) |
| Indicates if the given shader flag is set. More... | |
| void(* | shader_flag_set )(struct renderer_backend_interface *backend, kshader shader, shader_flags flag, b8 enabled) |
| Sets the given shader flag. More... | |
| b8(* | shader_set_immediate_data )(struct renderer_backend_interface *backend, kshader shader, const void *data, u8 size) |
| b8(* | shader_set_binding_data )(struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u64 offset, void *data, u64 size) |
| b8(* | shader_set_binding_texture )(struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u8 array_index, ktexture texture) |
| b8(* | shader_set_binding_sampler )(struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u8 array_index, ksampler_backend sampler) |
| u32(* | shader_acquire_binding_set_instance )(struct renderer_backend_interface *backend, kshader shader, u8 binding_set) |
| void(* | shader_release_binding_set_instance )(struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id) |
| u32(* | shader_binding_set_get_max_instance_count )(struct renderer_backend_interface *backend, kshader shader, u8 binding_set) |
| b8(* | shader_apply_binding_set )(struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id) |
| ksampler_backend(* | sampler_acquire )(struct renderer_backend_interface *backend, kname name, texture_filter filter, texture_repeat repeat, f32 anisotropy) |
| Acquires a internal sampler and returns a handle to it. More... | |
| void(* | sampler_release )(struct renderer_backend_interface *backend, ksampler_backend *sampler) |
| Releases the internal sampler for the given handle. More... | |
| b8(* | sampler_refresh )(struct renderer_backend_interface *backend, ksampler_backend *sampler, texture_filter filter, texture_repeat repeat, f32 anisotropy, u32 mip_levels) |
| Recreates the internal sampler pointed to by the given handle. Modifies the handle. More... | |
| kname(* | sampler_name_get )(struct renderer_backend_interface *backend, ksampler_backend sampler) |
| Attempts to obtain the name of a sampler with the given handle. Returns INVALID_KNAME if not found. More... | |
| b8(* | is_multithreaded )(struct renderer_backend_interface *backend) |
| Indicates if the renderer is capable of multi-threading. More... | |
| b8(* | flag_enabled_get )(struct renderer_backend_interface *backend, renderer_config_flags flag) |
| Indicates if the provided renderer flag is enabled. If multiple flags are passed, all must be set for this to return true. More... | |
| void(* | flag_enabled_set )(struct renderer_backend_interface *backend, renderer_config_flags flag, b8 enabled) |
| Sets whether the included flag(s) are enabled or not. If multiple flags are passed, multiple are set at once. More... | |
| f32(* | max_anisotropy_get )(struct renderer_backend_interface *backend) |
| Obtains the max anisotropy level available from the renderer. 0 means not available. More... | |
| b8(* | renderbuffer_create )(struct renderer_backend_interface *backend, kname name, u64 size, renderbuffer_type type, renderbuffer_flags flags, krenderbuffer buffer) |
| Creates and assigns the renderer-backend-specific buffer. More... | |
| void(* | renderbuffer_destroy )(struct renderer_backend_interface *backend, krenderbuffer buffer) |
| Destroys the given buffer. More... | |
| b8(* | renderbuffer_bind )(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u32 binding_index) |
| Binds the given buffer at the provided offset. More... | |
| b8(* | renderbuffer_unbind )(struct renderer_backend_interface *backend, krenderbuffer buffer) |
| Unbinds the given buffer. More... | |
| void(* | renderbuffer_map_memory )(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size) |
| Maps memory from the given buffer in the provided range to a block of memory and returns it. This memory should be considered invalid once unmapped. More... | |
| void(* | renderbuffer_unmap_memory )(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size) |
| Unmaps memory from the given buffer in the provided range to a block of memory. This memory should be considered invalid once unmapped. More... | |
| void *(* | renderbuffer_get_mapped_memory )(struct renderer_backend_interface *backend, krenderbuffer handle) |
| Obtains the mapped memory of the buffer, if mapped. This memory should be considered invalid once unmapped. More... | |
| b8(* | renderbuffer_flush )(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size) |
| Flushes buffer memory at the given range. Should be done after a write. More... | |
| b8(* | renderbuffer_read )(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size, void **out_memory) |
| Reads memory from the provided buffer at the given range to the output variable. More... | |
| b8(* | renderbuffer_resize )(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 new_total_size) |
| Resizes the given buffer to new_total_size. new_total_size must be greater than the current buffer size. Data from the old internal buffer is copied over. More... | |
| b8(* | renderbuffer_load_range )(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size, const void *data, b8 include_in_frame_workload) |
| Loads provided data into the specified rage of the given buffer. More... | |
| b8(* | renderbuffer_copy_range )(struct renderer_backend_interface *backend, krenderbuffer source, u64 source_offset, krenderbuffer dest, u64 dest_offset, u64 size, b8 include_in_frame_workload) |
| Copies data in the specified rage fron the source to the destination buffer. More... | |
| b8(* | renderbuffer_draw )(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u32 element_count, u32 binding_index, b8 bind_only) |
| Attempts to draw the contents of the provided buffer at the given offset and element count. Only meant for use with vertex and index buffers. More... | |
| void(* | wait_for_idle )(struct renderer_backend_interface *backend) |
A generic "interface" for the renderer backend. The renderer backend is what is responsible for making calls to the graphics API such as Vulkan, OpenGL or DirectX. Each of these should implement this interface. The frontend only interacts via this structure and has no knowledge of the way things actually work on the backend.
| void(* begin_debug_label) (struct renderer_backend_interface *backend, const char *label_text, vec3 colour) |
| void(* begin_rendering) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data, rect_2di render_area, u32 colour_target_count, ktexture *colour_targets, ktexture depth_stencil_target, u32 depth_stencil_layer) |
| void(* clear_colour) (struct renderer_backend_interface *backend, ktexture t) |
| void(* clear_colour_set) (struct renderer_backend_interface *backend, vec4 clear_colour) |
| void(* clear_depth_set) (struct renderer_backend_interface *backend, f32 depth) |
| void(* clear_depth_stencil) (struct renderer_backend_interface *backend, ktexture t) |
| void(* clear_stencil_set) (struct renderer_backend_interface *backend, u32 stencil) |
| void(* colour_texture_prepare_for_present) (struct renderer_backend_interface *backend, ktexture t) |
| void(* cull_mode_set) (struct renderer_backend_interface *backend, renderer_cull_mode cull_mode) |
Set the renderer to use the given cull mode.
| backend | A pointer to the renderer backend interface. |
| cull_mode | The cull mode. |
| void(* end_debug_label) (struct renderer_backend_interface *backend) |
| void(* end_rendering) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| b8(* flag_enabled_get) (struct renderer_backend_interface *backend, renderer_config_flags flag) |
Indicates if the provided renderer flag is enabled. If multiple flags are passed, all must be set for this to return true.
| backend | A pointer to the renderer backend interface. |
| flag | The flag to be checked. |
| void(* flag_enabled_set) (struct renderer_backend_interface *backend, renderer_config_flags flag, b8 enabled) |
Sets whether the included flag(s) are enabled or not. If multiple flags are passed, multiple are set at once.
| backend | A pointer to the renderer backend interface. |
| flag | The flag to be checked. |
| enabled | Indicates whether or not to enable the flag(s). |
| b8(* frame_commands_begin) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| b8(* frame_commands_end) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| b8(* frame_prepare) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| b8(* frame_prepare_window_surface) (struct renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data) |
| b8(* frame_present) (struct renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data) |
| b8(* frame_submit) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data) |
| struct renderer_system_state* frontend_state |
| b8(* initialize) (struct renderer_backend_interface *backend, const renderer_backend_config *config) |
Initializes the backend.
| backend | A pointer to the renderer backend interface. |
| config | A pointer to configuration to be used when initializing the backend. |
| void* internal_context |
The backend-specific renderer context.
| u64 internal_context_size |
The size of the backend-specific renderer context.
| b8(* is_multithreaded) (struct renderer_backend_interface *backend) |
Indicates if the renderer is capable of multi-threading.
| backend | A pointer to the renderer backend interface. |
| f32(* max_anisotropy_get) (struct renderer_backend_interface *backend) |
Obtains the max anisotropy level available from the renderer. 0 means not available.
| backend | A pointer to the renderer backend interface. |
| b8(* renderbuffer_bind) (struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u32 binding_index) |
Binds the given buffer at the provided offset.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to bind. |
| offset | The offset in bytes from the beginning of the buffer. |
| binding_index | The index of which to bind the buffer. Unless using multiple buffers of the same time, pass 0 here. |
| b8(* renderbuffer_copy_range) (struct renderer_backend_interface *backend, krenderbuffer source, u64 source_offset, krenderbuffer dest, u64 dest_offset, u64 size, b8 include_in_frame_workload) |
Copies data in the specified rage fron the source to the destination buffer.
| backend | A pointer to the renderer backend interface. |
| source | A handle to the source buffer to copy data from. |
| source_offset | The offset in bytes from the beginning of the source buffer. |
| dest | A pointer to the destination buffer to copy data to. |
| dest_offset | The offset in bytes from the beginning of the destination buffer. |
| size | The size of the data in bytes to be copied. |
| b8(* renderbuffer_create) (struct renderer_backend_interface *backend, kname name, u64 size, renderbuffer_type type, renderbuffer_flags flags, krenderbuffer buffer) |
Creates and assigns the renderer-backend-specific buffer.
| backend | A pointer to the renderer backend interface. |
| name | The name of the renderbuffer. |
| size | The size of the renderbuffer in bytes. |
| type | The type of renderbuffer to create. |
| flags | The renderbuffer flags. |
| buffer | A handle to create the renderbuffer for. |
| void(* renderbuffer_destroy) (struct renderer_backend_interface *backend, krenderbuffer buffer) |
Destroys the given buffer.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to be destroyed. |
| b8(* renderbuffer_draw) (struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u32 element_count, u32 binding_index, b8 bind_only) |
Attempts to draw the contents of the provided buffer at the given offset and element count. Only meant for use with vertex and index buffers.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to be drawn. |
| offset | The offset in bytes from the beginning of the buffer. |
| element_count | The number of elements to be drawn. |
| binding_index | The index of which to bind the buffer. Unless using multiple buffers of the same time, pass 0 here. |
| bind_only | Only binds the buffer, but does not call draw. |
| b8(* renderbuffer_flush) (struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size) |
Flushes buffer memory at the given range. Should be done after a write.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to unmap. |
| offset | The number of bytes from the beginning of the buffer to flush. |
| size | The amount of memory in the buffer to flush. |
| void*(* renderbuffer_get_mapped_memory) (struct renderer_backend_interface *backend, krenderbuffer handle) |
Obtains the mapped memory of the buffer, if mapped. This memory should be considered invalid once unmapped.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer whose mapped memory is to be obtained. |
| b8(* renderbuffer_load_range) (struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size, const void *data, b8 include_in_frame_workload) |
Loads provided data into the specified rage of the given buffer.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to load data into. |
| offset | The offset in bytes from the beginning of the buffer. |
| size | The size of the data in bytes to be loaded. |
| data | The data to be loaded. |
| void(* renderbuffer_map_memory) (struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size) |
Maps memory from the given buffer in the provided range to a block of memory and returns it. This memory should be considered invalid once unmapped.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to map. |
| offset | The number of bytes from the beginning of the buffer to map. |
| size | The amount of memory in the buffer to map. |
| b8(* renderbuffer_read) (struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size, void **out_memory) |
Reads memory from the provided buffer at the given range to the output variable.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to read from. |
| offset | The number of bytes from the beginning of the buffer to read. |
| size | The amount of memory in the buffer to read. |
| out_memory | A pointer to a block of memory to read to. Must be of appropriate size. |
| b8(* renderbuffer_resize) (struct renderer_backend_interface *backend, krenderbuffer buffer, u64 new_total_size) |
Resizes the given buffer to new_total_size. new_total_size must be greater than the current buffer size. Data from the old internal buffer is copied over.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to be resized. |
| new_total_size | The new size in bytes. Must be larger than the current size. |
| b8(* renderbuffer_unbind) (struct renderer_backend_interface *backend, krenderbuffer buffer) |
Unbinds the given buffer.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to be unbound. |
| void(* renderbuffer_unmap_memory) (struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u64 size) |
Unmaps memory from the given buffer in the provided range to a block of memory. This memory should be considered invalid once unmapped.
| backend | A pointer to the renderer backend interface. |
| buffer | A handle to the buffer to unmap. |
| offset | The number of bytes from the beginning of the buffer to unmap. |
| size | The amount of memory in the buffer to unmap. |
| ksampler_backend(* sampler_acquire) (struct renderer_backend_interface *backend, kname name, texture_filter filter, texture_repeat repeat, f32 anisotropy) |
Acquires a internal sampler and returns a handle to it.
| backend | A pointer to the renderer backend interface. |
| name | The name of the sampler. |
| filter | The min/mag filter. |
| repeat | The repeat mode. |
| anisotropy | The anisotropy level, if needed; otherwise 0. |
| kname(* sampler_name_get) (struct renderer_backend_interface *backend, ksampler_backend sampler) |
Attempts to obtain the name of a sampler with the given handle. Returns INVALID_KNAME if not found.
| backend | A pointer to the renderer backend interface. |
| sampler | A handle to the sampler whose name to get. |
| b8(* sampler_refresh) (struct renderer_backend_interface *backend, ksampler_backend *sampler, texture_filter filter, texture_repeat repeat, f32 anisotropy, u32 mip_levels) |
Recreates the internal sampler pointed to by the given handle. Modifies the handle.
| backend | A pointer to the renderer backend interface. |
| sampler | A pointer to the handle of the sampler to be refreshed. |
| filter | The min/mag filter. |
| repeat | The repeat mode. |
| anisotropy | The anisotropy level, if needed; otherwise 0. |
| mip_levels | The mip levels, if used; otherwise 0. |
| void(* sampler_release) (struct renderer_backend_interface *backend, ksampler_backend *sampler) |
Releases the internal sampler for the given handle.
| backend | A pointer to the renderer backend interface. |
| map | A pointer to the handle whose sampler is to be released. Handle is invalidated upon release. |
| void(* scissor_reset) (struct renderer_backend_interface *backend) |
Resets the scissor to the default, which matches the application window.
| backend | A pointer to the renderer backend interface. |
| void(* scissor_set) (struct renderer_backend_interface *backend, rect_2di rect) |
Sets the renderer scissor to the given rectangle.
| backend | A pointer to the renderer backend interface. |
| rect | The scissor rectangle to be set. |
| void(* set_depth_bias) (struct renderer_backend_interface *backend, f32 constant_factor, f32 clamp, f32 slope_factor) |
Sets depth bias factors and clamp dynamically.
| backend | A pointer to the renderer backend interface. |
| constant_factor | A scalar factor controlling the constant depth value added to each fragment. |
| clamp | The maximum (or minimum) depth bias of a fragment. |
| slope_factor | A scalar factor applied to a fragment’s slope in depth bias calculations. |
| void(* set_depth_bias_enabled) (struct renderer_backend_interface *backend, b8 enabled) |
Enables/disables depth bias.
| backend | A pointer to the renderer backend interface. |
| enabled | True to enable; otherwise disable. |
| void(* set_depth_test_enabled) (struct renderer_backend_interface *backend, b8 enabled) |
Set depth testing enabled/disabled.
| backend | A pointer to the renderer backend interface. |
| enabled | Indicates if depth testing should be enabled/disabled for subsequent draws. |
| void(* set_depth_write_enabled) (struct renderer_backend_interface *backend, b8 enabled) |
Set depth write enabled/disabled.
| backend | A pointer to the renderer backend interface. |
| enabled | Indicates if depth write should be enabled/disabled for subsequent draws. |
| void(* set_stencil_compare_mask) (struct renderer_backend_interface *backend, u32 compare_mask) |
Set stencil compare mask.
| backend | A pointer to the renderer backend interface. |
| compare_mask | The new value to use as the stencil compare mask. |
| void(* set_stencil_op) (struct renderer_backend_interface *backend, renderer_stencil_op fail_op, renderer_stencil_op pass_op, renderer_stencil_op depth_fail_op, renderer_compare_op compare_op) |
Set stencil operation.
| backend | A pointer to the renderer backend interface. |
| fail_op | Specifys the action performed on samples that fail the stencil test. |
| pass_op | Specifys the action performed on samples that pass both the depth and stencil tests. |
| depth_fail_op | Specifys the action performed on samples that pass the stencil test and fail the depth test. |
| compare_op | Specifys the comparison operator used in the stencil test. |
| void(* set_stencil_reference) (struct renderer_backend_interface *backend, u32 reference) |
Set the stencil reference for testing.
| backend | A pointer to the renderer backend interface. |
| reference | The reference to use when stencil testing/writing. |
| void(* set_stencil_test_enabled) (struct renderer_backend_interface *backend, b8 enabled) |
Set stencil testing enabled/disabled.
| backend | A pointer to the renderer backend interface. |
| enabled | Indicates if stencil testing should be enabled/disabled for subsequent draws. |
| void(* set_stencil_write_mask) (struct renderer_backend_interface *backend, u32 write_mask) |
Set stencil write mask.
| backend | A pointer to the renderer backend interface. |
| write_mask | The new value to use as the stencil write mask. |
| u32(* shader_acquire_binding_set_instance) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set) |
| b8(* shader_apply_binding_set) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id) |
| u32(* shader_binding_set_get_max_instance_count) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set) |
| b8(* shader_create) (struct renderer_backend_interface *backend, kshader shader, kname name, shader_flags flags, primitive_topology_type_bits topology_types, primitive_topology_type default_type, u8 colour_attachment_count, kpixel_format *colour_attachment_formats, kpixel_format depth_attachment_format, kpixel_format stencil_attachment_format, u8 pipeline_count, shader_pipeline_config *pipelines, u8 binding_set_count, const shader_binding_set_config *binding_sets) |
Creates internal shader resources using the provided parameters.
| backend | A pointer to the renderer backend interface. |
| shader | A handle to the shader. |
| shader_asset | A constant pointer to the shader asset. |
| void(* shader_destroy) (struct renderer_backend_interface *backend, kshader shader) |
Destroys the given shader and releases any resources held by it.
| backend | A pointer to the renderer backend interface. |
| shader | A handle to the shader to be destroyed. |
| b8(* shader_flag_get) (const struct renderer_backend_interface *backend, kshader shader, shader_flags flag) |
Indicates if the given shader flag is set.
| backend | A constant pointer to the renderer backend interface. |
| shader | A handle to the shader to be used. |
| flag | The flag to check. |
| void(* shader_flag_set) (struct renderer_backend_interface *backend, kshader shader, shader_flags flag, b8 enabled) |
Sets the given shader flag.
| backend | A pointer to the renderer backend interface. |
| shader | A handle to the shader to be used. |
| flag | The flag to set. |
| enabled | Indicates whether the flag should be set or unset. |
| void(* shader_release_binding_set_instance) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id) |
| b8(* shader_reload) (struct renderer_backend_interface *backend, kshader shader, u8 pipeline_count, shader_pipeline_config *pipelines) |
Reloads the internals of the given shader.
| backend | A pointer to the renderer backend interface. |
| shader | A handle to the shader to be reloaded. |
| shader_stage_count | The number of shader stages. |
| shader_stages | An array of shader stages configs. |
| b8(* shader_set_binding_data) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u64 offset, void *data, u64 size) |
| b8(* shader_set_binding_sampler) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u8 array_index, ksampler_backend sampler) |
| b8(* shader_set_binding_texture) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u8 array_index, ktexture texture) |
| b8(* shader_set_immediate_data) (struct renderer_backend_interface *backend, kshader shader, const void *data, u8 size) |
| b8(* shader_supports_wireframe) (const struct renderer_backend_interface *backend, kshader shader) |
Indicates if the supplied shader supports wireframe mode.
| backend | A constant pointer to the renderer backend interface. |
| shader | A handle to the shader to be used. |
| b8(* shader_use) (struct renderer_backend_interface *backend, kshader shader, u8 vertex_layout_index) |
Uses the given shader, activating it for updates to attributes, uniforms and such, and for use in draw calls. Uses default topology specified by the shader.
| backend | A pointer to the renderer backend interface. |
| shader | A handle to the shader to be used. |
| b8(* shader_use_with_topology) (struct renderer_backend_interface *backend, kshader shader, primitive_topology_type type, u8 vertex_layout_index) |
Uses the given shader, activating it for updates to attributes, uniforms and such, and for use in draw calls using the provided topology.
| backend | A pointer to the renderer backend interface. |
| shader | A handle to the shader to be used. |
| type | The primitive topology type to use. |
| void(* shutdown) (struct renderer_backend_interface *backend) |
Shuts the renderer backend down.
| backend | A pointer to the renderer backend interface. |
| void(* texture_prepare_for_sampling) (struct renderer_backend_interface *backend, ktexture t, ktexture_flag_bits flags) |
| b8(* texture_read_data) (struct renderer_backend_interface *backend, ktexture t, u32 offset, u32 size, u8 **out_pixels) |
Reads the given data from the provided texture.
| backend | A pointer to the renderer backend interface. |
| t | A pointer to the texture internal data to be read from. |
| offset | The offset in bytes from the beginning of the data to be read. |
| size | The number of bytes to be read. |
| out_pixels | A pointer to a block of memory to write the read data to. |
| b8(* texture_read_pixel) (struct renderer_backend_interface *backend, ktexture t, u32 x, u32 y, u8 **out_rgba) |
Reads a pixel from the provided texture at the given x/y coordinate.
| backend | A pointer to the renderer backend interface. |
| t | A pointer to the texture internal data to be read from. |
| x | The pixel x-coordinate. |
| y | The pixel y-coordinate. |
| out_rgba | A pointer to an array of u8s to hold the pixel data (should be sizeof(u8) * 4) |
| b8(* texture_resize) (struct renderer_backend_interface *backend, ktexture t, u32 new_width, u32 new_height) |
Resizes a texture. There is no check at this level to see if the texture is writeable. Internal resources are destroyed and re-created at the new resolution. Data is lost and would need to be reloaded.
| backend | A pointer to the renderer backend interface. |
| t | A pointer to the texture internal data to be resized. |
| new_width | The new width in pixels. |
| new_height | The new height in pixels. |
| b8(* texture_resources_acquire) (struct renderer_backend_interface *backend, ktexture t, const char *name, ktexture_type type, u32 width, u32 height, u8 channel_count, u8 mip_levels, u16 array_size, ktexture_flag_bits flags) |
| void(* texture_resources_release) (struct renderer_backend_interface *backend, ktexture t) |
| b8(* texture_write_data) (struct renderer_backend_interface *backend, ktexture t, u32 offset, u32 size, const u8 *pixels, b8 include_in_frame_workload) |
Writes the given data to the provided texture. NOTE: At this level, this can either be a writeable or non-writeable texture because this also handles the initial texture load. The texture system itself should be responsible for blocking write requests to non-writeable textures.
| backend | A pointer to the renderer backend interface. |
| t | A pointer to the texture internal data to be written to. |
| offset | The offset in bytes from the beginning of the data to be written. |
| size | The number of bytes to be written. |
| pixels | The raw image data to be written. |
| void(* viewport_reset) (struct renderer_backend_interface *backend) |
Resets the viewport to the default, which matches the application window.
| backend | A pointer to the renderer backend interface. |
| void(* viewport_set) (struct renderer_backend_interface *backend, rect_2di rect) |
Sets the renderer viewport to the given rectangle.
| backend | A pointer to the renderer backend interface. |
| rect | The viewport rectangle to be set. |
| void(* wait_for_idle) (struct renderer_backend_interface *backend) |
Waits for the renderer backend to be completely idle of work before returning. NOTE: This incurs a lot of overhead/waits, and should be used sparingly.
| void(* winding_set) (struct renderer_backend_interface *backend, renderer_winding winding) |
Set the renderer to use the given winding direction.
| backend | A pointer to the renderer backend interface. |
| winding | The winding direction. |
| b8(* window_create) (struct renderer_backend_interface *backend, struct kwindow *window) |
Handles window creation.
| backend | A pointer to the renderer backend interface. |
| window | A pointer to the window being created. |
| void(* window_destroy) (struct renderer_backend_interface *backend, struct kwindow *window) |
Handles window destruction.
| backend | A pointer to the renderer backend interface. |
| window | A pointer to the window being resized. |
| void(* window_resized) (struct renderer_backend_interface *backend, const struct kwindow *window) |
Handles window resizes.
| backend | A pointer to the renderer backend interface. |
| window | A pointer to the window being resized. |