diff options
Diffstat (limited to 'src/renderer/imm_renderer_impl.h')
-rw-r--r-- | src/renderer/imm_renderer_impl.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/renderer/imm_renderer_impl.h b/src/renderer/imm_renderer_impl.h new file mode 100644 index 0000000..61b49a7 --- /dev/null +++ b/src/renderer/imm_renderer_impl.h | |||
@@ -0,0 +1,43 @@ | |||
1 | #pragma once | ||
2 | |||
3 | #include <gfx/sizes.h> | ||
4 | |||
5 | #include <math/vec3.h> | ||
6 | |||
7 | #include <stdbool.h> | ||
8 | #include <stddef.h> | ||
9 | |||
10 | typedef struct Geometry Geometry; | ||
11 | typedef struct GfxCore GfxCore; | ||
12 | typedef struct IBL IBL; | ||
13 | typedef struct LLR LLR; | ||
14 | typedef struct Material Material; | ||
15 | typedef struct ShaderProgram ShaderProgram; | ||
16 | typedef struct Texture Texture; | ||
17 | |||
18 | /// Immediate mode renderer. | ||
19 | /// | ||
20 | /// Currently, the immediate mode renderer can only draw up to a maximum number | ||
21 | /// of primitives per frame. It does not adjust this number dynamically. Keeps | ||
22 | /// things simple while the extra complexity is not needed. | ||
23 | /// TODO: Flush the buffer when it reaches its maximum size to remove this | ||
24 | /// constraint. | ||
25 | typedef struct ImmRenderer { | ||
26 | GfxCore* gfxcore; | ||
27 | LLR* llr; | ||
28 | |||
29 | ShaderProgram* shader; // Immediate-mode shader program for primitives. | ||
30 | Geometry* triangles; | ||
31 | size_t num_triangle_verts; // Number of triangle verts this frame. | ||
32 | // TODO: wireframe rendering. | ||
33 | struct { | ||
34 | bool wireframe : 1; | ||
35 | } flags; | ||
36 | vec3 triangle_verts[GFX_IMM_MAX_NUM_TRIANGLES * 3]; | ||
37 | } ImmRenderer; | ||
38 | |||
39 | /// Create a new immediate mode renderer. | ||
40 | bool gfx_imm_make(ImmRenderer*, GfxCore*, LLR*); | ||
41 | |||
42 | /// Destroy the immediate mode renderer. | ||
43 | void gfx_imm_destroy(ImmRenderer*); | ||