summaryrefslogtreecommitdiff
path: root/src/rendering/include/engine
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2024-08-25 17:07:36 +0000
committer0scar <qgt268@alumni.ku.dk>2024-08-25 17:07:36 +0000
commit89a60823b094ab797df26b9fe4c18050ca35bb6a (patch)
tree38ae30d9e602f2c09d5c1de77a828f22c9dea664 /src/rendering/include/engine
parent7c1c9e9a54ead44c5f1142aae5a71a53d59bcd06 (diff)
Try squishing shader buffer info into a single i32
Diffstat (limited to 'src/rendering/include/engine')
-rw-r--r--src/rendering/include/engine/rendering/rendering.h45
1 files changed, 34 insertions, 11 deletions
diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h
index 2246601..25e3e8a 100644
--- a/src/rendering/include/engine/rendering/rendering.h
+++ b/src/rendering/include/engine/rendering/rendering.h
@@ -58,38 +58,56 @@ typedef struct {
} Shader;
typedef enum {
- ShaderBufferDataType_nil,
+ ShaderBufferFlag_none = 0x00,
- ShaderBufferDataType_f32,
- ShaderBufferDataType_f64,
+ // First 3 bytes describe the access frequency.
+ ShaderBuffer_AccessFrequency_stream = 0b0000000000001, // 1
+ ShaderBuffer_AccessFrequency_static = 0b0000000000010, // 2
+ ShaderBuffer_AccessFrequency_dynamic = 0b0000000000011, // 3
- ShaderBufferDataType_i32,
- ShaderBufferDataType_i64,
-} ShaderBufferDataType;
+ // Next 3 bytes describe the access type.
+ ShaderBuffer_AccessType_draw = 0b0000000001000, // 8
+ ShaderBuffer_AccessType_read = 0b0000000010000, // 16
+ ShaderBuffer_AccessType_copy = 0b0000000011000, // 24
+
+ // Next 3 bytes describe the buffer type
+ ShaderBuffer_Type_vertexData = 0b0000001000000, // 64
+ ShaderBuffer_Type_vertexIndex = 0b0000010000000, // 128
+
+ // Next 4 bytes are designated for the data type
+ ShaderBuffer_DataType_nil = 0b0001000000000, // 512
+
+ ShaderBuffer_DataType_f32 = 0b0010000000000, // 1024
+ ShaderBuffer_DataType_f64 = 0b0011000000000, // 1536
+
+ ShaderBuffer_DataType_i32 = 0b0100000000000, // 2048
+ ShaderBuffer_DataType_i64 = 0b0101000000000, // 2560
+} ShaderBufferFlag;
typedef struct {
// The backend ID, ie. glGenBuffer(numBufferObjects, &this->buffername)
u32 buffername;
+ // Array, access, and data, type.
+ u32 buffertype;
// Buffer size of `data`. To get the size of the actual data, size_elem * count
isize size;
// Number of elements
isize count;
// components per generic vertex attribute (ie, 3 for RGB, 2 for UV)
isize components;
- // Type & size of each element
- ShaderBufferDataType datatype;
+ // size of each element
isize size_elem;
// Pointer to the data
void* data;
} ShaderBuffer;
-#define SHADERBUFFER_NEW(T, COUNT, COMPONENTS, DATA) \
+#define SHADERBUFFER_NEW(T, COUNT, COMPONENTS, DATA, FLAGS) \
(ShaderBuffer){ \
.buffername = 0, \
+ .buffertype = ShaderBuffer_DataType_##T | FLAGS, \
.size = COUNT * sizeof(T), \
.count = COUNT, \
.components = COMPONENTS, \
- .datatype = ShaderBufferDataType_##T, \
.size_elem = sizeof(T), \
.data = DATA, \
}
@@ -153,7 +171,12 @@ typedef struct {
} Camera;
-const usize ShaderBufferDataType_size(ShaderBufferDataType t);
+const usize ShaderBufferDataType_size(u16 flags);
+
+ShaderBufferFlag ShaderBuffer_get_access_frequency(u64 flags);
+ShaderBufferFlag ShaderBuffer_get_access_type(u64 flags);
+ShaderBufferFlag ShaderBuffer_get_type(u64 flags);
+ShaderBufferFlag ShaderBuffer_get_data_type(u64 flags);
/* Rendering functions */
void render_begin(Window* w);