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 #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 #include @@ -8,8 +8,6 @@ #include #include // memcpy -#include // 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 +#include + +#include + +#include +#include + +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 -#include -#include - -#include -#include #include -#include - -// 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