summaryrefslogtreecommitdiff
path: root/src/rendering/include
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2024-03-24 20:30:08 +0000
committer0scar <qgt268@alumni.ku.dk>2024-03-24 20:30:08 +0000
commit89d91e094d3d956e76a5a66e9490666e2455a8e0 (patch)
treec49fb04f71875f490db6e514254ab97f9d731d94 /src/rendering/include
parentc963d88a6be5dcd80d7431ce884a68dc8d4953ce (diff)
Refine data structures
Diffstat (limited to 'src/rendering/include')
-rw-r--r--src/rendering/include/engine/rendering/rendering.h78
1 files changed, 56 insertions, 22 deletions
diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h
index 4babe6d..fccbb73 100644
--- a/src/rendering/include/engine/rendering/rendering.h
+++ b/src/rendering/include/engine/rendering/rendering.h
@@ -58,50 +58,84 @@ typedef struct {
u32 program;
} Shader;
+typedef enum {
+ ShaderBufferDataType_nil,
+
+ ShaderBufferDataType_f32,
+ ShaderBufferDataType_f64,
+
+ ShaderBufferDataType_i32,
+ ShaderBufferDataType_i64,
+} ShaderBufferDataType;
+
+const
+usize ShaderBufferDataType_size(ShaderBufferDataType t) {
+ switch (t) {
+ case ShaderBufferDataType_nil: return 0;
+ case ShaderBufferDataType_f32: return sizeof(f32);
+ case ShaderBufferDataType_f64: return sizeof(f64);
+ case ShaderBufferDataType_i32: return sizeof(i32);
+ case ShaderBufferDataType_i64: return sizeof(i64);
+ default: return 0;
+ }
+}
+
typedef struct {
- // Maybe also define type? so texture normals can be mapped to a texture
- // atlas?
+ // The backend ID, ie. glGenBuffer(numBufferObjects, &this->buffername)
u32 buffername;
- isize sz;
- isize n;
- isize m;
+ // The size of data = count * size_elem
+ isize size;
+ // Number of elements
+ isize count;
+ // components per generic vertex attribute (ie, 3 for RGB, 2 for UV)
+ isize components;
+ // Size of each element
+ ShaderBufferDataType datatype;
+ isize size_elem;
+ // Pointer to the data
void* data;
} ShaderBuffer;
+#define SHADERBUFFER_NEW(T, COUNT, COMPONENTS, DATA) \
+ (ShaderBuffer){ \
+ .buffername = 0, \
+ .size = COUNT * sizeof(T), \
+ .count = COUNT, \
+ .datatype = ShaderBufferDataType_##T, \
+ .size_elem = sizeof(T), \
+ .data = DATA, \
+ }
+
typedef struct {
/* Shader proram */
Shader shader;
/* Vertex Array Object */
u32 vao;
- /* MVP (a uniform from the shader) */
+ /* MVP (a uniform from the shader).
+ * This could also probably be generalized */
u32 mvp;
+ // The texture ID, glBindTextures(target, &this->texture)
u32 texture;
+
+ // Number of buffers
usize buffer_len;
+
+ // The vertex buffer is also just a buffer.
ShaderBuffer* buffer;
} RenderObject;
typedef struct {
- isize count;
- // TODO: Add index buffer?
- f32 *vertices;
-} RenderModel;
-
-typedef struct {
- // Size and count of models
+ // Size of models buffer
isize msize;
+ // number of models (RenderObject)
isize mcount;
+
+ RenderObject *models;
+
// Size and count of vertices
- isize vsize;
- isize vcount;
- // Should we keep track of each added model?
- // sort of like an array of pointers?
- // then have a function to update each model?
- RenderModel *models;
- u32 vertexbuffer;
- f32 *vertices;
- // TODO: Add index buffer?
+ RenderObject renderobj;
} RenderBatch;
typedef enum {