diff options
author | 3gg <3gg@shellblade.net> | 2023-05-27 19:01:26 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2023-05-27 19:01:26 -0700 |
commit | 35be4f14a4b07dea7c36996e2beb19ff981cb91c (patch) | |
tree | 5dc37744d4bf3a9ee3fb16e8e11a7ec6dbb52321 | |
parent | 776e676d7b86bab2f78c63537bf49adb8cce6aca (diff) |
Split renderer and immediate mode renderer implementation.
-rw-r--r-- | gfx/src/gfx.c | 1 | ||||
-rw-r--r-- | gfx/src/renderer/imm_renderer.c | 4 | ||||
-rw-r--r-- | gfx/src/renderer/imm_renderer_impl.h | 38 | ||||
-rw-r--r-- | gfx/src/renderer/renderer_impl.h | 36 |
4 files changed, 42 insertions, 37 deletions
diff --git a/gfx/src/gfx.c b/gfx/src/gfx.c index 27312b2..47f2187 100644 --- a/gfx/src/gfx.c +++ b/gfx/src/gfx.c | |||
@@ -1,6 +1,7 @@ | |||
1 | #include <gfx/gfx.h> | 1 | #include <gfx/gfx.h> |
2 | 2 | ||
3 | #include "render/render_backend_impl.h" | 3 | #include "render/render_backend_impl.h" |
4 | #include "renderer/imm_renderer_impl.h" | ||
4 | #include "renderer/renderer_impl.h" | 5 | #include "renderer/renderer_impl.h" |
5 | #include "scene/scene_graph.h" | 6 | #include "scene/scene_graph.h" |
6 | #include "scene/scene_impl.h" | 7 | #include "scene/scene_impl.h" |
diff --git a/gfx/src/renderer/imm_renderer.c b/gfx/src/renderer/imm_renderer.c index e9f98f8..12b642c 100644 --- a/gfx/src/renderer/imm_renderer.c +++ b/gfx/src/renderer/imm_renderer.c | |||
@@ -1,4 +1,4 @@ | |||
1 | #include "renderer_impl.h" | 1 | #include "imm_renderer_impl.h" |
2 | 2 | ||
3 | #include <gfx/render_backend.h> | 3 | #include <gfx/render_backend.h> |
4 | #include <gfx/util/shader.h> | 4 | #include <gfx/util/shader.h> |
@@ -8,8 +8,6 @@ | |||
8 | #include <assert.h> | 8 | #include <assert.h> |
9 | #include <string.h> // memcpy | 9 | #include <string.h> // memcpy |
10 | 10 | ||
11 | #include <log/log.h> // TODO: remove | ||
12 | |||
13 | bool imm_renderer_make(ImmRenderer* renderer, RenderBackend* render_backend) { | 11 | bool imm_renderer_make(ImmRenderer* renderer, RenderBackend* render_backend) { |
14 | assert(renderer); | 12 | assert(renderer); |
15 | assert(render_backend); | 13 | assert(render_backend); |
diff --git a/gfx/src/renderer/imm_renderer_impl.h b/gfx/src/renderer/imm_renderer_impl.h new file mode 100644 index 0000000..6f4b818 --- /dev/null +++ b/gfx/src/renderer/imm_renderer_impl.h | |||
@@ -0,0 +1,38 @@ | |||
1 | #pragma once | ||
2 | |||
3 | #include <gfx/renderer.h> | ||
4 | #include <gfx/sizes.h> | ||
5 | |||
6 | #include <math/vec3.h> | ||
7 | |||
8 | #include <stdbool.h> | ||
9 | #include <stddef.h> | ||
10 | |||
11 | typedef struct Geometry Geometry; | ||
12 | typedef struct ShaderProgram ShaderProgram; | ||
13 | |||
14 | /// Immediate mode renderer. | ||
15 | /// | ||
16 | /// Currently, the immediate mode renderer can only draw up to a maximum number | ||
17 | /// of primitives per frame. It does not adjust this number dynamically. Keeps | ||
18 | /// things simple while the extra complexity is not needed. | ||
19 | typedef struct ImmRenderer { | ||
20 | RenderBackend* render_backend; | ||
21 | ShaderProgram* shader; | ||
22 | Geometry* triangles; | ||
23 | size_t num_triangle_verts; // Number of triangle verts this frame. | ||
24 | // TODO: wireframe rendering. | ||
25 | struct { | ||
26 | bool wireframe : 1; | ||
27 | } flags; | ||
28 | vec3 triangle_verts[IMM_MAX_NUM_TRIANGLES * 3]; | ||
29 | } ImmRenderer; | ||
30 | |||
31 | /// Create a new immediate mode renderer. | ||
32 | bool imm_renderer_make(ImmRenderer*, RenderBackend*); | ||
33 | |||
34 | /// Destroy the immediate mode renderer. | ||
35 | void imm_renderer_destroy(ImmRenderer*); | ||
36 | |||
37 | /// Flush draw commands. | ||
38 | void imm_renderer_flush(ImmRenderer*); | ||
diff --git a/gfx/src/renderer/renderer_impl.h b/gfx/src/renderer/renderer_impl.h index 833025a..b25d14c 100644 --- a/gfx/src/renderer/renderer_impl.h +++ b/gfx/src/renderer/renderer_impl.h | |||
@@ -1,22 +1,11 @@ | |||
1 | #pragma once | 1 | #pragma once |
2 | 2 | ||
3 | #include <gfx/renderer.h> | 3 | #include <gfx/renderer.h> |
4 | #include <gfx/sizes.h> | ||
5 | #include <gfx/util/ibl.h> | ||
6 | |||
7 | #include <math/vec3.h> | ||
8 | #include <math/vec4.h> | ||
9 | 4 | ||
10 | #include <stdbool.h> | 5 | #include <stdbool.h> |
11 | #include <stddef.h> | ||
12 | |||
13 | // Currently, the immediate mode renderer can only draw up to a maximum number | ||
14 | // of primitives per frame. It does not adjust this number dynamically. Keeps | ||
15 | // things simple while the extra complexity is not needed. | ||
16 | 6 | ||
17 | typedef struct Buffer Buffer; | 7 | typedef struct IBL IBL; |
18 | typedef struct Geometry Geometry; | 8 | typedef struct Texture Texture; |
19 | typedef struct ShaderProgram ShaderProgram; | ||
20 | 9 | ||
21 | typedef struct Renderer { | 10 | typedef struct Renderer { |
22 | RenderBackend* render_backend; | 11 | RenderBackend* render_backend; |
@@ -24,29 +13,8 @@ typedef struct Renderer { | |||
24 | Texture* brdf_integration_map; | 13 | Texture* brdf_integration_map; |
25 | } Renderer; | 14 | } Renderer; |
26 | 15 | ||
27 | typedef struct ImmRenderer { | ||
28 | RenderBackend* render_backend; | ||
29 | ShaderProgram* shader; | ||
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[IMM_MAX_NUM_TRIANGLES * 3]; | ||
37 | } ImmRenderer; | ||
38 | |||
39 | /// Create a new renderer. | 16 | /// Create a new renderer. |
40 | bool renderer_make(Renderer*, RenderBackend*); | 17 | bool renderer_make(Renderer*, RenderBackend*); |
41 | 18 | ||
42 | /// Destroy the renderer. | 19 | /// Destroy the renderer. |
43 | void renderer_destroy(Renderer*); | 20 | void renderer_destroy(Renderer*); |
44 | |||
45 | /// Create a new immediate mode renderer. | ||
46 | bool imm_renderer_make(ImmRenderer*, RenderBackend*); | ||
47 | |||
48 | /// Destroy the immediate mode renderer. | ||
49 | void imm_renderer_destroy(ImmRenderer*); | ||
50 | |||
51 | /// Flush draw commands. | ||
52 | void imm_renderer_flush(ImmRenderer*); | ||