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, vec4 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, vec4 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_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_2d render_area, u32 colour_target_count, khandle *colour_targets, khandle 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, khandle renderer_texture_handle) |
void(* | clear_depth_stencil )(struct renderer_backend_interface *backend, khandle renderer_texture_handle) |
void(* | colour_texture_prepare_for_present )(struct renderer_backend_interface *backend, khandle renderer_texture_handle) |
void(* | texture_prepare_for_sampling )(struct renderer_backend_interface *backend, khandle renderer_texture_handle, ktexture_flag_bits flags) |
b8(* | texture_resources_acquire )(struct renderer_backend_interface *backend, const char *name, ktexture_type type, u32 width, u32 height, u8 channel_count, u8 mip_levels, u16 array_size, ktexture_flag_bits flags, khandle *out_renderer_texture_handle) |
void(* | texture_resources_release )(struct renderer_backend_interface *backend, khandle *renderer_texture_handle) |
b8(* | texture_resize )(struct renderer_backend_interface *backend, khandle renderer_texture_handle, 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, khandle renderer_texture_handle, 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, khandle renderer_texture_handle, 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, khandle renderer_texture_handle, 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, khandle shader, kname name, shader_flags flags, u32 topology_types, face_cull_mode cull_mode, u32 stage_count, shader_stage *stages, kname *stage_names, const char **stage_sources, u32 max_groups, u32 max_draw_ids, u32 attribute_count, const shader_attribute *attributes, u32 uniform_count, const shader_uniform *d_uniforms) |
Creates internal shader resources using the provided parameters. More... | |
void(* | shader_destroy )(struct renderer_backend_interface *backend, khandle shader) |
Destroys the given shader and releases any resources held by it. More... | |
b8(* | shader_reload )(struct renderer_backend_interface *backend, khandle s, u32 stage_count, shader_stage *stages, kname *names, const char **sources) |
Reloads the internals of the given shader. More... | |
b8(* | shader_use )(struct renderer_backend_interface *backend, khandle shader) |
Uses the given shader, activating it for updates to attributes, uniforms and such, and for use in draw calls. More... | |
b8(* | shader_supports_wireframe )(const struct renderer_backend_interface *backend, khandle shader) |
Indicates if the supplied shader supports wireframe mode. More... | |
b8(* | shader_flag_get )(const struct renderer_backend_interface *backend, khandle shader, shader_flags flag) |
Indicates if the given shader flag is set. More... | |
void(* | shader_flag_set )(struct renderer_backend_interface *backend, khandle shader, shader_flags flag, b8 enabled) |
Sets the given shader flag. More... | |
b8(* | shader_bind_per_frame )(struct renderer_backend_interface *backend, khandle shader) |
Binds the per-frame frequency. More... | |
b8(* | shader_bind_per_group )(struct renderer_backend_interface *backend, khandle shader, u32 group_id) |
Binds the given per-group frequency id. More... | |
b8(* | shader_bind_per_draw )(struct renderer_backend_interface *backend, khandle shader, u32 draw_id) |
Binds the given per-draw frequency id. More... | |
b8(* | shader_apply_per_frame )(struct renderer_backend_interface *backend, khandle shader, u16 renderer_frame_number) |
Applies per-frame data to the uniform buffer. More... | |
b8(* | shader_apply_per_group )(struct renderer_backend_interface *backend, khandle shader, u16 generation) |
Applies data for the currently bound group. More... | |
b8(* | shader_apply_per_draw )(struct renderer_backend_interface *backend, khandle shader, u16 generation) |
Applies per-draw data to the uniform buffer. More... | |
b8(* | shader_per_group_resources_acquire )(struct renderer_backend_interface *backend, khandle shader, u32 *out_instance_id) |
Acquires internal instance-level resources and provides an instance id. More... | |
b8(* | shader_per_group_resources_release )(struct renderer_backend_interface *backend, khandle shader, u32 instance_id) |
Releases internal instance-level resources for the given instance id. More... | |
b8(* | shader_per_draw_resources_acquire )(struct renderer_backend_interface *backend, khandle shader, u32 *out_local_id) |
Acquires internal local-level resources and provides an instance id. More... | |
b8(* | shader_per_draw_resources_release )(struct renderer_backend_interface *backend, khandle shader, u32 local_id) |
Releases internal local-level resources for the given instance id. More... | |
b8(* | shader_uniform_set )(struct renderer_backend_interface *backend, khandle frontend_shader, struct shader_uniform *uniform, u32 array_index, const void *value) |
Sets the uniform of the given shader to the provided value. More... | |
khandle(* | 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, khandle *sampler) |
Releases the internal sampler for the given handle. More... | |
b8(* | sampler_refresh )(struct renderer_backend_interface *backend, khandle *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, khandle 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_internal_create )(struct renderer_backend_interface *backend, renderbuffer *buffer) |
Creates and assigns the renderer-backend-specific buffer. More... | |
void(* | renderbuffer_internal_destroy )(struct renderer_backend_interface *backend, renderbuffer *buffer) |
Destroys the given buffer. More... | |
b8(* | renderbuffer_bind )(struct renderer_backend_interface *backend, renderbuffer *buffer, u64 offset) |
Binds the given buffer at the provided offset. More... | |
b8(* | renderbuffer_unbind )(struct renderer_backend_interface *backend, renderbuffer *buffer) |
Unbinds the given buffer. More... | |
void *(* | renderbuffer_map_memory )(struct renderer_backend_interface *backend, renderbuffer *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, renderbuffer *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... | |
b8(* | renderbuffer_flush )(struct renderer_backend_interface *backend, renderbuffer *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, renderbuffer *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, renderbuffer *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, renderbuffer *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, renderbuffer *source, u64 source_offset, renderbuffer *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, renderbuffer *buffer, u64 offset, u32 element_count, 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_2d render_area, u32 colour_target_count, khandle *colour_targets, khandle depth_stencil_target, u32 depth_stencil_layer) |
void(* clear_colour) (struct renderer_backend_interface *backend, khandle renderer_texture_handle) |
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, khandle renderer_texture_handle) |
void(* clear_stencil_set) (struct renderer_backend_interface *backend, u32 stencil) |
void(* colour_texture_prepare_for_present) (struct renderer_backend_interface *backend, khandle renderer_texture_handle) |
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, renderbuffer *buffer, u64 offset) |
Binds the given buffer at the provided offset.
backend | A pointer to the renderer backend interface. |
buffer | A pointer to the buffer to bind. |
offset | The offset in bytes from the beginning of the buffer. |
b8(* renderbuffer_copy_range) (struct renderer_backend_interface *backend, renderbuffer *source, u64 source_offset, renderbuffer *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 pointer 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_draw) (struct renderer_backend_interface *backend, renderbuffer *buffer, u64 offset, u32 element_count, 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 pointer 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. |
bind_only | Only binds the buffer, but does not call draw. |
b8(* renderbuffer_flush) (struct renderer_backend_interface *backend, renderbuffer *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 pointer 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. |
b8(* renderbuffer_internal_create) (struct renderer_backend_interface *backend, renderbuffer *buffer) |
Creates and assigns the renderer-backend-specific buffer.
backend | A pointer to the renderer backend interface. |
buffer | A pointer to create the internal buffer for. |
void(* renderbuffer_internal_destroy) (struct renderer_backend_interface *backend, renderbuffer *buffer) |
Destroys the given buffer.
backend | A pointer to the renderer backend interface. |
buffer | A pointer to the buffer to be destroyed. |
b8(* renderbuffer_load_range) (struct renderer_backend_interface *backend, renderbuffer *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 pointer 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, renderbuffer *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 pointer 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, renderbuffer *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 pointer 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, renderbuffer *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 pointer 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, renderbuffer *buffer) |
Unbinds the given buffer.
backend | A pointer to the renderer backend interface. |
buffer | A pointer to the buffer to be unbound. |
void(* renderbuffer_unmap_memory) (struct renderer_backend_interface *backend, renderbuffer *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 pointer 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. |
khandle(* 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, khandle 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, khandle *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, khandle *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, vec4 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_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. |
b8(* shader_apply_per_draw) (struct renderer_backend_interface *backend, khandle shader, u16 generation) |
Applies per-draw data to the uniform buffer.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to apply the instance data for. |
generation | The current generation of the per-draw data. Used for synchronization by the backend. |
b8(* shader_apply_per_frame) (struct renderer_backend_interface *backend, khandle shader, u16 renderer_frame_number) |
Applies per-frame data to the uniform buffer.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to apply the global data for. |
renderer_frame_number | The renderer's frame number, internally used as the generation of the per-frame data. Used for synchronization by the backend. |
b8(* shader_apply_per_group) (struct renderer_backend_interface *backend, khandle shader, u16 generation) |
Applies data for the currently bound group.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to apply the instance data for. |
generation | The current generation of the group's data. Used for synchronization by the backend. |
b8(* shader_bind_per_draw) (struct renderer_backend_interface *backend, khandle shader, u32 draw_id) |
Binds the given per-draw frequency id.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to be used. |
draw_id | The per-draw frequency id. |
b8(* shader_bind_per_frame) (struct renderer_backend_interface *backend, khandle shader) |
Binds the per-frame frequency.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to be used. |
b8(* shader_bind_per_group) (struct renderer_backend_interface *backend, khandle shader, u32 group_id) |
Binds the given per-group frequency id.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to be used. |
group_id | The per-group frequency id. |
b8(* shader_create) (struct renderer_backend_interface *backend, khandle shader, kname name, shader_flags flags, u32 topology_types, face_cull_mode cull_mode, u32 stage_count, shader_stage *stages, kname *stage_names, const char **stage_sources, u32 max_groups, u32 max_draw_ids, u32 attribute_count, const shader_attribute *attributes, u32 uniform_count, const shader_uniform *d_uniforms) |
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, khandle 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, khandle 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, khandle 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. |
b8(* shader_per_draw_resources_acquire) (struct renderer_backend_interface *backend, khandle shader, u32 *out_local_id) |
Acquires internal local-level resources and provides an instance id.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to acquire resources from. |
texture_map_count | The number of texture maps used. |
maps | An array of pointers to texture maps. Must be one map per instance texture. |
out_local_id | A pointer to hold the new local identifier. |
b8(* shader_per_draw_resources_release) (struct renderer_backend_interface *backend, khandle shader, u32 local_id) |
Releases internal local-level resources for the given instance id.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to release resources from. |
instance_id | The local identifier whose resources are to be released. |
b8(* shader_per_group_resources_acquire) (struct renderer_backend_interface *backend, khandle shader, u32 *out_instance_id) |
Acquires internal instance-level resources and provides an instance id.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to acquire resources from. |
out_instance_id | A pointer to hold the new instance identifier. |
b8(* shader_per_group_resources_release) (struct renderer_backend_interface *backend, khandle shader, u32 instance_id) |
Releases internal instance-level resources for the given instance id.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to release resources from. |
instance_id | The instance identifier whose resources are to be released. |
b8(* shader_reload) (struct renderer_backend_interface *backend, khandle s, u32 stage_count, shader_stage *stages, kname *names, const char **sources) |
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_supports_wireframe) (const struct renderer_backend_interface *backend, khandle 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_uniform_set) (struct renderer_backend_interface *backend, khandle frontend_shader, struct shader_uniform *uniform, u32 array_index, const void *value) |
Sets the uniform of the given shader to the provided value.
backend | A pointer to the renderer backend interface. |
s | A ponter to the shader. |
uniform | A constant pointer to the uniform. |
array_index | The array index to set, if the uniform is an array. Ignored otherwise. |
value | A pointer to the value to be set. |
b8(* shader_use) (struct renderer_backend_interface *backend, khandle shader) |
Uses the given shader, activating it for updates to attributes, uniforms and such, and for use in draw calls.
backend | A pointer to the renderer backend interface. |
shader | A handle to the shader to be used. |
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, khandle renderer_texture_handle, ktexture_flag_bits flags) |
b8(* texture_read_data) (struct renderer_backend_interface *backend, khandle renderer_texture_handle, 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, khandle renderer_texture_handle, 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, khandle renderer_texture_handle, 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, const char *name, ktexture_type type, u32 width, u32 height, u8 channel_count, u8 mip_levels, u16 array_size, ktexture_flag_bits flags, khandle *out_renderer_texture_handle) |
void(* texture_resources_release) (struct renderer_backend_interface *backend, khandle *renderer_texture_handle) |
b8(* texture_write_data) (struct renderer_backend_interface *backend, khandle renderer_texture_handle, 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, vec4 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. |