blob: 61b49a78ab7bde919cb7b3146ebdd056fc2021be (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#pragma once
#include <gfx/sizes.h>
#include <math/vec3.h>
#include <stdbool.h>
#include <stddef.h>
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*);
|