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, 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)
 

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_2di render_area, u32 colour_target_count, ktexture *colour_targets, ktexture depth_stencil_target, u32 depth_stencil_layer)

◆ clear_colour

void(* clear_colour) (struct renderer_backend_interface *backend, ktexture t)

◆ 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, ktexture t)

◆ 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, ktexture t)

◆ 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, krenderbuffer buffer, u64 offset, u32 binding_index)

Binds the given buffer at the provided offset.

Parameters
backendA pointer to the renderer backend interface.
bufferA handle to the buffer to bind.
offsetThe offset in bytes from the beginning of the buffer.
binding_indexThe index of which to bind the buffer. Unless using multiple buffers of the same time, pass 0 here.
Returns
True on success; otherwise false.

◆ renderbuffer_copy_range

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.

Parameters
backendA pointer to the renderer backend interface.
sourceA handle 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_create

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.

Parameters
backendA pointer to the renderer backend interface.
nameThe name of the renderbuffer.
sizeThe size of the renderbuffer in bytes.
typeThe type of renderbuffer to create.
flagsThe renderbuffer flags.
bufferA handle to create the renderbuffer for.
Returns
True on success; otherwise false.

◆ renderbuffer_destroy

void(* renderbuffer_destroy) (struct renderer_backend_interface *backend, krenderbuffer buffer)

Destroys the given buffer.

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

◆ renderbuffer_draw

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA handle to the buffer to be drawn.
offsetThe offset in bytes from the beginning of the buffer.
element_countThe number of elements to be drawn.
binding_indexThe index of which to bind the buffer. Unless using multiple buffers of the same time, pass 0 here.
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, krenderbuffer 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 handle 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_get_mapped_memory

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA handle to the buffer whose mapped memory is to be obtained.
Returns
A pointer to the mapped memory, if mapped. Otherwise KNULL.

◆ renderbuffer_load_range

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA handle 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, 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.

Parameters
backendA pointer to the renderer backend interface.
bufferA handle 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.

◆ renderbuffer_read

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA handle 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, 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.

Parameters
backendA pointer to the renderer backend interface.
bufferA handle 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, krenderbuffer buffer)

Unbinds the given buffer.

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

◆ renderbuffer_unmap_memory

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.

Parameters
backendA pointer to the renderer backend interface.
bufferA handle 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

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.

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, ksampler_backend 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, 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.

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, ksampler_backend *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, rect_2di 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_bias

void(* set_depth_bias) (struct renderer_backend_interface *backend, f32 constant_factor, f32 clamp, f32 slope_factor)

Sets depth bias factors and clamp dynamically.

Parameters
backendA pointer to the renderer backend interface.
constant_factorA scalar factor controlling the constant depth value added to each fragment.
clampThe maximum (or minimum) depth bias of a fragment.
slope_factorA scalar factor applied to a fragment’s slope in depth bias calculations.

◆ set_depth_bias_enabled

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

Enables/disables depth bias.

Parameters
backendA pointer to the renderer backend interface.
enabledTrue to enable; otherwise disable.

◆ 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_acquire_binding_set_instance

u32(* shader_acquire_binding_set_instance) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set)

◆ shader_apply_binding_set

b8(* shader_apply_binding_set) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id)

◆ shader_binding_set_get_max_instance_count

u32(* shader_binding_set_get_max_instance_count) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set)

◆ shader_create

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.

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, kshader 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, kshader 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, kshader 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_release_binding_set_instance

void(* shader_release_binding_set_instance) (struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id)

◆ shader_reload

b8(* shader_reload) (struct renderer_backend_interface *backend, kshader shader, u8 pipeline_count, shader_pipeline_config *pipelines)

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_set_binding_data

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)

◆ shader_set_binding_sampler

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)

◆ shader_set_binding_texture

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)

◆ shader_set_immediate_data

b8(* shader_set_immediate_data) (struct renderer_backend_interface *backend, kshader shader, const void *data, u8 size)

◆ shader_supports_wireframe

b8(* shader_supports_wireframe) (const struct renderer_backend_interface *backend, kshader 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_use

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.

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

◆ shader_use_with_topology

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.

Parameters
backendA pointer to the renderer backend interface.
shaderA handle to the shader to be used.
typeThe primitive topology type to use.
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, ktexture t, ktexture_flag_bits flags)

◆ texture_read_data

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.

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, ktexture t, 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, 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.

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, 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)

◆ texture_resources_release

void(* texture_resources_release) (struct renderer_backend_interface *backend, ktexture t)

◆ texture_write_data

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.

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, rect_2di 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: