Kohi Game Engine
renderer_types.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <containers/freelist.h>
4 #include <core_render_types.h>
5 #include <defines.h>
6 #include <math/math_types.h>
7 #include <strings/kname.h>
8 
9 struct shader_uniform;
10 struct frame_data;
11 struct terrain;
12 struct viewport;
13 struct camera;
14 struct material;
16 
17 // Max number of point lights that can exist in the renderer at once.
18 #define KMATERIAL_MAX_GLOBAL_POINT_LIGHTS 64
19 // Max number of point lights that can be bound in a single draw.
20 #define KMATERIAL_MAX_BOUND_POINT_LIGHTS 8
21 
22 // The max number of "frames" for which data can exist. This would be 2 if
23 // only double-buffering was supported, but since triple-buffering is supported
24 // this must be always taken into account.
25 #define RENDERER_MAX_FRAME_COUNT 3
26 
27 typedef struct renderbuffer_data {
33  void* elements;
37 
38 typedef struct geometry_render_data {
41 
42  // The per-draw id to be used when applying this data. Used for draws that don't use materials.
44 
48 
55 
62 
66 
74 
75 typedef enum renderer_stencil_op {
93 
94 typedef enum renderer_compare_op {
112 
118 
120 
125 
130 
141 
142 typedef enum renderbuffer_type {
158 
164 
167  // Automatically map the buffer memory on creation. Maps the entire buffer range.
169  // The buffer should be setup to have multiple internal buffers, one per frame buffer (i.e. triple-buffered = 3)
172 
174 
176 #define KRENDERBUFFER_INVALID INVALID_ID_U16
177 
178 #define KRENDERBUFFER_NAME_VERTEX_STANDARD "Kohi.RenderBuffer.VertexStandard"
179 #define KRENDERBUFFER_NAME_INDEX_STANDARD "Kohi.RenderBuffer.IndexStandard"
180 
181 #define KRENDERBUFFER_BIND_INDEX_VERTEX_STANDARD 0
182 #define KRENDERBUFFER_BIND_INDEX_VERTEX_EXTENDED 1
183 #define KRENDERBUFFER_BIND_INDEX_INDEX_STANDARD 0
184 
193 
195 
197 typedef struct renderer_backend_config {
199  const char* application_name;
210 
212 
214 typedef enum renderer_winding {
220 
222 typedef enum renderer_cull_mode {
232 
236 typedef struct kwindow_renderer_state {
237  // Pointer back to main window.
238  struct kwindow* window;
239  // The viewport information for the given window.
240  struct viewport* active_viewport;
241 
242  // This is technically the swapchain images, which should be wrapped into a single texture.
244  // This is technically the per-frame depth image, which should be wrapped into a single texture.
246 
250 
251 // Handle to a renderer backend sampler.
253 #define KSAMPLER_BACKEND_INVALID INVALID_ID_U16
254 
263  // A pointer to the frontend state in case the backend needs to communicate with it.
264  struct renderer_system_state* frontend_state;
265 
274 
283 
289  void (*shutdown)(struct renderer_backend_interface* backend);
290 
291  void (*begin_debug_label)(struct renderer_backend_interface* backend, const char* label_text, vec3 colour);
292  void (*end_debug_label)(struct renderer_backend_interface* backend);
293 
301  b8 (*window_create)(struct renderer_backend_interface* backend, struct kwindow* window);
302 
309  void (*window_destroy)(struct renderer_backend_interface* backend, struct kwindow* window);
310 
317  void (*window_resized)(struct renderer_backend_interface* backend, const struct kwindow* window);
318 
319  b8 (*frame_prepare)(struct renderer_backend_interface* backend, struct frame_data* p_frame_data);
320 
321  b8 (*frame_prepare_window_surface)(struct renderer_backend_interface* backend, struct kwindow* window, struct frame_data* p_frame_data);
322 
323  b8 (*frame_commands_begin)(struct renderer_backend_interface* backend, struct frame_data* p_frame_data);
324 
325  b8 (*frame_commands_end)(struct renderer_backend_interface* backend, struct frame_data* p_frame_data);
326 
327  b8 (*frame_submit)(struct renderer_backend_interface* backend, struct frame_data* p_frame_data);
328  b8 (*frame_present)(struct renderer_backend_interface* backend, struct kwindow* window, struct frame_data* p_frame_data);
329 
336  void (*viewport_set)(struct renderer_backend_interface* backend, rect_2di rect);
337 
343  void (*viewport_reset)(struct renderer_backend_interface* backend);
344 
351  void (*scissor_set)(struct renderer_backend_interface* backend, rect_2di rect);
352 
358  void (*scissor_reset)(struct renderer_backend_interface* backend);
359 
366  void (*winding_set)(struct renderer_backend_interface* backend, renderer_winding winding);
367 
374  void (*cull_mode_set)(struct renderer_backend_interface* backend, renderer_cull_mode cull_mode);
375 
382  void (*set_stencil_test_enabled)(struct renderer_backend_interface* backend, b8 enabled);
383 
390  void (*set_depth_test_enabled)(struct renderer_backend_interface* backend, b8 enabled);
391 
398  void (*set_depth_write_enabled)(struct renderer_backend_interface* backend, b8 enabled);
399 
408  void (*set_depth_bias)(struct renderer_backend_interface* backend, f32 constant_factor, f32 clamp, f32 slope_factor);
409 
416  void (*set_depth_bias_enabled)(struct renderer_backend_interface* backend, b8 enabled);
417 
424  void (*set_stencil_reference)(struct renderer_backend_interface* backend, u32 reference);
425 
436 
437  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);
438  void (*end_rendering)(struct renderer_backend_interface* backend, struct frame_data* p_frame_data);
439 
446  void (*set_stencil_compare_mask)(struct renderer_backend_interface* backend, u32 compare_mask);
447 
454  void (*set_stencil_write_mask)(struct renderer_backend_interface* backend, u32 write_mask);
455 
457  void (*clear_depth_set)(struct renderer_backend_interface* backend, f32 depth);
458  void (*clear_stencil_set)(struct renderer_backend_interface* backend, u32 stencil);
459  void (*clear_colour)(struct renderer_backend_interface* backend, ktexture t);
463 
464  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);
466 
478  b8 (*texture_resize)(struct renderer_backend_interface* backend, ktexture t, u32 new_width, u32 new_height);
479 
493  b8 (*texture_write_data)(struct renderer_backend_interface* backend, ktexture t, u32 offset, u32 size, const u8* pixels, b8 include_in_frame_workload);
494 
505  b8 (*texture_read_data)(struct renderer_backend_interface* backend, ktexture t, u32 offset, u32 size, u8** out_pixels);
506 
517  b8 (*texture_read_pixel)(struct renderer_backend_interface* backend, ktexture t, u32 x, u32 y, u8** out_rgba);
518 
528  struct renderer_backend_interface* backend,
529  kshader shader,
530  kname name,
531  shader_flags flags,
532  primitive_topology_type_bits topology_types,
533  primitive_topology_type default_type,
534  u8 colour_attachment_count,
535  kpixel_format* colour_attachment_formats,
536  kpixel_format depth_attachment_format,
537  kpixel_format stencil_attachment_format,
538  u8 pipeline_count,
539  shader_pipeline_config* pipelines,
540  u8 binding_set_count,
541  const shader_binding_set_config* binding_sets);
542 
549  void (*shader_destroy)(struct renderer_backend_interface* backend, kshader shader);
550 
561  struct renderer_backend_interface* backend,
562  kshader shader,
563  u8 pipeline_count,
564  shader_pipeline_config* pipelines);
565 
574  b8 (*shader_use)(struct renderer_backend_interface* backend, kshader shader, u8 vertex_layout_index);
575 
585  b8 (*shader_use_with_topology)(struct renderer_backend_interface* backend, kshader shader, primitive_topology_type type, u8 vertex_layout_index);
586 
595 
604  b8 (*shader_flag_get)(const struct renderer_backend_interface* backend, kshader shader, shader_flags flag);
605 
614  void (*shader_flag_set)(struct renderer_backend_interface* backend, kshader shader, shader_flags flag, b8 enabled);
615 
616  b8 (*shader_set_immediate_data)(struct renderer_backend_interface* backend, kshader shader, const void* data, u8 size);
617  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);
618  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);
619  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);
620 
622  void (*shader_release_binding_set_instance)(struct renderer_backend_interface* backend, kshader shader, u8 binding_set, u32 instance_id);
624  b8 (*shader_apply_binding_set)(struct renderer_backend_interface* backend, kshader shader, u8 binding_set, u32 instance_id);
625 
643  void (*sampler_release)(struct renderer_backend_interface* backend, ksampler_backend* sampler);
655  b8 (*sampler_refresh)(struct renderer_backend_interface* backend, ksampler_backend* sampler, texture_filter filter, texture_repeat repeat, f32 anisotropy, u32 mip_levels);
656 
665 
672 
690  void (*flag_enabled_set)(struct renderer_backend_interface* backend, renderer_config_flags flag, b8 enabled);
691 
698 
711 
719 
729  b8 (*renderbuffer_bind)(struct renderer_backend_interface* backend, krenderbuffer buffer, u64 offset, u32 binding_index);
738 
748  void (*renderbuffer_map_memory)(struct renderer_backend_interface* backend, krenderbuffer buffer, u64 offset, u64 size);
758  void (*renderbuffer_unmap_memory)(struct renderer_backend_interface* backend, krenderbuffer buffer, u64 offset, u64 size);
759 
768  void* (*renderbuffer_get_mapped_memory)(struct renderer_backend_interface* backend, krenderbuffer handle);
769 
779  b8 (*renderbuffer_flush)(struct renderer_backend_interface* backend, krenderbuffer buffer, u64 offset, u64 size);
780 
791  b8 (*renderbuffer_read)(struct renderer_backend_interface* backend, krenderbuffer buffer, u64 offset, u64 size, void** out_memory);
792 
803  b8 (*renderbuffer_resize)(struct renderer_backend_interface* backend, krenderbuffer buffer, u64 new_total_size);
804 
815  b8 (*renderbuffer_load_range)(struct renderer_backend_interface* backend, krenderbuffer buffer, u64 offset, u64 size, const void* data, b8 include_in_frame_workload);
816 
828  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);
829 
842  b8 (*renderbuffer_draw)(struct renderer_backend_interface* backend, krenderbuffer buffer, u64 offset, u32 element_count, u32 binding_index, b8 bind_only);
843 
848  void (*wait_for_idle)(struct renderer_backend_interface* backend);
849 
850 #if KOHI_DEBUG
851  void (*debug_pump_brakes)(struct renderer_backend_interface* backend);
852 #endif
primitive_topology_type
Definition: core_render_types.h:30
u16 ktexture
Represents a texture to be used for rendering purposes, stored on the GPU (VRAM)
Definition: core_render_types.h:299
texture_filter
Represents supported texture filtering modes.
Definition: core_render_types.h:70
u32 primitive_topology_type_bits
A combination of topology bit flags.
Definition: core_render_types.h:44
u32 shader_flags
A combination of topology bit flags.
Definition: core_render_types.h:227
u8 ktexture_flag_bits
Holds bit flags for textures..
Definition: core_render_types.h:321
u16 kshader
Definition: core_render_types.h:176
kpixel_format
Represents the format of image (or texture) pixel data.
Definition: core_render_types.h:47
ktexture_type
Represents various types of textures.
Definition: core_render_types.h:124
texture_repeat
Definition: core_render_types.h:77
This file contains global type definitions which are used throughout the entire engine and applicatio...
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:27
_Bool b8
8-bit boolean type
Definition: defines.h:60
float f32
32-bit floating point number
Definition: defines.h:49
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:24
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:30
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:21
This file contains a free list, used for custom memory allocation tracking.
This files contains an implementation of knames.
u64 kname
A kname is a string hash made for quick comparisons versus traditional string comparisons.
Definition: kname.h:36
Contains various math types required for the engine.
renderer_config_flag_bits
Definition: renderer_types.h:185
@ RENDERER_CONFIG_FLAG_POWER_SAVING_BIT
Configures the renderer backend in a way that conserves power where possible.
Definition: renderer_types.h:189
@ RENDERER_CONFIG_FLAG_ENABLE_VALIDATION
Enables advanced validation in the renderer backend, if supported.
Definition: renderer_types.h:191
@ RENDERER_CONFIG_FLAG_VSYNC_ENABLED_BIT
Indicates that vsync should be enabled.
Definition: renderer_types.h:187
renderer_compare_op
Definition: renderer_types.h:94
@ RENDERER_COMPARE_OP_LESS
Specifies that the comparison evaluates reference < test.
Definition: renderer_types.h:98
@ RENDERER_COMPARE_OP_GREATER_OR_EQUAL
Specifies that the comparison evaluates reference >= test.
Definition: renderer_types.h:108
@ RENDERER_COMPARE_OP_GREATER
Specifies that the comparison evaluates reference > test.
Definition: renderer_types.h:104
@ RENDERER_COMPARE_OP_LESS_OR_EQUAL
Specifies that the comparison evaluates reference <= test.
Definition: renderer_types.h:102
@ RENDERER_COMPARE_OP_ALWAYS
Specifies that the comparison is always true.
Definition: renderer_types.h:110
@ RENDERER_COMPARE_OP_NEVER
Specifies that the comparison always evaluates false.
Definition: renderer_types.h:96
@ RENDERER_COMPARE_OP_EQUAL
Specifies that the comparison evaluates reference = test.
Definition: renderer_types.h:100
@ RENDERER_COMPARE_OP_NOT_EQUAL
Specifies that the comparison evaluates reference != test.
Definition: renderer_types.h:106
renderer_cull_mode
The face cull mode.
Definition: renderer_types.h:222
@ RENDERER_CULL_MODE_FRONT
Only front faces are culled.
Definition: renderer_types.h:226
@ RENDERER_CULL_MODE_NONE
No faces are culled.
Definition: renderer_types.h:224
@ RENDERER_CULL_MODE_FRONT_AND_BACK
Both front and back faces are culled.
Definition: renderer_types.h:230
@ RENDERER_CULL_MODE_BACK
Only back faces are culled.
Definition: renderer_types.h:228
renderer_attachment_use
Definition: renderer_types.h:131
@ RENDERER_ATTACHMENT_USE_COLOUR_PRESENT
Definition: renderer_types.h:134
@ RENDERER_ATTACHMENT_USE_COLOUR_SHADER_READ
Definition: renderer_types.h:135
@ RENDERER_ATTACHMENT_USE_DEPTH_STENCIL_ATTACHMENT
Definition: renderer_types.h:137
@ RENDERER_ATTACHMENT_USE_DEPTH_STENCIL_SHADER_WRITE
Definition: renderer_types.h:139
@ RENDERER_ATTACHMENT_USE_COLOUR_SHADER_WRITE
Definition: renderer_types.h:136
@ RENDERER_ATTACHMENT_USE_COLOUR_ATTACHMENT
Definition: renderer_types.h:133
@ RENDERER_ATTACHMENT_USE_DONT_CARE
Definition: renderer_types.h:132
@ RENDERER_ATTACHMENT_USE_DEPTH_STENCIL_SHADER_READ
Definition: renderer_types.h:138
struct renderer_backend_interface renderer_backend_interface
A generic "interface" for the renderer backend. The renderer backend is what is responsible for makin...
renderbuffer_track_type
Definition: renderer_types.h:159
@ RENDERBUFFER_TRACK_TYPE_LINEAR
Definition: renderer_types.h:162
@ RENDERBUFFER_TRACK_TYPE_NONE
Definition: renderer_types.h:160
@ RENDERBUFFER_TRACK_TYPE_FREELIST
Definition: renderer_types.h:161
struct kwindow_renderer_state kwindow_renderer_state
The internal state of a window for the renderer frontend.
renderbuffer_flag_bits
Definition: renderer_types.h:165
@ RENDERBUFFER_FLAG_NONE
Definition: renderer_types.h:166
@ RENDERBUFFER_FLAG_TRIPLE_BUFFERED_BIT
Definition: renderer_types.h:170
@ RENDERBUFFER_FLAG_AUTO_MAP_MEMORY_BIT
Definition: renderer_types.h:168
struct renderer_backend_config renderer_backend_config
The generic configuration for a renderer backend.
u16 ksampler_backend
Definition: renderer_types.h:252
renderer_attachment_load_operation
Definition: renderer_types.h:121
@ RENDERER_ATTACHMENT_LOAD_OPERATION_LOAD
Definition: renderer_types.h:123
@ RENDERER_ATTACHMENT_LOAD_OPERATION_DONT_CARE
Definition: renderer_types.h:122
struct renderbuffer_data renderbuffer_data
u32 renderer_attachment_type_flags
Definition: renderer_types.h:119
renderer_stencil_op
Definition: renderer_types.h:75
@ RENDERER_STENCIL_OP_INCREMENT_AND_WRAP
Increments the current stencil buffer value. Wraps stencil buffer value to zero when incrementing the...
Definition: renderer_types.h:89
@ RENDERER_STENCIL_OP_KEEP
Keeps the current value.
Definition: renderer_types.h:77
@ RENDERER_STENCIL_OP_INCREMENT_AND_CLAMP
Increments the current stencil buffer value. Clamps to the maximum representable unsigned value.
Definition: renderer_types.h:83
@ RENDERER_STENCIL_OP_ZERO
Sets the stencil buffer value to 0.
Definition: renderer_types.h:79
@ RENDERER_STENCIL_OP_REPLACE
Sets the stencil buffer value to ref, as specified in the function.
Definition: renderer_types.h:81
@ RENDERER_STENCIL_OP_DECREMENT_AND_WRAP
Decrements the current stencil buffer value. Wraps stencil buffer value to the maximum representable ...
Definition: renderer_types.h:91
@ RENDERER_STENCIL_OP_INVERT
Bitwise inverts the current stencil buffer value.
Definition: renderer_types.h:87
@ RENDERER_STENCIL_OP_DECREMENT_AND_CLAMP
Decrements the current stencil buffer value. Clamps to 0.
Definition: renderer_types.h:85
renderbuffer_type
Definition: renderer_types.h:142
@ RENDERBUFFER_TYPE_STORAGE
Buffer is used for data storage.
Definition: renderer_types.h:156
@ RENDERBUFFER_TYPE_VERTEX
Buffer is used for vertex data.
Definition: renderer_types.h:146
@ RENDERBUFFER_TYPE_UNIFORM
Buffer is used for uniform data.
Definition: renderer_types.h:150
@ RENDERBUFFER_TYPE_READ
Buffer is used for reading purposes (i.e copy to from device local, then read)
Definition: renderer_types.h:154
@ RENDERBUFFER_TYPE_INDEX
Buffer is used for index data.
Definition: renderer_types.h:148
@ RENDERBUFFER_TYPE_STAGING
Buffer is used for staging purposes (i.e. from host-visible to device-local memory)
Definition: renderer_types.h:152
@ RENDERBUFFER_TYPE_UNKNOWN
Buffer is use is unknown. Default, but usually invalid.
Definition: renderer_types.h:144
struct geometry_render_data geometry_render_data
u32 renderer_config_flags
Definition: renderer_types.h:194
renderer_attachment_store_operation
Definition: renderer_types.h:126
@ RENDERER_ATTACHMENT_STORE_OPERATION_DONT_CARE
Definition: renderer_types.h:127
@ RENDERER_ATTACHMENT_STORE_OPERATION_STORE
Definition: renderer_types.h:128
renderer_winding
The winding order of vertices, used to determine what is the front-face of a triangle.
Definition: renderer_types.h:214
@ RENDERER_WINDING_CLOCKWISE
Counter-clockwise vertex winding.
Definition: renderer_types.h:218
@ RENDERER_WINDING_COUNTER_CLOCKWISE
Counter-clockwise vertex winding.
Definition: renderer_types.h:216
renderer_debug_view_mode
Definition: renderer_types.h:67
@ RENDERER_VIEW_MODE_DEFAULT
Definition: renderer_types.h:68
@ RENDERER_VIEW_MODE_LIGHTING
Definition: renderer_types.h:69
@ RENDERER_VIEW_MODE_WIREFRAME
Definition: renderer_types.h:72
@ RENDERER_VIEW_MODE_NORMALS
Definition: renderer_types.h:70
@ RENDERER_VIEW_MODE_CASCADES
Definition: renderer_types.h:71
u16 krenderbuffer
Definition: renderer_types.h:175
u32 renderbuffer_flags
Definition: renderer_types.h:173
renderer_attachment_type_flag_bits
Definition: renderer_types.h:113
@ RENDERER_ATTACHMENT_TYPE_FLAG_COLOUR_BIT
Definition: renderer_types.h:114
@ RENDERER_ATTACHMENT_TYPE_FLAG_STENCIL_BIT
Definition: renderer_types.h:116
@ RENDERER_ATTACHMENT_TYPE_FLAG_DEPTH_BIT
Definition: renderer_types.h:115
Engine-level current frame-specific data.
Definition: frame_data.h:15
Definition: renderer_types.h:38
u32 ibl_probe_index
The index of the IBL probe to use.
Definition: renderer_types.h:64
b8 winding_inverted
Definition: renderer_types.h:46
mat4 model
Definition: renderer_types.h:39
u32 index_count
The index count.
Definition: renderer_types.h:57
u64 unique_id
Definition: renderer_types.h:45
u32 vertex_count
The vertex count.
Definition: renderer_types.h:50
vec4 diffuse_colour
Definition: renderer_types.h:47
u32 index_element_size
The size of each index.
Definition: renderer_types.h:59
u64 vertex_buffer_offset
The offset from the beginning of the vertex buffer.
Definition: renderer_types.h:54
u32 vertex_element_size
The size of each vertex.
Definition: renderer_types.h:52
kmaterial_instance material
Definition: renderer_types.h:40
u32 draw_id
Definition: renderer_types.h:43
u64 index_buffer_offset
The offset from the beginning of the index buffer.
Definition: renderer_types.h:61
A material instance, which contains handles to both the base material as well as the instance itself....
Definition: core_render_types.h:409
The Vulkan-specific backend window state.
Definition: vulkan_types.h:607
The internal state of a window for the renderer frontend.
Definition: renderer_types.h:236
ktexture colourbuffer
Definition: renderer_types.h:243
ktexture depthbuffer
Definition: renderer_types.h:245
struct viewport * active_viewport
Definition: renderer_types.h:240
struct kwindow_renderer_backend_state * backend_state
The internal state of the window containing renderer backend data.
Definition: renderer_types.h:248
struct kwindow * window
Definition: renderer_types.h:238
Represents a window in the application.
Definition: platform.h:71
Definition: renderer_types.h:27
u32 element_count
The element count.
Definition: renderer_types.h:29
u64 buffer_offset
The offset from the beginning of the buffer.
Definition: renderer_types.h:35
u32 element_size
The size of each element.
Definition: renderer_types.h:31
void * elements
The element data.
Definition: renderer_types.h:33
The generic configuration for a renderer backend.
Definition: renderer_types.h:197
b8 use_triple_buffering
Indicates if triple buffering should be used. Otherwise, double-buffering is used.
Definition: renderer_types.h:207
b8 require_discrete_gpu
Indicates if a discrete GPU is required. Can be ignored on some platforms.
Definition: renderer_types.h:209
u16 max_shader_count
The max number of shaders that be be held. Should match shader system config.
Definition: renderer_types.h:203
renderer_config_flags flags
Various configuration flags for renderer backend setup.
Definition: renderer_types.h:201
const char * application_name
The name of the application.
Definition: renderer_types.h:199
u16 max_texture_count
The max number of textures that be be held. Should match shader texture config.
Definition: renderer_types.h:205
A generic "interface" for the renderer backend. The renderer backend is what is responsible for makin...
Definition: renderer_types.h:262
b8(* shader_apply_binding_set)(struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id)
Definition: renderer_types.h:624
void(* end_rendering)(struct renderer_backend_interface *backend, struct frame_data *p_frame_data)
Definition: renderer_types.h:438
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.
Definition: renderer_types.h:815
void(* cull_mode_set)(struct renderer_backend_interface *backend, renderer_cull_mode cull_mode)
Set the renderer to use the given cull mode.
Definition: renderer_types.h:374
void(* set_stencil_write_mask)(struct renderer_backend_interface *backend, u32 write_mask)
Set stencil write mask.
Definition: renderer_types.h:454
b8(* shader_supports_wireframe)(const struct renderer_backend_interface *backend, kshader shader)
Indicates if the supplied shader supports wireframe mode.
Definition: renderer_types.h:594
f32(* max_anisotropy_get)(struct renderer_backend_interface *backend)
Obtains the max anisotropy level available from the renderer. 0 means not available.
Definition: renderer_types.h:697
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....
Definition: renderer_types.h:842
b8(* shader_set_immediate_data)(struct renderer_backend_interface *backend, kshader shader, const void *data, u8 size)
Definition: renderer_types.h:616
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,...
Definition: renderer_types.h:585
void(* renderbuffer_destroy)(struct renderer_backend_interface *backend, krenderbuffer buffer)
Destroys the given buffer.
Definition: renderer_types.h:718
void(* set_stencil_compare_mask)(struct renderer_backend_interface *backend, u32 compare_mask)
Set stencil compare mask.
Definition: renderer_types.h:446
b8(* frame_commands_begin)(struct renderer_backend_interface *backend, struct frame_data *p_frame_data)
Definition: renderer_types.h:323
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)
Definition: renderer_types.h:619
void(* viewport_reset)(struct renderer_backend_interface *backend)
Resets the viewport to the default, which matches the application window.
Definition: renderer_types.h:343
void(* shader_flag_set)(struct renderer_backend_interface *backend, kshader shader, shader_flags flag, b8 enabled)
Sets the given shader flag.
Definition: renderer_types.h:614
struct renderer_system_state * frontend_state
Definition: renderer_types.h:264
void(* clear_depth_set)(struct renderer_backend_interface *backend, f32 depth)
Definition: renderer_types.h:457
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.
Definition: renderer_types.h:664
b8(* frame_present)(struct renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data)
Definition: renderer_types.h:328
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.
Definition: renderer_types.h:527
void(* begin_debug_label)(struct renderer_backend_interface *backend, const char *label_text, vec3 colour)
Definition: renderer_types.h:291
b8(* is_multithreaded)(struct renderer_backend_interface *backend)
Indicates if the renderer is capable of multi-threading.
Definition: renderer_types.h:671
void(* sampler_release)(struct renderer_backend_interface *backend, ksampler_backend *sampler)
Releases the internal sampler for the given handle.
Definition: renderer_types.h:643
b8(* initialize)(struct renderer_backend_interface *backend, const renderer_backend_config *config)
Initializes the backend.
Definition: renderer_types.h:282
u64 internal_context_size
The size of the backend-specific renderer context.
Definition: renderer_types.h:269
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.
Definition: renderer_types.h:710
void(* window_resized)(struct renderer_backend_interface *backend, const struct kwindow *window)
Handles window resizes.
Definition: renderer_types.h:317
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,...
Definition: renderer_types.h:690
b8(* frame_submit)(struct renderer_backend_interface *backend, struct frame_data *p_frame_data)
Definition: renderer_types.h:327
void(* scissor_reset)(struct renderer_backend_interface *backend)
Resets the scissor to the default, which matches the application window.
Definition: renderer_types.h:358
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 si...
Definition: renderer_types.h:803
void(* clear_colour_set)(struct renderer_backend_interface *backend, vec4 clear_colour)
Definition: renderer_types.h:456
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)
Definition: renderer_types.h:617
b8(* frame_commands_end)(struct renderer_backend_interface *backend, struct frame_data *p_frame_data)
Definition: renderer_types.h:325
void(* set_stencil_reference)(struct renderer_backend_interface *backend, u32 reference)
Set the stencil reference for testing.
Definition: renderer_types.h:424
b8(* frame_prepare)(struct renderer_backend_interface *backend, struct frame_data *p_frame_data)
Definition: renderer_types.h:319
b8(* shader_reload)(struct renderer_backend_interface *backend, kshader shader, u8 pipeline_count, shader_pipeline_config *pipelines)
Reloads the internals of the given shader.
Definition: renderer_types.h:560
void(* clear_depth_stencil)(struct renderer_backend_interface *backend, ktexture t)
Definition: renderer_types.h:460
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....
Definition: renderer_types.h:478
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)
Definition: renderer_types.h:437
void(* scissor_set)(struct renderer_backend_interface *backend, rect_2di rect)
Sets the renderer scissor to the given rectangle.
Definition: renderer_types.h:351
void(* wait_for_idle)(struct renderer_backend_interface *backend)
Definition: renderer_types.h:848
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)
Definition: renderer_types.h:464
void(* winding_set)(struct renderer_backend_interface *backend, renderer_winding winding)
Set the renderer to use the given winding direction.
Definition: renderer_types.h:366
b8(* frame_prepare_window_surface)(struct renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data)
Definition: renderer_types.h:321
b8(* renderbuffer_bind)(struct renderer_backend_interface *backend, krenderbuffer buffer, u64 offset, u32 binding_index)
Binds the given buffer at the provided offset.
Definition: renderer_types.h:729
void(* shader_destroy)(struct renderer_backend_interface *backend, kshader shader)
Destroys the given shader and releases any resources held by it.
Definition: renderer_types.h:549
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.
Definition: renderer_types.h:505
void(* shader_release_binding_set_instance)(struct renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id)
Definition: renderer_types.h:622
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.
Definition: renderer_types.h:655
void(* texture_resources_release)(struct renderer_backend_interface *backend, ktexture t)
Definition: renderer_types.h:465
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.
Definition: renderer_types.h:636
void(* set_depth_test_enabled)(struct renderer_backend_interface *backend, b8 enabled)
Set depth testing enabled/disabled.
Definition: renderer_types.h:390
void(* clear_colour)(struct renderer_backend_interface *backend, ktexture t)
Definition: renderer_types.h:459
b8(* shader_flag_get)(const struct renderer_backend_interface *backend, kshader shader, shader_flags flag)
Indicates if the given shader flag is set.
Definition: renderer_types.h:604
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.
Definition: renderer_types.h:517
u32(* shader_binding_set_get_max_instance_count)(struct renderer_backend_interface *backend, kshader shader, u8 binding_set)
Definition: renderer_types.h:623
b8(* window_create)(struct renderer_backend_interface *backend, struct kwindow *window)
Handles window creation.
Definition: renderer_types.h:301
void(* colour_texture_prepare_for_present)(struct renderer_backend_interface *backend, ktexture t)
Definition: renderer_types.h:461
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...
Definition: renderer_types.h:493
void(* set_stencil_test_enabled)(struct renderer_backend_interface *backend, b8 enabled)
Set stencil testing enabled/disabled.
Definition: renderer_types.h:382
void * internal_context
The backend-specific renderer context.
Definition: renderer_types.h:273
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.
Definition: renderer_types.h:828
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....
Definition: renderer_types.h:748
u32(* shader_acquire_binding_set_instance)(struct renderer_backend_interface *backend, kshader shader, u8 binding_set)
Definition: renderer_types.h:621
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...
Definition: renderer_types.h:681
void(* set_depth_write_enabled)(struct renderer_backend_interface *backend, b8 enabled)
Set depth write enabled/disabled.
Definition: renderer_types.h:398
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.
Definition: renderer_types.h:779
void(* viewport_set)(struct renderer_backend_interface *backend, rect_2di rect)
Sets the renderer viewport to the given rectangle.
Definition: renderer_types.h:336
void(* window_destroy)(struct renderer_backend_interface *backend, struct kwindow *window)
Handles window destruction.
Definition: renderer_types.h:309
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,...
Definition: renderer_types.h:574
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...
Definition: renderer_types.h:758
void(* clear_stencil_set)(struct renderer_backend_interface *backend, u32 stencil)
Definition: renderer_types.h:458
b8(* renderbuffer_unbind)(struct renderer_backend_interface *backend, krenderbuffer buffer)
Unbinds the given buffer.
Definition: renderer_types.h:737
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)
Definition: renderer_types.h:618
void(* set_depth_bias)(struct renderer_backend_interface *backend, f32 constant_factor, f32 clamp, f32 slope_factor)
Sets depth bias factors and clamp dynamically.
Definition: renderer_types.h:408
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.
Definition: renderer_types.h:791
void(* texture_prepare_for_sampling)(struct renderer_backend_interface *backend, ktexture t, ktexture_flag_bits flags)
Definition: renderer_types.h:462
void(* end_debug_label)(struct renderer_backend_interface *backend)
Definition: renderer_types.h:292
void(* set_depth_bias_enabled)(struct renderer_backend_interface *backend, b8 enabled)
Enables/disables depth bias.
Definition: renderer_types.h:416
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.
Definition: renderer_types.h:435
void(* shutdown)(struct renderer_backend_interface *backend)
Shuts the renderer backend down.
Definition: renderer_types.h:289
Definition: core_render_types.h:264
Definition: core_render_types.h:276
Definition: terrain.h:82
a 4x4 matrix, typically used to represent object transformations.
Definition: math_types.h:383
A 3-element vector.
Definition: math_types.h:117
A 4-element vector.
Definition: math_types.h:229
A 4-element integer-based vector.
Definition: math_types.h:574