Kohi Game Engine
renderer_backend_interface Struct Reference

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)
 

Detailed Description

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.

Field Documentation

◆ begin_debug_label

void(* begin_debug_label) (struct renderer_backend_interface *backend, const char *label_text, vec3 colour)

◆ begin_rendering

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)

◆ clear_colour

void(* clear_colour) (struct renderer_backend_interface *backend, khandle renderer_texture_handle)

◆ clear_colour_set

void(* clear_colour_set) (struct renderer_backend_interface *backend, vec4 clear_colour)

◆ clear_depth_set

void(* clear_depth_set) (struct renderer_backend_interface *backend, f32 depth)

◆ clear_depth_stencil

void(* clear_depth_stencil) (struct renderer_backend_interface *backend, khandle renderer_texture_handle)

◆ clear_stencil_set

void(* clear_stencil_set) (struct renderer_backend_interface *backend, u32 stencil)

◆ colour_texture_prepare_for_present

void(* colour_texture_prepare_for_present) (struct renderer_backend_interface *backend, khandle renderer_texture_handle)

◆ cull_mode_set

void(* cull_mode_set) (struct renderer_backend_interface *backend, renderer_cull_mode cull_mode)

Set the renderer to use the given cull mode.

Parameters
backendA pointer to the renderer backend interface.
cull_modeThe cull mode.

◆ end_debug_label

void(* end_debug_label) (struct renderer_backend_interface *backend)

◆ end_rendering

void(* end_rendering) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data)

◆ flag_enabled_get

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.

Parameters
backendA pointer to the renderer backend interface.
flagThe flag to be checked.
Returns
True if the flag(s) set; otherwise false.

◆ flag_enabled_set

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.

Parameters
backendA pointer to the renderer backend interface.
flagThe flag to be checked.
enabledIndicates whether or not to enable the flag(s).

◆ frame_commands_begin

b8(* frame_commands_begin) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data)

◆ frame_commands_end

b8(* frame_commands_end) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data)

◆ frame_prepare

b8(* frame_prepare) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data)

◆ frame_prepare_window_surface

b8(* frame_prepare_window_surface) (struct renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data)

◆ frame_present

b8(* frame_present) (struct renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data)

◆ frame_submit

b8(* frame_submit) (struct renderer_backend_interface *backend, struct frame_data *p_frame_data)

◆ frontend_state

struct renderer_system_state* frontend_state

◆ initialize

b8(* initialize) (struct renderer_backend_interface *backend, const renderer_backend_config *config)

Initializes the backend.

Parameters
backendA pointer to the renderer backend interface.
configA pointer to configuration to be used when initializing the backend.
Returns
True if initialized successfully; otherwise false.

◆ internal_context

void* internal_context

The backend-specific renderer context.

◆ internal_context_size

u64 internal_context_size

The size of the backend-specific renderer context.

◆ is_multithreaded

b8(* is_multithreaded) (struct renderer_backend_interface *backend)

Indicates if the renderer is capable of multi-threading.

Parameters
backendA pointer to the renderer backend interface.

◆ max_anisotropy_get

f32(* max_anisotropy_get) (struct renderer_backend_interface *backend)

Obtains the max anisotropy level available from the renderer. 0 means not available.

Parameters
backendA pointer to the renderer backend interface.

◆ renderbuffer_bind

b8(* renderbuffer_bind) (struct renderer_backend_interface *backend, renderbuffer *buffer, u64 offset)

Binds the given buffer at the provided offset.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to bind.
offsetThe offset in bytes from the beginning of the buffer.
Returns
True on success; otherwise false.

◆ renderbuffer_copy_range

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.

Parameters
backendA pointer to the renderer backend interface.
sourceA pointer to the source buffer to copy data from.
source_offsetThe offset in bytes from the beginning of the source buffer.
destA pointer to the destination buffer to copy data to.
dest_offsetThe offset in bytes from the beginning of the destination buffer.
sizeThe size of the data in bytes to be copied.
Returns
True on success; otherwise false.

◆ renderbuffer_draw

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to be drawn.
offsetThe offset in bytes from the beginning of the buffer.
element_countThe number of elements to be drawn.
bind_onlyOnly binds the buffer, but does not call draw.
Returns
True on success; otherwise false.

◆ renderbuffer_flush

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to unmap.
offsetThe number of bytes from the beginning of the buffer to flush.
sizeThe amount of memory in the buffer to flush.
Returns
True on success; otherwise false.

◆ renderbuffer_internal_create

b8(* renderbuffer_internal_create) (struct renderer_backend_interface *backend, renderbuffer *buffer)

Creates and assigns the renderer-backend-specific buffer.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to create the internal buffer for.
Returns
True on success; otherwise false.

◆ renderbuffer_internal_destroy

void(* renderbuffer_internal_destroy) (struct renderer_backend_interface *backend, renderbuffer *buffer)

Destroys the given buffer.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to be destroyed.

◆ renderbuffer_load_range

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to load data into.
offsetThe offset in bytes from the beginning of the buffer.
sizeThe size of the data in bytes to be loaded.
dataThe data to be loaded.
Returns
True on success; otherwise false.

◆ renderbuffer_map_memory

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to map.
offsetThe number of bytes from the beginning of the buffer to map.
sizeThe amount of memory in the buffer to map.
Returns
A mapped block of memory. Freed and invalid once unmapped.

◆ renderbuffer_read

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to read from.
offsetThe number of bytes from the beginning of the buffer to read.
sizeThe amount of memory in the buffer to read.
out_memoryA pointer to a block of memory to read to. Must be of appropriate size.
Returns
True on success; otherwise false.

◆ renderbuffer_resize

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to be resized.
new_total_sizeThe new size in bytes. Must be larger than the current size.
Returns
True on success; otherwise false.

◆ renderbuffer_unbind

b8(* renderbuffer_unbind) (struct renderer_backend_interface *backend, renderbuffer *buffer)

Unbinds the given buffer.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to be unbound.
Returns
True on success; otherwise false.

◆ renderbuffer_unmap_memory

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA pointer to the buffer to unmap.
offsetThe number of bytes from the beginning of the buffer to unmap.
sizeThe amount of memory in the buffer to unmap.

◆ sampler_acquire

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.

Parameters
backendA pointer to the renderer backend interface.
nameThe name of the sampler.
filterThe min/mag filter.
repeatThe repeat mode.
anisotropyThe anisotropy level, if needed; otherwise 0.
Returns
A handle to the sampler on success; otherwise an invalid handle.

◆ sampler_name_get

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.

Parameters
backendA pointer to the renderer backend interface.
samplerA handle to the sampler whose name to get.
Returns
The name of the sampler on success; otherwise INVALID_KNAME.

◆ sampler_refresh

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.

Parameters
backendA pointer to the renderer backend interface.
samplerA pointer to the handle of the sampler to be refreshed.
filterThe min/mag filter.
repeatThe repeat mode.
anisotropyThe anisotropy level, if needed; otherwise 0.
mip_levelsThe mip levels, if used; otherwise 0.
Returns
True on success; otherwise false.

◆ sampler_release

void(* sampler_release) (struct renderer_backend_interface *backend, khandle *sampler)

Releases the internal sampler for the given handle.

Parameters
backendA pointer to the renderer backend interface.
mapA pointer to the handle whose sampler is to be released. Handle is invalidated upon release.

◆ scissor_reset

void(* scissor_reset) (struct renderer_backend_interface *backend)

Resets the scissor to the default, which matches the application window.

Parameters
backendA pointer to the renderer backend interface.

◆ scissor_set

void(* scissor_set) (struct renderer_backend_interface *backend, vec4 rect)

Sets the renderer scissor to the given rectangle.

Parameters
backendA pointer to the renderer backend interface.
rectThe scissor rectangle to be set.

◆ set_depth_test_enabled

void(* set_depth_test_enabled) (struct renderer_backend_interface *backend, b8 enabled)

Set depth testing enabled/disabled.

Parameters
backendA pointer to the renderer backend interface.
enabledIndicates if depth testing should be enabled/disabled for subsequent draws.

◆ set_depth_write_enabled

void(* set_depth_write_enabled) (struct renderer_backend_interface *backend, b8 enabled)

Set depth write enabled/disabled.

Parameters
backendA pointer to the renderer backend interface.
enabledIndicates if depth write should be enabled/disabled for subsequent draws.

◆ set_stencil_compare_mask

void(* set_stencil_compare_mask) (struct renderer_backend_interface *backend, u32 compare_mask)

Set stencil compare mask.

Parameters
backendA pointer to the renderer backend interface.
compare_maskThe new value to use as the stencil compare mask.

◆ set_stencil_op

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.

Parameters
backendA pointer to the renderer backend interface.
fail_opSpecifys the action performed on samples that fail the stencil test.
pass_opSpecifys the action performed on samples that pass both the depth and stencil tests.
depth_fail_opSpecifys the action performed on samples that pass the stencil test and fail the depth test.
compare_opSpecifys the comparison operator used in the stencil test.

◆ set_stencil_reference

void(* set_stencil_reference) (struct renderer_backend_interface *backend, u32 reference)

Set the stencil reference for testing.

Parameters
backendA pointer to the renderer backend interface.
referenceThe reference to use when stencil testing/writing.

◆ set_stencil_test_enabled

void(* set_stencil_test_enabled) (struct renderer_backend_interface *backend, b8 enabled)

Set stencil testing enabled/disabled.

Parameters
backendA pointer to the renderer backend interface.
enabledIndicates if stencil testing should be enabled/disabled for subsequent draws.

◆ set_stencil_write_mask

void(* set_stencil_write_mask) (struct renderer_backend_interface *backend, u32 write_mask)

Set stencil write mask.

Parameters
backendA pointer to the renderer backend interface.
write_maskThe new value to use as the stencil write mask.

◆ shader_apply_per_draw

b8(* shader_apply_per_draw) (struct renderer_backend_interface *backend, khandle shader, u16 generation)

Applies per-draw data to the uniform buffer.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to apply the instance data for.
generationThe current generation of the per-draw data. Used for synchronization by the backend.
Returns
True on success; otherwise false.

◆ shader_apply_per_frame

b8(* shader_apply_per_frame) (struct renderer_backend_interface *backend, khandle shader, u16 renderer_frame_number)

Applies per-frame data to the uniform buffer.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to apply the global data for.
renderer_frame_numberThe renderer's frame number, internally used as the generation of the per-frame data. Used for synchronization by the backend.
Returns
True on success; otherwise false.

◆ shader_apply_per_group

b8(* shader_apply_per_group) (struct renderer_backend_interface *backend, khandle shader, u16 generation)

Applies data for the currently bound group.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to apply the instance data for.
generationThe current generation of the group's data. Used for synchronization by the backend.
Returns
True on success; otherwise false.

◆ shader_bind_per_draw

b8(* shader_bind_per_draw) (struct renderer_backend_interface *backend, khandle shader, u32 draw_id)

Binds the given per-draw frequency id.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to be used.
draw_idThe per-draw frequency id.
Returns
True on success; otherwise false.

◆ shader_bind_per_frame

b8(* shader_bind_per_frame) (struct renderer_backend_interface *backend, khandle shader)

Binds the per-frame frequency.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to be used.
Returns
True on success; otherwise false.

◆ shader_bind_per_group

b8(* shader_bind_per_group) (struct renderer_backend_interface *backend, khandle shader, u32 group_id)

Binds the given per-group frequency id.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to be used.
group_idThe per-group frequency id.
Returns
True on success; otherwise false.

◆ shader_create

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.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader.
shader_assetA constant pointer to the shader asset.
Returns
b8 True on success; otherwise false.

◆ shader_destroy

void(* shader_destroy) (struct renderer_backend_interface *backend, khandle shader)

Destroys the given shader and releases any resources held by it.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to be destroyed.

◆ shader_flag_get

b8(* shader_flag_get) (const struct renderer_backend_interface *backend, khandle shader, shader_flags flag)

Indicates if the given shader flag is set.

Parameters
backendA constant pointer to the renderer backend interface.
shaderA handle to the shader to be used.
flagThe flag to check.
Returns
True if set; otherwise false.

◆ shader_flag_set

void(* shader_flag_set) (struct renderer_backend_interface *backend, khandle shader, shader_flags flag, b8 enabled)

Sets the given shader flag.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to be used.
flagThe flag to set.
enabledIndicates whether the flag should be set or unset.

◆ shader_per_draw_resources_acquire

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.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to acquire resources from.
texture_map_countThe number of texture maps used.
mapsAn array of pointers to texture maps. Must be one map per instance texture.
out_local_idA pointer to hold the new local identifier.
Returns
True on success; otherwise false.

◆ shader_per_draw_resources_release

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.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to release resources from.
instance_idThe local identifier whose resources are to be released.
Returns
True on success; otherwise false.

◆ shader_per_group_resources_acquire

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.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to acquire resources from.
out_instance_idA pointer to hold the new instance identifier.
Returns
True on success; otherwise false.

◆ shader_per_group_resources_release

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.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to release resources from.
instance_idThe instance identifier whose resources are to be released.
Returns
True on success; otherwise false.

◆ shader_reload

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.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to be reloaded.
shader_stage_countThe number of shader stages.
shader_stagesAn array of shader stages configs.
Returns
True on success; otherwise false.

◆ shader_supports_wireframe

b8(* shader_supports_wireframe) (const struct renderer_backend_interface *backend, khandle shader)

Indicates if the supplied shader supports wireframe mode.

Parameters
backendA constant pointer to the renderer backend interface.
shaderA handle to the shader to be used.
Returns
True if supported; otherwise false.

◆ shader_uniform_set

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.

Parameters
backendA pointer to the renderer backend interface.
sA ponter to the shader.
uniformA constant pointer to the uniform.
array_indexThe array index to set, if the uniform is an array. Ignored otherwise.
valueA pointer to the value to be set.
Returns
b8 True on success; otherwise false.

◆ shader_use

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.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to be used.
Returns
True on success; otherwise false.

◆ shutdown

void(* shutdown) (struct renderer_backend_interface *backend)

Shuts the renderer backend down.

Parameters
backendA pointer to the renderer backend interface.

◆ texture_prepare_for_sampling

void(* texture_prepare_for_sampling) (struct renderer_backend_interface *backend, khandle renderer_texture_handle, ktexture_flag_bits flags)

◆ texture_read_data

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.

Parameters
backendA pointer to the renderer backend interface.
tA pointer to the texture internal data to be read from.
offsetThe offset in bytes from the beginning of the data to be read.
sizeThe number of bytes to be read.
out_pixelsA pointer to a block of memory to write the read data to.
Returns
True on success; otherwise false.

◆ texture_read_pixel

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.

Parameters
backendA pointer to the renderer backend interface.
tA pointer to the texture internal data to be read from.
xThe pixel x-coordinate.
yThe pixel y-coordinate.
out_rgbaA pointer to an array of u8s to hold the pixel data (should be sizeof(u8) * 4)
Returns
True on success; otherwise false.

◆ texture_resize

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.

Parameters
backendA pointer to the renderer backend interface.
tA pointer to the texture internal data to be resized.
new_widthThe new width in pixels.
new_heightThe new height in pixels.
Returns
True on success; otherwise false.

◆ texture_resources_acquire

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)

◆ texture_resources_release

void(* texture_resources_release) (struct renderer_backend_interface *backend, khandle *renderer_texture_handle)

◆ texture_write_data

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.

Parameters
backendA pointer to the renderer backend interface.
tA pointer to the texture internal data to be written to.
offsetThe offset in bytes from the beginning of the data to be written.
sizeThe number of bytes to be written.
pixelsThe raw image data to be written.
Returns
True on success; otherwise false.

◆ viewport_reset

void(* viewport_reset) (struct renderer_backend_interface *backend)

Resets the viewport to the default, which matches the application window.

Parameters
backendA pointer to the renderer backend interface.

◆ viewport_set

void(* viewport_set) (struct renderer_backend_interface *backend, vec4 rect)

Sets the renderer viewport to the given rectangle.

Parameters
backendA pointer to the renderer backend interface.
rectThe viewport rectangle to be set.

◆ wait_for_idle

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.

◆ winding_set

void(* winding_set) (struct renderer_backend_interface *backend, renderer_winding winding)

Set the renderer to use the given winding direction.

Parameters
backendA pointer to the renderer backend interface.
windingThe winding direction.

◆ window_create

b8(* window_create) (struct renderer_backend_interface *backend, struct kwindow *window)

Handles window creation.

Parameters
backendA pointer to the renderer backend interface.
windowA pointer to the window being created.
Returns
True on success; otherwise false.

◆ window_destroy

void(* window_destroy) (struct renderer_backend_interface *backend, struct kwindow *window)

Handles window destruction.

Parameters
backendA pointer to the renderer backend interface.
windowA pointer to the window being resized.

◆ window_resized

void(* window_resized) (struct renderer_backend_interface *backend, const struct kwindow *window)

Handles window resizes.

Parameters
backendA pointer to the renderer backend interface.
windowA pointer to the window being resized.

The documentation for this struct was generated from the following file: