From 35be4f14a4b07dea7c36996e2beb19ff981cb91c Mon Sep 17 00:00:00 2001
From: 3gg <3gg@shellblade.net>
Date: Sat, 27 May 2023 19:01:26 -0700
Subject: Split renderer and immediate mode renderer implementation.

---
 gfx/src/gfx.c                        |  1 +
 gfx/src/renderer/imm_renderer.c      |  4 +---
 gfx/src/renderer/imm_renderer_impl.h | 38 ++++++++++++++++++++++++++++++++++++
 gfx/src/renderer/renderer_impl.h     | 36 ++--------------------------------
 4 files changed, 42 insertions(+), 37 deletions(-)
 create mode 100644 gfx/src/renderer/imm_renderer_impl.h

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 @@
 #include <gfx/gfx.h>
 
 #include "render/render_backend_impl.h"
+#include "renderer/imm_renderer_impl.h"
 #include "renderer/renderer_impl.h"
 #include "scene/scene_graph.h"
 #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 @@
-#include "renderer_impl.h"
+#include "imm_renderer_impl.h"
 
 #include <gfx/render_backend.h>
 #include <gfx/util/shader.h>
@@ -8,8 +8,6 @@
 #include <assert.h>
 #include <string.h> // memcpy
 
-#include <log/log.h> // TODO: remove
-
 bool imm_renderer_make(ImmRenderer* renderer, RenderBackend* render_backend) {
   assert(renderer);
   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 @@
+#pragma once
+
+#include <gfx/renderer.h>
+#include <gfx/sizes.h>
+
+#include <math/vec3.h>
+
+#include <stdbool.h>
+#include <stddef.h>
+
+typedef struct Geometry      Geometry;
+typedef struct ShaderProgram ShaderProgram;
+
+/// Immediate mode renderer.
+///
+/// Currently, the immediate mode renderer can only draw up to a maximum number
+/// of primitives per frame. It does not adjust this number dynamically. Keeps
+/// things simple while the extra complexity is not needed.
+typedef struct ImmRenderer {
+  RenderBackend* render_backend;
+  ShaderProgram* shader;
+  Geometry*      triangles;
+  size_t         num_triangle_verts; // Number of triangle verts this frame.
+  // TODO: wireframe rendering.
+  struct {
+    bool wireframe : 1;
+  } flags;
+  vec3 triangle_verts[IMM_MAX_NUM_TRIANGLES * 3];
+} ImmRenderer;
+
+/// Create a new immediate mode renderer.
+bool imm_renderer_make(ImmRenderer*, RenderBackend*);
+
+/// Destroy the immediate mode renderer.
+void imm_renderer_destroy(ImmRenderer*);
+
+/// Flush draw commands.
+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 @@
 #pragma once
 
 #include <gfx/renderer.h>
-#include <gfx/sizes.h>
-#include <gfx/util/ibl.h>
-
-#include <math/vec3.h>
-#include <math/vec4.h>
 
 #include <stdbool.h>
-#include <stddef.h>
-
-// Currently, the immediate mode renderer can only draw up to a maximum number
-// of primitives per frame. It does not adjust this number dynamically. Keeps
-// things simple while the extra complexity is not needed.
 
-typedef struct Buffer        Buffer;
-typedef struct Geometry      Geometry;
-typedef struct ShaderProgram ShaderProgram;
+typedef struct IBL     IBL;
+typedef struct Texture Texture;
 
 typedef struct Renderer {
   RenderBackend* render_backend;
@@ -24,29 +13,8 @@ typedef struct Renderer {
   Texture*       brdf_integration_map;
 } Renderer;
 
-typedef struct ImmRenderer {
-  RenderBackend* render_backend;
-  ShaderProgram* shader;
-  Geometry*      triangles;
-  size_t         num_triangle_verts; // Number of triangle verts this frame.
-  // TODO: wireframe rendering.
-  struct {
-    bool wireframe : 1;
-  } flags;
-  vec3 triangle_verts[IMM_MAX_NUM_TRIANGLES * 3];
-} ImmRenderer;
-
 /// Create a new renderer.
 bool renderer_make(Renderer*, RenderBackend*);
 
 /// Destroy the renderer.
 void renderer_destroy(Renderer*);
-
-/// Create a new immediate mode renderer.
-bool imm_renderer_make(ImmRenderer*, RenderBackend*);
-
-/// Destroy the immediate mode renderer.
-void imm_renderer_destroy(ImmRenderer*);
-
-/// Flush draw commands.
-void imm_renderer_flush(ImmRenderer*);
-- 
cgit v1.2.3