Kohi Game Engine
kforward_renderer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <core/frame_data.h>
4 #include <core_render_types.h>
5 #include <core_resource_types.h>
6 #include <defines.h>
7 #include <math/math_types.h>
10 #include <systems/light_system.h>
11 #include <utils/kcolour.h>
12 
13 #define DEFAULT_SHADOW_BIAS 0.0005f
14 #define DEFAULT_SHADOW_DIST 100.0f
15 #define DEFAULT_SHADOW_FADE_DIST 5.0f
16 #define DEFAULT_SHADOW_SPLIT_MULT 0.75f
17 
18 struct renderer_system_state;
19 struct standard_ui_renderable;
20 
21 typedef struct kshadow_pass_data {
22  // Static meshes
27  // Used for opaque material rendering. Typically the first instance of the above list.
29 
30  // Heightmap terrain
33 
35 
37 
40 
41 typedef struct kforward_pass_data {
42  // Skybox shader
45 
48 
49 typedef struct kdepth_prepass_data {
53 
54 #if KOHI_DEBUG
55 
56 typedef struct kworld_debug_pass_data {
57  kshader debug_shader;
58  kshader colour_shader;
59  u32 debug_set0_instance_id;
60  u32 colour_set0_instance_id;
61 } kworld_debug_pass_data;
62 
63 #endif
64 
68 typedef struct kforward_renderer {
71 
72  struct renderer_system_state* renderer_state;
73  struct kmaterial_system_state* material_system;
75  struct texture_system_state* texture_system;
76 
80 #if KOHI_DEBUG
81  kworld_debug_pass_data world_debug_pass;
82 #endif
83 
86 
88 
89 typedef struct kskybox_render_data {
98 
103 
105 
106 // static mesh data for shadow pass.
107 typedef struct kgeometry_render_data {
114 
115  // The material instance for this geometry.
118  // Index into animation data SSBO. Ignored if INVALID_ID_U16.
120 
124 
125 typedef struct kmaterial_render_data {
126  // The base material used by all the geometries contained.
128  // The number of geometries.
130  // An array of geometries using the material.
133 
141 
142 typedef struct hm_terrain_render_data {
148 
152 
153 typedef struct kshadow_pass_render_data {
155 
158 
159  // The number of opaque geometries.
161  // An array of geometries whose materials are opaque and can thus be rendered with the defualt group.
163 
164  // Static mesh geo data organized by transparent material.
167 
168  // The number of animated opaque geometries.
170  // An array of animated geometries whose materials are opaque and can thus be rendered with the defualt group.
172 
173  // Animated mesh geo data organized by transparent material.
176 
177  // Terrain geo data
180 
181  // Indicates if the pass should be done.
184 
185 // Water plane render data used once for reflection and once for refraction.
186 typedef struct kscene_pass_render_data {
189 
190  // Opaque static mesh geo data organized by material.
193 
194  // Transparent static mesh geo data organized by material.
197 
198  // Opaque animated mesh geo data organized by material.
201 
202  // Transparent animated mesh geo data organized by material.
205 
206  // Terrain geo data
210 
211 typedef struct kwater_plane_render_data {
212  // Water plane model matrix
216 
217  // Instance of water material.
219 
223 
224 // Render data used per water plane,
227 
228  // Data used for the water plane reflection pass.
230  // Data used for the water plane refraction pass.
232 
234 
236  // View matrix/position used for the rendering of the water plane itself.
239 
241 
243 
246  f32 shadow_bias; // NOTE: 0.0005f is a good value;
247 
250 
251  // Skybox data
253 
257 
261 
263 
264  // Water planes
267 
268  // Data to be used after reflection/refraction passes.
270 
271  // Indicates if the pass should be done.
274 
280 
284 
285  // The number of geometries.
287  // An array of geometries.
289 
292 
295 
297 
298  // Data to render in the shadow pass.
300 
301  // Data to render in the forward pass.
303 
304  // Data to render world debug geometry
307 
308 KAPI b8 kforward_renderer_create(ktexture colour_buffer, ktexture depth_stencil_buffer, kforward_renderer* out_renderer);
310 
u16 ktexture
Represents a texture to be used for rendering purposes, stored on the GPU (VRAM)
Definition: core_render_types.h:299
u16 kmaterial
Definition: core_render_types.h:399
u16 kshader
Definition: core_render_types.h:176
u32 ktransform
Definition: core_resource_types.h:6
This file contains global type definitions which are used throughout the entire engine and applicatio...
#define KAPI
Import/export qualifier.
Definition: defines.h:209
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
struct kforward_pass_render_data kforward_pass_render_data
kgeometry_render_data_flag_bits
Definition: kforward_renderer.h:99
@ KGEOMETRY_RENDER_DATA_FLAG_WINDING_INVERTED_BIT
Definition: kforward_renderer.h:101
@ KGEOMETRY_RENDER_DATA_FLAG_NONE
Definition: kforward_renderer.h:100
KAPI void kforward_renderer_destroy(kforward_renderer *renderer)
struct kscene_pass_render_data kscene_pass_render_data
struct kskybox_render_data kskybox_render_data
struct kforward_renderer_render_data kforward_renderer_render_data
struct kforward_pass_water_plane_render_data kforward_pass_water_plane_render_data
struct kforward_renderer kforward_renderer
Represents the state of the Kohi Default Forward application renderer.
struct kgeometry_render_data kgeometry_render_data
struct kworld_debug_pass_render_data kworld_debug_pass_render_data
struct kwater_plane_render_data kwater_plane_render_data
struct kshadow_pass_cascade_render_data kshadow_pass_cascade_render_data
struct hm_terrain_render_data hm_terrain_render_data
struct kforward_pass_data kforward_pass_data
struct kdebug_geometry_render_data kdebug_geometry_render_data
struct kmaterial_render_data kmaterial_render_data
struct kshadow_pass_data kshadow_pass_data
KAPI b8 kforward_renderer_render_frame(kforward_renderer *renderer, frame_data *p_frame_data, kforward_renderer_render_data *render_data)
u32 kgeometry_render_data_flags
Definition: kforward_renderer.h:104
KAPI b8 kforward_renderer_create(ktexture colour_buffer, ktexture depth_stencil_buffer, kforward_renderer *out_renderer)
struct kshadow_pass_render_data kshadow_pass_render_data
struct hm_terrain_chunk_render_data hm_terrain_chunk_render_data
struct kdepth_prepass_data kdepth_prepass_data
The material system is responsible for managing materials in the engine, including reference counting...
#define KMATERIAL_MAX_IRRADIANCE_CUBEMAP_COUNT
Definition: kmaterial_system.h:24
#define KMATERIAL_MAX_SHADOW_CASCADES
Definition: kmaterial_system.h:25
This file contains the implementation of the light system, which manages all lighting objects within ...
u8 klight
Definition: light_system.h:47
Contains various math types required for the engine.
u16 krenderbuffer
Definition: renderer_types.h:175
#define KMATERIAL_MAX_BOUND_POINT_LIGHTS
Definition: renderer_types.h:20
Engine-level current frame-specific data.
Definition: frame_data.h:15
Definition: kforward_renderer.h:134
u64 vertex_offset
Definition: kforward_renderer.h:135
u64 index_offset
Definition: kforward_renderer.h:138
u64 index_count
Definition: kforward_renderer.h:139
u64 vertex_count
Definition: kforward_renderer.h:137
u64 extended_vertex_offset
Definition: kforward_renderer.h:136
Definition: kforward_renderer.h:142
hm_terrain_chunk_render_data * chunks
Definition: kforward_renderer.h:146
u32 chunk_count
Definition: kforward_renderer.h:145
kmaterial_instance material_instance
Definition: kforward_renderer.h:143
ktransform transform
Definition: kforward_renderer.h:144
Definition: kforward_renderer.h:275
kgeometry_render_data geo
Definition: kforward_renderer.h:276
colour4 colour
Definition: kforward_renderer.h:278
mat4 model
Definition: kforward_renderer.h:277
Definition: kforward_renderer.h:49
u32 shader_set0_instance_id
Definition: kforward_renderer.h:51
kshader depth_prepass_shader
Definition: kforward_renderer.h:50
Definition: light_system.h:55
Definition: kforward_renderer.h:41
ktexture default_cube_texture
Definition: kforward_renderer.h:46
kshader sb_shader
Definition: kforward_renderer.h:43
u32 sb_shader_set0_instance_id
Definition: kforward_renderer.h:44
Definition: kforward_renderer.h:235
mat4 projection
Definition: kforward_renderer.h:240
kdirectional_light_data dir_light
Definition: kforward_renderer.h:262
f32 fog_near
Definition: kforward_renderer.h:259
f32 shadow_distance
Definition: kforward_renderer.h:254
vec4 view_position
Definition: kforward_renderer.h:238
kforward_pass_water_plane_render_data * water_planes
Definition: kforward_renderer.h:266
mat4 directional_light_spaces[KMATERIAL_MAX_SHADOW_CASCADES]
Definition: kforward_renderer.h:244
colour3 fog_colour
Definition: kforward_renderer.h:258
kscene_pass_render_data standard_pass
Definition: kforward_renderer.h:269
u16 water_plane_count
Definition: kforward_renderer.h:265
b8 do_pass
Definition: kforward_renderer.h:272
kskybox_render_data skybox
Definition: kforward_renderer.h:252
mat4 view_matrix
Definition: kforward_renderer.h:237
u8 irradiance_cubemap_texture_count
Definition: kforward_renderer.h:248
u32 render_mode
Definition: kforward_renderer.h:242
f32 cascade_splits[KMATERIAL_MAX_SHADOW_CASCADES]
Definition: kforward_renderer.h:245
ktexture irradiance_cubemap_textures[KMATERIAL_MAX_IRRADIANCE_CUBEMAP_COUNT]
Definition: kforward_renderer.h:249
f32 shadow_fade_distance
Definition: kforward_renderer.h:255
f32 fog_far
Definition: kforward_renderer.h:260
f32 shadow_bias
Definition: kforward_renderer.h:246
f32 shadow_split_mult
Definition: kforward_renderer.h:256
Definition: kforward_renderer.h:225
kwater_plane_render_data plane_render_data
Definition: kforward_renderer.h:226
kscene_pass_render_data refraction_pass
Definition: kforward_renderer.h:231
kscene_pass_render_data reflection_pass
Definition: kforward_renderer.h:229
Definition: kforward_renderer.h:296
kshadow_pass_render_data shadow_data
Definition: kforward_renderer.h:299
kforward_pass_render_data forward_data
Definition: kforward_renderer.h:302
kworld_debug_pass_render_data world_debug_data
Definition: kforward_renderer.h:305
Represents the state of the Kohi Default Forward application renderer.
Definition: kforward_renderer.h:68
struct renderer_system_state * renderer_state
Definition: kforward_renderer.h:72
krenderbuffer standard_vertex_buffer
Definition: kforward_renderer.h:84
struct texture_system_state * texture_system
Definition: kforward_renderer.h:75
struct kmaterial_system_state * material_system
Definition: kforward_renderer.h:73
ktexture colour_buffer
Definition: kforward_renderer.h:69
kforward_pass_data forward_pass
Definition: kforward_renderer.h:79
krenderbuffer index_buffer
Definition: kforward_renderer.h:85
ktexture depth_stencil_buffer
Definition: kforward_renderer.h:70
kshadow_pass_data shadow_pass
Definition: kforward_renderer.h:78
kdepth_prepass_data depth_prepass
Definition: kforward_renderer.h:77
struct kmaterial_renderer * material_renderer
Definition: kforward_renderer.h:74
Definition: kforward_renderer.h:107
u8 bound_point_light_count
Definition: kforward_renderer.h:121
u64 vertex_offset
Definition: kforward_renderer.h:108
u16 animation_id
Definition: kforward_renderer.h:119
kgeometry_render_data_flags flags
Definition: kforward_renderer.h:113
u32 index_count
Definition: kforward_renderer.h:112
u64 index_offset
Definition: kforward_renderer.h:111
u8 bound_point_light_indices[KMATERIAL_MAX_BOUND_POINT_LIGHTS]
Definition: kforward_renderer.h:122
u32 vertex_count
Definition: kforward_renderer.h:110
u16 material_instance_id
Definition: kforward_renderer.h:116
ktransform transform
Definition: kforward_renderer.h:117
u64 extended_vertex_offset
Definition: kforward_renderer.h:109
A material instance, which contains handles to both the base material as well as the instance itself....
Definition: core_render_types.h:409
Definition: kforward_renderer.h:125
kmaterial base_material
Definition: kforward_renderer.h:127
kgeometry_render_data * geometries
Definition: kforward_renderer.h:131
u32 geometry_count
Definition: kforward_renderer.h:129
State for the material renderer.
Definition: kmaterial_renderer.h:131
Definition: kforward_renderer.h:186
kmaterial_render_data * opaque_meshes_by_material
Definition: kforward_renderer.h:192
vec3 view_position
Definition: kforward_renderer.h:188
u16 opaque_meshes_by_material_count
Definition: kforward_renderer.h:191
mat4 view_matrix
Definition: kforward_renderer.h:187
u16 animated_transparent_meshes_by_material_count
Definition: kforward_renderer.h:203
u16 terrain_count
Definition: kforward_renderer.h:207
u16 transparent_meshes_by_material_count
Definition: kforward_renderer.h:195
hm_terrain_render_data * terrains
Definition: kforward_renderer.h:208
kmaterial_render_data * animated_transparent_meshes_by_material
Definition: kforward_renderer.h:204
u16 animated_opaque_meshes_by_material_count
Definition: kforward_renderer.h:199
kmaterial_render_data * transparent_meshes_by_material
Definition: kforward_renderer.h:196
kmaterial_render_data * animated_opaque_meshes_by_material
Definition: kforward_renderer.h:200
Definition: kforward_renderer.h:149
mat4 view_projection
Definition: kforward_renderer.h:150
Definition: kforward_renderer.h:21
ktexture default_base_colour
Definition: kforward_renderer.h:34
u32 sm_default_instance_id
Definition: kforward_renderer.h:28
u32 * sm_set1_instance_ids
Definition: kforward_renderer.h:26
u32 hmt_set0_instance_id
Definition: kforward_renderer.h:32
u32 sm_set0_instance_id
Definition: kforward_renderer.h:24
u32 sm_set1_max_instances
Definition: kforward_renderer.h:25
kshader staticmesh_shader
Definition: kforward_renderer.h:23
u32 resolution
Definition: kforward_renderer.h:36
kshader hmt_shader
Definition: kforward_renderer.h:31
ktexture shadow_tex
Definition: kforward_renderer.h:38
Definition: kforward_renderer.h:153
u32 cascade_count
Definition: kforward_renderer.h:156
u16 animated_opaque_geometry_count
Definition: kforward_renderer.h:169
kgeometry_render_data * opaque_geometries
Definition: kforward_renderer.h:162
klight dir_light
Definition: kforward_renderer.h:154
kshadow_pass_cascade_render_data * cascades
Definition: kforward_renderer.h:157
b8 do_pass
Definition: kforward_renderer.h:182
u16 transparent_geometries_by_material_count
Definition: kforward_renderer.h:165
kgeometry_render_data * animated_opaque_geometries
Definition: kforward_renderer.h:171
u16 terrain_count
Definition: kforward_renderer.h:178
kmaterial_render_data * transparent_geometries_by_material
Definition: kforward_renderer.h:166
u16 animated_transparent_geometries_by_material_count
Definition: kforward_renderer.h:174
hm_terrain_render_data * terrains
Definition: kforward_renderer.h:179
kmaterial_render_data * animated_transparent_geometries_by_material
Definition: kforward_renderer.h:175
u16 opaque_geometry_count
Definition: kforward_renderer.h:160
Definition: kforward_renderer.h:89
u32 sb_index_count
Definition: kforward_renderer.h:95
u32 shader_set0_instance_id
Definition: kforward_renderer.h:90
u64 sb_index_offset
Definition: kforward_renderer.h:96
ktexture skybox_texture
Definition: kforward_renderer.h:91
u64 sb_vertex_offset
Definition: kforward_renderer.h:94
vec4 fog_colour
Definition: kforward_renderer.h:92
u32 sb_vertex_count
Definition: kforward_renderer.h:93
Definition: kforward_renderer.h:211
u8 bound_point_light_count
Definition: kforward_renderer.h:220
u8 bound_point_light_indices[KMATERIAL_MAX_BOUND_POINT_LIGHTS]
Definition: kforward_renderer.h:221
u64 vertex_buffer_offset
Definition: kforward_renderer.h:215
kmaterial_instance material
Definition: kforward_renderer.h:218
u64 index_buffer_offset
Definition: kforward_renderer.h:214
ktransform transform
Definition: kforward_renderer.h:213
Definition: kforward_renderer.h:281
kdebug_geometry_render_data grid_geometry
Definition: kforward_renderer.h:291
u16 geometry_count
Definition: kforward_renderer.h:286
mat4 projection
Definition: kforward_renderer.h:282
mat4 view
Definition: kforward_renderer.h:283
b8 do_pass
Definition: kforward_renderer.h:293
b8 draw_grid
Definition: kforward_renderer.h:290
kdebug_geometry_render_data * geometries
Definition: kforward_renderer.h:288
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