diff options
Diffstat (limited to 'src/rendering/include')
| -rw-r--r-- | src/rendering/include/engine/rendering/rendering.h | 45 |
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); |
