#pragma once #include #include #include #include typedef struct Geometry Geometry; typedef struct GfxCore GfxCore; typedef struct IBL IBL; typedef struct LLR LLR; typedef struct Material Material; typedef struct ShaderProgram ShaderProgram; typedef struct Texture Texture; /// 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. /// TODO: Flush the buffer when it reaches its maximum size to remove this /// constraint. typedef struct ImmRenderer { GfxCore* gfxcore; LLR* llr; ShaderProgram* shader; // Immediate-mode shader program for primitives. Geometry* triangles; size_t num_triangle_verts; // Number of triangle verts this frame. // TODO: wireframe rendering. struct { bool wireframe : 1; } flags; vec3 triangle_verts[GFX_IMM_MAX_NUM_TRIANGLES * 3]; } ImmRenderer; /// Create a new immediate mode renderer. bool gfx_imm_make(ImmRenderer*, GfxCore*, LLR*); /// Destroy the immediate mode renderer. void gfx_imm_destroy(ImmRenderer*);