diff options
Diffstat (limited to 'src/renderer/imm_renderer_impl.h')
-rw-r--r-- | src/renderer/imm_renderer_impl.h | 44 |
1 files changed, 44 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..5ece354 --- /dev/null +++ b/src/renderer/imm_renderer_impl.h | |||
@@ -0,0 +1,44 @@ | |||
1 | #pragma once | ||
2 | |||
3 | #include <gfx/renderer.h> | ||
4 | #include <gfx/sizes.h> | ||
5 | |||
6 | #include <math/mat4.h> | ||
7 | #include <math/vec3.h> | ||
8 | |||
9 | #include <stdbool.h> | ||
10 | #include <stddef.h> | ||
11 | |||
12 | typedef struct Geometry Geometry; | ||
13 | typedef struct ShaderProgram ShaderProgram; | ||
14 | |||
15 | /// Immediate mode renderer. | ||
16 | /// | ||
17 | /// Currently, the immediate mode renderer can only draw up to a maximum number | ||
18 | /// of primitives per frame. It does not adjust this number dynamically. Keeps | ||
19 | /// things simple while the extra complexity is not needed. | ||
20 | typedef struct ImmRenderer { | ||
21 | GfxCore* gfxcore; | ||
22 | ShaderProgram* shader; | ||
23 | Geometry* triangles; | ||
24 | size_t num_triangle_verts; // Number of triangle verts this frame. | ||
25 | // TODO: wireframe rendering. | ||
26 | struct { | ||
27 | bool wireframe : 1; | ||
28 | } flags; | ||
29 | vec3 triangle_verts[IMM_MAX_NUM_TRIANGLES * 3]; | ||
30 | // Matrix stack contains pre-multiplied matrices. | ||
31 | // It is also never empty. The top of the stack is an identity matrix when the | ||
32 | // stack is "empty" from the user's perspective. | ||
33 | mat4 matrix_stack[IMM_MAX_NUM_MATRICES]; | ||
34 | int stack_pointer; | ||
35 | } ImmRenderer; | ||
36 | |||
37 | /// Create a new immediate mode renderer. | ||
38 | bool imm_renderer_make(ImmRenderer*, GfxCore*); | ||
39 | |||
40 | /// Destroy the immediate mode renderer. | ||
41 | void imm_renderer_destroy(ImmRenderer*); | ||
42 | |||
43 | /// Flush draw commands. | ||
44 | void imm_renderer_flush(ImmRenderer*); | ||