summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gfx/src/gfx.c1
-rw-r--r--gfx/src/renderer/imm_renderer.c4
-rw-r--r--gfx/src/renderer/imm_renderer_impl.h38
-rw-r--r--gfx/src/renderer/renderer_impl.h36
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
13bool imm_renderer_make(ImmRenderer* renderer, RenderBackend* render_backend) { 11bool 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
11typedef struct Geometry Geometry;
12typedef 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.
19typedef 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.
32bool imm_renderer_make(ImmRenderer*, RenderBackend*);
33
34/// Destroy the immediate mode renderer.
35void imm_renderer_destroy(ImmRenderer*);
36
37/// Flush draw commands.
38void 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
17typedef struct Buffer Buffer; 7typedef struct IBL IBL;
18typedef struct Geometry Geometry; 8typedef struct Texture Texture;
19typedef struct ShaderProgram ShaderProgram;
20 9
21typedef struct Renderer { 10typedef 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
27typedef 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.
40bool renderer_make(Renderer*, RenderBackend*); 17bool renderer_make(Renderer*, RenderBackend*);
41 18
42/// Destroy the renderer. 19/// Destroy the renderer.
43void renderer_destroy(Renderer*); 20void renderer_destroy(Renderer*);
44
45/// Create a new immediate mode renderer.
46bool imm_renderer_make(ImmRenderer*, RenderBackend*);
47
48/// Destroy the immediate mode renderer.
49void imm_renderer_destroy(ImmRenderer*);
50
51/// Flush draw commands.
52void imm_renderer_flush(ImmRenderer*);