Kohi Game Engine
renderer_frontend.h
Go to the documentation of this file.
1 
27 #pragma once
28 
29 #include <defines.h>
30 #include <identifiers/khandle.h>
32 #include <math/geometry.h>
33 #include <strings/kname.h>
34 
35 #include "core/frame_data.h"
36 #include "core_render_types.h"
37 #include "renderer_types.h"
38 
39 struct shader_uniform;
40 struct frame_data;
41 struct viewport;
42 
43 typedef struct renderer_system_config {
44  const char* application_name;
45  const char* backend_plugin_name;
50 
51  // The max number of shaders that can be held. Must match the shader system's count.
54 
55 struct renderer_system_state;
56 struct kwindow;
57 
58 b8 renderer_system_deserialize_config(const char* config_str, renderer_system_config* out_config);
59 
70 KAPI b8 renderer_system_initialize(u64* memory_requirement, struct renderer_system_state* state, const renderer_system_config* config);
71 
77 KAPI void renderer_system_shutdown(struct renderer_system_state* state);
78 
79 KAPI u16 renderer_system_frame_number_get(struct renderer_system_state* state);
80 
81 KAPI b8 renderer_on_window_created(struct renderer_system_state* state, struct kwindow* window);
82 KAPI void renderer_on_window_destroyed(struct renderer_system_state* state, struct kwindow* window);
83 
90 KAPI void renderer_on_window_resized(struct renderer_system_state* state, const struct kwindow* window);
91 
100 KAPI void renderer_begin_debug_label(const char* label_text, vec3 colour);
101 
107 
117 KAPI b8 renderer_frame_prepare(struct renderer_system_state* state, struct frame_data* p_frame_data);
118 
124 KAPI b8 renderer_frame_prepare_window_surface(struct renderer_system_state* state, struct kwindow* window, struct frame_data* p_frame_data);
125 
131 KAPI b8 renderer_frame_command_list_begin(struct renderer_system_state* state, struct frame_data* p_frame_data);
132 
138 KAPI b8 renderer_frame_command_list_end(struct renderer_system_state* state, struct frame_data* p_frame_data);
139 
140 KAPI b8 renderer_frame_submit(struct renderer_system_state* state, struct frame_data* p_frame_data);
141 
149 KAPI b8 renderer_frame_present(struct renderer_system_state* state, struct kwindow* window, struct frame_data* p_frame_data);
150 
157 
162 
169 
174 
181 
188 
195 
202 
209 
216 
226 
238 KAPI void renderer_begin_rendering(struct renderer_system_state* state, 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);
239 
245 KAPI void renderer_end_rendering(struct renderer_system_state* state, struct frame_data* p_frame_data);
246 
253 
260 
276 KAPI b8 renderer_texture_resources_acquire(struct renderer_system_state* state, kname 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);
277 
284 KAPI void renderer_texture_resources_release(struct renderer_system_state* state, khandle* handle);
285 
297 KAPI b8 renderer_texture_resize(struct renderer_system_state* state, khandle renderer_texture_handle, u32 new_width, u32 new_height);
298 
309 KAPI b8 renderer_texture_write_data(struct renderer_system_state* state, khandle renderer_texture_handle, u32 offset, u32 size, const u8* pixels);
310 
321 KAPI b8 renderer_texture_read_data(struct renderer_system_state* state, khandle renderer_texture_handle, u32 offset, u32 size, u8** out_memory);
322 
333 KAPI b8 renderer_texture_read_pixel(struct renderer_system_state* state, khandle renderer_texture_handle, u32 x, u32 y, u8** out_rgba);
334 
342 KAPI void renderer_default_texture_register(struct renderer_system_state* state, renderer_default_texture default_texture, khandle renderer_texture_handle);
343 
351 KAPI khandle renderer_default_texture_get(struct renderer_system_state* state, renderer_default_texture default_texture);
352 
359 
367 
376 KAPI void renderer_geometry_vertex_update(kgeometry* g, u32 offset, u32 vertex_count, void* vertices, b8 include_in_frame_workload);
377 
384 
391 
398 KAPI void renderer_clear_colour_set(struct renderer_system_state* state, vec4 colour);
399 
406 KAPI void renderer_clear_depth_set(struct renderer_system_state* state, f32 depth);
407 
414 KAPI void renderer_clear_stencil_set(struct renderer_system_state* state, u32 stencil);
415 
423 KAPI b8 renderer_clear_colour(struct renderer_system_state* state, khandle texture_handle);
424 
432 KAPI b8 renderer_clear_depth_stencil(struct renderer_system_state* state, khandle texture_handle);
433 
440 KAPI void renderer_colour_texture_prepare_for_present(struct renderer_system_state* state, khandle texture_handle);
441 
449 KAPI void renderer_texture_prepare_for_sampling(struct renderer_system_state* state, khandle texture_handle, ktexture_flag_bits flags);
450 
459 KAPI b8 renderer_shader_create(struct renderer_system_state* state, 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);
460 
467 KAPI void renderer_shader_destroy(struct renderer_system_state* state, khandle shader);
468 
478 KAPI b8 renderer_shader_reload(struct renderer_system_state* state, khandle shader, u32 stage_count, shader_stage* stages, kname* names, const char** sources);
479 
488 KAPI b8 renderer_shader_use(struct renderer_system_state* state, khandle shader);
489 
497 KAPI b8 renderer_shader_supports_wireframe(struct renderer_system_state* state, khandle shader);
498 
507 KAPI b8 renderer_shader_flag_get(struct renderer_system_state* state, khandle shader, shader_flags flag);
508 
517 KAPI void renderer_shader_flag_set(struct renderer_system_state* state, khandle shader, shader_flags flag, b8 enabled);
518 
526 KAPI b8 renderer_shader_bind_per_frame(struct renderer_system_state* state, khandle shader);
527 
536 KAPI b8 renderer_shader_bind_per_group(struct renderer_system_state* state, khandle shader, u32 group_id);
537 
546 KAPI b8 renderer_shader_bind_per_draw(struct renderer_system_state* state, khandle shader, u32 draw_id);
547 
555 KAPI b8 renderer_shader_apply_per_frame(struct renderer_system_state* state, khandle shader);
556 
564 KAPI b8 renderer_shader_apply_per_group(struct renderer_system_state* state, khandle shader);
565 
573 KAPI b8 renderer_shader_apply_per_draw(struct renderer_system_state* state, khandle shader);
574 
584 KAPI b8 renderer_shader_per_group_resources_acquire(struct renderer_system_state* state, khandle shader, u32* out_group_id);
585 
594 KAPI b8 renderer_shader_per_group_resources_release(struct renderer_system_state* state, khandle shader, u32 group_id);
595 
606 KAPI b8 renderer_shader_per_draw_resources_acquire(struct renderer_system_state* state, khandle shader, u32* out_draw_id);
607 
616 KAPI b8 renderer_shader_per_draw_resources_release(struct renderer_system_state* state, khandle shader, u32 draw_id);
617 
628 KAPI b8 renderer_shader_uniform_set(struct renderer_system_state* state, khandle shader, struct shader_uniform* uniform, u32 array_index, const void* value);
629 
637 KAPI khandle renderer_generic_sampler_get(struct renderer_system_state* state, shader_generic_sampler sampler);
638 
649 KAPI khandle renderer_sampler_acquire(struct renderer_system_state* state, kname name, texture_filter filter, texture_repeat repeat, f32 anisotropy);
650 
657 KAPI void renderer_sampler_release(struct renderer_system_state* state, khandle* sampler);
658 
670 KAPI b8 renderer_sampler_refresh(struct renderer_system_state* state, khandle* sampler, texture_filter filter, texture_repeat repeat, f32 anisotropy, u32 mip_levels);
671 
679 KAPI kname renderer_sampler_name_get(struct renderer_system_state* state, khandle sampler);
680 
685 
702 
707 
719 KAPI b8 renderer_renderbuffer_create(const char* name, renderbuffer_type type, u64 total_size, renderbuffer_track_type track_type, renderbuffer* out_buffer);
720 
727 
736 
744 
754 
763 
772 
781 KAPI b8 renderer_renderbuffer_read(renderbuffer* buffer, u64 offset, u64 size, void** out_memory);
782 
793 
804 
814 
823 
833 KAPI b8 renderer_renderbuffer_load_range(renderbuffer* buffer, u64 offset, u64 size, const void* data, b8 include_in_frame_workload);
834 
845 KAPI b8 renderer_renderbuffer_copy_range(renderbuffer* source, u64 source_offset, renderbuffer* dest, u64 dest_offset, u64 size, b8 include_in_frame_workload);
846 
857 KAPI b8 renderer_renderbuffer_draw(renderbuffer* buffer, u64 offset, u32 element_count, b8 bind_only);
858 
863 
870 
876 
880 KAPI b8 renderer_pcf_enabled(struct renderer_system_state* state);
881 
885 KAPI u16 renderer_max_bound_texture_count_get(struct renderer_system_state* state);
886 
890 KAPI u16 renderer_max_bound_sampler_count_get(struct renderer_system_state* state);
face_cull_mode
Determines face culling mode during rendering.
Definition: core_render_types.h:11
texture_filter
Represents supported texture filtering modes.
Definition: core_render_types.h:59
u32 shader_flags
A combination of topology bit flags.
Definition: core_render_types.h:237
renderer_default_texture
Definition: core_render_types.h:164
texture_repeat
Definition: core_render_types.h:66
shader_stage
Shader stages available in the system.
Definition: core_render_types.h:82
shader_generic_sampler
Definition: core_render_types.h:142
This file contains global type definitions which are used throughout the entire engine and applicatio...
#define KAPI
Import/export qualifier.
Definition: defines.h:205
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
_Bool b8
8-bit boolean type
Definition: defines.h:58
float f32
32-bit floating point number
Definition: defines.h:47
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:22
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:28
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:19
A global handle system for Kohi. Handles are used to obtain various resources using a unique handle i...
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
u8 ktexture_flag_bits
Holds bit flags for textures..
Definition: kresource_types.h:39
ktexture_type
Represents various types of textures.
Definition: kresource_types.h:10
KAPI khandle renderer_default_texture_get(struct renderer_system_state *state, renderer_default_texture default_texture)
Gets a texture handle with the default texture slot specified.
KAPI b8 renderer_renderbuffer_load_range(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.
KAPI b8 renderer_frame_command_list_begin(struct renderer_system_state *state, struct frame_data *p_frame_data)
Begins a render. There must be at least one of these and a matching end per frame.
KAPI b8 renderer_renderbuffer_clear(renderbuffer *buffer, b8 zero_memory)
Clears the given buffer. Internally, resets the free list if one is used.
KAPI void renderer_scissor_set(vec4 rect)
Sets the renderer scissor to the given rectangle.
KAPI b8 renderer_texture_write_data(struct renderer_system_state *state, khandle renderer_texture_handle, u32 offset, u32 size, const u8 *pixels)
Writes the given data to the provided texture.
KAPI void renderer_set_stencil_test_enabled(b8 enabled)
Set stencil testing enabled/disabled.
KAPI b8 renderer_renderbuffer_unbind(renderbuffer *buffer)
Unbinds the given buffer.
KAPI void renderer_geometry_destroy(kgeometry *geometry)
Destroys the given geometry, releasing GPU resources.
KAPI b8 renderer_renderbuffer_copy_range(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.
KAPI b8 renderer_is_multithreaded(void)
Indicates if the renderer is capable of multi-threading.
KAPI void * renderer_renderbuffer_map_memory(renderbuffer *buffer, u64 offset, u64 size)
Maps memory from the given buffer in the provided range to a block of memory and returns it....
KAPI b8 renderer_texture_read_data(struct renderer_system_state *state, khandle renderer_texture_handle, u32 offset, u32 size, u8 **out_memory)
Reads the given data from the provided texture.
b8 renderer_system_deserialize_config(const char *config_str, renderer_system_config *out_config)
KAPI b8 renderer_renderbuffer_draw(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....
struct renderer_system_config renderer_system_config
KAPI void renderer_sampler_release(struct renderer_system_state *state, khandle *sampler)
Releases the internal sampler for the given handle.
KAPI void renderer_active_viewport_set(struct viewport *v)
Sets the currently active viewport.
KAPI kname renderer_sampler_name_get(struct renderer_system_state *state, khandle sampler)
Attempts to obtain the name of a sampler with the given handle. Returns INVALID_KNAME if not found.
KAPI void renderer_set_stencil_reference(u32 reference)
Set the stencil reference for testing.
KAPI b8 renderer_texture_resources_acquire(struct renderer_system_state *state, kname 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)
KAPI void renderer_viewport_reset(void)
Resets the viewport to the default, which matches the application window.
KAPI void renderer_set_stencil_write_mask(u32 write_mask)
Set stencil write mask.
KAPI void renderer_colour_texture_prepare_for_present(struct renderer_system_state *state, khandle texture_handle)
Performs operations required on the supplied colour texture before presentation.
KAPI b8 renderer_shader_uniform_set(struct renderer_system_state *state, khandle shader, struct shader_uniform *uniform, u32 array_index, const void *value)
Sets the uniform of the given shader to the provided value.
KAPI void renderer_begin_rendering(struct renderer_system_state *state, 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)
Begins rendering against the given targets.
KAPI b8 renderer_renderbuffer_allocate(renderbuffer *buffer, u64 size, u64 *out_offset)
Attempts to allocate memory from the given buffer. Should only be used on buffers that were created w...
KAPI b8 renderer_shader_create(struct renderer_system_state *state, 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.
KAPI void renderer_texture_resources_release(struct renderer_system_state *state, khandle *handle)
KAPI void renderer_end_debug_label(void)
Ends the last debug section of commands. Becomes a no-op in non-debug builds. NOTE: Each renderer bac...
KAPI u16 renderer_max_bound_sampler_count_get(struct renderer_system_state *state)
Returns the max number of samplers that can be bound at once for a single draw call.
KAPI b8 renderer_shader_bind_per_group(struct renderer_system_state *state, khandle shader, u32 group_id)
Binds the given per-group frequency id.
KAPI b8 renderer_system_initialize(u64 *memory_requirement, struct renderer_system_state *state, const renderer_system_config *config)
Initializes the renderer frontend/system. Should be called twice - once to obtain the memory requirem...
KAPI void renderer_geometry_draw(geometry_render_data *data)
Draws the given geometry.
KAPI b8 renderer_shader_reload(struct renderer_system_state *state, khandle shader, u32 stage_count, shader_stage *stages, kname *names, const char **sources)
Reloads the internals of the given shader.
KAPI void renderer_renderbuffer_unmap_memory(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...
KAPI b8 renderer_texture_resize(struct renderer_system_state *state, 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....
KAPI void renderer_texture_prepare_for_sampling(struct renderer_system_state *state, khandle texture_handle, ktexture_flag_bits flags)
Performs operations required on the supplied texture before being used for sampling.
KAPI b8 renderer_clear_depth_stencil(struct renderer_system_state *state, khandle texture_handle)
Clears the depth/stencil buffer using the previously set clear values.
KAPI b8 renderer_clear_colour(struct renderer_system_state *state, khandle texture_handle)
Clears the colour buffer using the previously set clear colour.
KAPI renderbuffer * renderer_renderbuffer_get(renderbuffer_type type)
Attempts retrieve the renderer's internal buffer of the given type.
KAPI b8 renderer_shader_apply_per_frame(struct renderer_system_state *state, khandle shader)
Applies per-frame data to the uniform buffer.
KAPI b8 renderer_pcf_enabled(struct renderer_system_state *state)
KAPI b8 renderer_shader_bind_per_frame(struct renderer_system_state *state, khandle shader)
Binds the per-frame frequency.
KAPI b8 renderer_renderbuffer_read(renderbuffer *buffer, u64 offset, u64 size, void **out_memory)
Reads memory from the provided buffer at the given range to the output variable.
KAPI void renderer_shader_destroy(struct renderer_system_state *state, khandle shader)
Destroys the given shader and releases any resources held by it.
KAPI khandle renderer_generic_sampler_get(struct renderer_system_state *state, shader_generic_sampler sampler)
Gets a handle to a generic sampler of the given type.
KAPI f32 renderer_max_anisotropy_get(void)
Obtains the max anisotropy level available from the renderer. 0 means not available.
KAPI void renderer_system_shutdown(struct renderer_system_state *state)
Shuts the renderer system/frontend down.
KAPI b8 renderer_on_window_created(struct renderer_system_state *state, struct kwindow *window)
KAPI u16 renderer_max_bound_texture_count_get(struct renderer_system_state *state)
Returns the max number of textures that can be bound at once for a single draw call.
KAPI b8 renderer_shader_per_group_resources_acquire(struct renderer_system_state *state, khandle shader, u32 *out_group_id)
Acquires internal per-group resources and provides a group id.
KAPI void renderer_set_stencil_op(renderer_stencil_op fail_op, renderer_stencil_op pass_op, renderer_stencil_op depth_fail_op, renderer_compare_op compare_op)
Set stencil operation.
KAPI void renderer_viewport_set(vec4 rect)
Sets the renderer viewport to the given rectangle.
KAPI b8 renderer_renderbuffer_bind(renderbuffer *buffer, u64 offset)
Binds the given buffer at the provided offset.
KAPI b8 renderer_renderbuffer_flush(renderbuffer *buffer, u64 offset, u64 size)
Flushes buffer memory at the given range. Should be done after a write.
KAPI struct viewport * renderer_active_viewport_get(void)
Returns a pointer to the currently active viewport.
KAPI b8 renderer_frame_present(struct renderer_system_state *state, struct kwindow *window, struct frame_data *p_frame_data)
Performs routines required to draw a frame, such as presentation. Should only be called after a succe...
KAPI b8 renderer_renderbuffer_create(const char *name, renderbuffer_type type, u64 total_size, renderbuffer_track_type track_type, renderbuffer *out_buffer)
Creates a new renderbuffer to hold data for a given purpose/use. Backed by a renderer-backend-specifi...
KAPI void renderer_wait_for_idle(void)
KAPI b8 renderer_shader_apply_per_group(struct renderer_system_state *state, khandle shader)
Applies data for the currently bound group.
KAPI u16 renderer_system_frame_number_get(struct renderer_system_state *state)
KAPI void renderer_set_stencil_compare_mask(u32 compare_mask)
Set stencil compare mask.
KAPI void renderer_scissor_reset(void)
Resets the scissor to the default, which matches the application window.
KAPI b8 renderer_frame_command_list_end(struct renderer_system_state *state, struct frame_data *p_frame_data)
Ends a render.
KAPI b8 renderer_texture_read_pixel(struct renderer_system_state *state, khandle renderer_texture_handle, u32 x, u32 y, u8 **out_rgba)
Reads a pixel from the provided texture at the given x/y coordinate.
KAPI b8 renderer_frame_prepare_window_surface(struct renderer_system_state *state, struct kwindow *window, struct frame_data *p_frame_data)
Prepares a window's surface for drawing.
KAPI void renderer_on_window_resized(struct renderer_system_state *state, const struct kwindow *window)
Handles window resize events.
KAPI b8 renderer_renderbuffer_free(renderbuffer *buffer, u64 size, u64 offset)
Frees memory from the given buffer.
KAPI b8 renderer_shader_per_draw_resources_release(struct renderer_system_state *state, khandle shader, u32 draw_id)
Releases internal per-draw resources for the given per-draw id.
KAPI b8 renderer_renderbuffer_resize(renderbuffer *buffer, u64 new_total_size)
Resizes the given buffer to new_total_size. new_total_size must be greater than the current buffer si...
KAPI void renderer_end_rendering(struct renderer_system_state *state, struct frame_data *p_frame_data)
KAPI void renderer_winding_set(renderer_winding winding)
Set the renderer to use the given winding direction.
KAPI b8 renderer_shader_per_group_resources_release(struct renderer_system_state *state, khandle shader, u32 group_id)
Releases internal per-group resources for the given group id.
KAPI void renderer_clear_colour_set(struct renderer_system_state *state, vec4 colour)
Sets the value to be used on the colour buffer clear.
KAPI b8 renderer_frame_submit(struct renderer_system_state *state, struct frame_data *p_frame_data)
KAPI b8 renderer_shader_per_draw_resources_acquire(struct renderer_system_state *state, khandle shader, u32 *out_draw_id)
Acquires internal per-draw resources and provides a per-draw id.
KAPI b8 renderer_flag_enabled_get(renderer_config_flags flag)
Indicates if the provided renderer flag is enabled. If multiple flags are passed, all must be set for...
KAPI void renderer_shader_flag_set(struct renderer_system_state *state, khandle shader, shader_flags flag, b8 enabled)
Sets the given shader flag.
KAPI b8 renderer_shader_use(struct renderer_system_state *state, khandle shader)
Uses the given shader, activating it for updates to attributes, uniforms and such,...
KAPI void renderer_set_depth_write_enabled(b8 enabled)
Set depth write enabled/disabled.
KAPI b8 renderer_shader_apply_per_draw(struct renderer_system_state *state, khandle shader)
Triggers the upload of per-draw uniform data to the GPU.
KAPI b8 renderer_shader_flag_get(struct renderer_system_state *state, khandle shader, shader_flags flag)
Indicates if the given shader flag is set.
KAPI b8 renderer_shader_bind_per_draw(struct renderer_system_state *state, khandle shader, u32 draw_id)
Binds the given per-draw frequency id.
KAPI void renderer_on_window_destroyed(struct renderer_system_state *state, struct kwindow *window)
KAPI void renderer_geometry_vertex_update(kgeometry *g, u32 offset, u32 vertex_count, void *vertices, b8 include_in_frame_workload)
Updates vertex data in the given geometry with the provided data in the given range.
KAPI b8 renderer_frame_prepare(struct renderer_system_state *state, struct frame_data *p_frame_data)
Performs setup routines required at the start of a frame.
KAPI void renderer_cull_mode_set(renderer_cull_mode cull_mode)
Set the renderer to use the given cull mode.
KAPI b8 renderer_geometry_upload(kgeometry *geometry)
Acquires GPU resources and uploads geometry data.
KAPI void renderer_flag_enabled_set(renderer_config_flags flag, b8 enabled)
Sets whether the included flag(s) are enabled or not. If multiple flags are passed,...
KAPI void renderer_clear_depth_set(struct renderer_system_state *state, f32 depth)
Sets the value to be used on the depth buffer clear.
KAPI b8 renderer_shader_supports_wireframe(struct renderer_system_state *state, khandle shader)
Determines if the given shader supports wireframe mode.
KAPI void renderer_default_texture_register(struct renderer_system_state *state, renderer_default_texture default_texture, khandle renderer_texture_handle)
Registers a texture with the given handle to the default texture slot specified.
KAPI void renderer_begin_debug_label(const char *label_text, vec3 colour)
Begins the marking of a section of commands, listed under a given name and colour....
KAPI khandle renderer_sampler_acquire(struct renderer_system_state *state, kname name, texture_filter filter, texture_repeat repeat, f32 anisotropy)
Acquires a internal sampler and returns a handle to it.
KAPI void renderer_renderbuffer_destroy(renderbuffer *buffer)
Destroys the given renderbuffer.
KAPI void renderer_set_depth_test_enabled(b8 enabled)
Set depth testing enabled/disabled.
KAPI void renderer_clear_stencil_set(struct renderer_system_state *state, u32 stencil)
Sets the value to be used on the stencil buffer clear.
KAPI b8 renderer_sampler_refresh(struct renderer_system_state *state, 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.
renderer_compare_op
Definition: renderer_types.h:99
renderer_cull_mode
The face cull mode.
Definition: renderer_types.h:241
renderbuffer_track_type
Definition: renderer_types.h:164
renderer_stencil_op
Definition: renderer_types.h:80
renderbuffer_type
Definition: renderer_types.h:147
u32 renderer_config_flags
Definition: renderer_types.h:218
renderer_winding
The winding order of vertices, used to determine what is the front-face of a triangle.
Definition: renderer_types.h:233
Engine-level current frame-specific data.
Definition: frame_data.h:11
Definition: renderer_types.h:35
Represents geometry to be used for various purposes (rendering objects in the world,...
Definition: geometry.h:38
A handle is a unique identifier used a system in the engine to avoid using raw pointers where possibl...
Definition: khandle.h:25
Represents a window in the application.
Definition: platform.h:69
u16 height
The height of the window in pixels.
Definition: platform.h:78
u16 width
The width of the window in pixels.
Definition: platform.h:76
const char * name
The internal name of the window.
Definition: platform.h:71
Definition: renderer_types.h:180
Definition: renderer_frontend.h:43
b8 triple_buffering_enabled
Definition: renderer_frontend.h:49
u16 max_shader_count
Definition: renderer_frontend.h:52
b8 enable_validation
Definition: renderer_frontend.h:47
const char * application_name
Definition: renderer_frontend.h:44
b8 power_saving
Definition: renderer_frontend.h:48
b8 vsync
Definition: renderer_frontend.h:46
const char * backend_plugin_name
Definition: renderer_frontend.h:45
Represents a single shader vertex attribute.
Definition: core_render_types.h:207
Represents a single entry in the internal uniform array.
Definition: core_render_types.h:182
Definition: viewport.h:6
A 3-element vector.
Definition: math_types.h:49
A 4-element vector.
Definition: math_types.h:89