summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gl.c2
-rw-r--r--src/include/daw/rendering.h51
-rw-r--r--src/rendering.c8
3 files changed, 33 insertions, 28 deletions
diff --git a/src/gl.c b/src/gl.c
index 9c9e6da..7c630a6 100644
--- a/src/gl.c
+++ b/src/gl.c
@@ -200,7 +200,7 @@ void shaders_delete(Shader* shader, usize shader_len) {
GLenum ShaderBuffer_get_gl_access(u64 flags) {
const ShaderBufferFlag access = ShaderBuffer_get_access_type(flags);
- switch(flags & 7) { // Stored in the first 3 bits
+ switch(ShaderBuffer_get_access_frequency(flags)) { // Stored in the first 3 bits
case ShaderBuffer_AccessFrequency_stream:
switch(access) {
case ShaderBuffer_AccessType_draw: return GL_STREAM_DRAW;
diff --git a/src/include/daw/rendering.h b/src/include/daw/rendering.h
index 046141e..bebc60c 100644
--- a/src/include/daw/rendering.h
+++ b/src/include/daw/rendering.h
@@ -49,36 +49,41 @@ typedef struct {
typedef enum {
ShaderBufferFlag_none = 0x00,
- // First 3 bytes describe the access frequency.
- ShaderBuffer_AccessFrequency_stream = 1, // 1
- ShaderBuffer_AccessFrequency_static = 2, // 2
- ShaderBuffer_AccessFrequency_dynamic = 3, // 3
+ // First 2 bytes are special buffer types
+ // static is set with bufferstorage, ie. immutable storage
+ ShaderBuffer_static = 1, // 1 - 0001
- // Next 3 bytes describe the access type.
- ShaderBuffer_AccessType_draw = 1 << 3, // 8
- ShaderBuffer_AccessType_read = 2 << 3, // 16
- ShaderBuffer_AccessType_copy = 3 << 3, // 24
+ // Next 2 bytes describe the access frequency.
+ // Use ShaderBuffer_get_access_frequency to retrieve it
+ ShaderBuffer_AccessFrequency_stream = 1 << 2, // 4 - 0100
+ ShaderBuffer_AccessFrequency_static = 2 << 2, // 8 - 1000
+ ShaderBuffer_AccessFrequency_dynamic = 3 << 2, // 12 - 1100
- // Next 3 bytes describe the buffer type
- ShaderBuffer_Type_vertexData = 1 << 6, // 64
- ShaderBuffer_Type_vertexPosition = 2 << 6, // 128
- ShaderBuffer_Type_vertexIndex = 3 << 6, // 192
+ // Next 2 bytes describe the access type.
+ ShaderBuffer_AccessType_draw = 1 << 4, // 16 - 01 0000
+ ShaderBuffer_AccessType_read = 2 << 4, // 32 - 10 0000
+ ShaderBuffer_AccessType_copy = 3 << 4, // 48 - 11 0000
+
+ // Next 2 bytes describe the buffer type
+ ShaderBuffer_Type_vertexData = 1 << 6, // 64 - 0100 0000
+ ShaderBuffer_Type_vertexPosition = 2 << 6, // 128 - 1000 0000
+ ShaderBuffer_Type_vertexIndex = 3 << 6, // 192 - 1100 0000
// Next 4 bytes are designated for the data type
- ShaderBuffer_DataType_nil = 1 << 9, // 512
+ ShaderBuffer_DataType_nil = 1 << 8, // 256
- ShaderBuffer_DataType_f32 = 2 << 9, // 1024
- ShaderBuffer_DataType_f64 = 3 << 9, // 1536
+ ShaderBuffer_DataType_f32 = 2 << 8, // 512
+ ShaderBuffer_DataType_f64 = 3 << 8, // 768
- ShaderBuffer_DataType_i8 = 4 << 9, // 2048
- ShaderBuffer_DataType_i16 = 5 << 9, // 2560
- ShaderBuffer_DataType_i32 = 6 << 9, // 3072
- ShaderBuffer_DataType_i64 = 7 << 9, // 3584
+ ShaderBuffer_DataType_i8 = 4 << 8, // 1024
+ ShaderBuffer_DataType_i16 = 5 << 8, // 1280
+ ShaderBuffer_DataType_i32 = 6 << 8, // 1536
+ ShaderBuffer_DataType_i64 = 7 << 8, // 1792
- ShaderBuffer_DataType_u8 = 8 << 9, // 4096
- ShaderBuffer_DataType_u16 = 9 << 9, // 4608
- ShaderBuffer_DataType_u32 = 10 << 9, // 5120
- ShaderBuffer_DataType_u64 = 11 << 9, // 5632
+ ShaderBuffer_DataType_u8 = 8 << 8, // 2048
+ ShaderBuffer_DataType_u16 = 9 << 8, // 2304
+ ShaderBuffer_DataType_u32 = 10 << 8, // 2560
+ ShaderBuffer_DataType_u64 = 11 << 8, // 2816
} ShaderBufferFlag;
typedef struct {
diff --git a/src/rendering.c b/src/rendering.c
index dceacc4..4a00c92 100644
--- a/src/rendering.c
+++ b/src/rendering.c
@@ -97,10 +97,10 @@ ShaderBufferDataType_size(u16 flags) {
}
}
-ShaderBufferFlag ShaderBuffer_get_access_frequency(u64 flags) { return flags & ( 7 << 0); }
-ShaderBufferFlag ShaderBuffer_get_access_type(u64 flags) { return flags & ( 7 << 3); }
-ShaderBufferFlag ShaderBuffer_get_type(u64 flags) { return flags & ( 7 << 6); }
-ShaderBufferFlag ShaderBuffer_get_data_type(u64 flags) { return flags & (15 << 9); }
+ShaderBufferFlag ShaderBuffer_get_access_frequency(u64 flags) { return flags & ( 3 << 2); }
+ShaderBufferFlag ShaderBuffer_get_access_type(u64 flags) { return flags & ( 3 << 4); }
+ShaderBufferFlag ShaderBuffer_get_type(u64 flags) { return flags & ( 3 << 6); }
+ShaderBufferFlag ShaderBuffer_get_data_type(u64 flags) { return flags & (15 << 8); }
u32 ShaderBuffer_get_gl_type(u64 flags) {
switch(ShaderBuffer_get_type(flags)) {