summaryrefslogtreecommitdiff
path: root/src/ral
diff options
context:
space:
mode:
Diffstat (limited to 'src/ral')
-rw-r--r--src/ral/backends/opengl/backend_opengl.h35
-rw-r--r--src/ral/ral_impl.h24
-rw-r--r--src/ral/ral_types.h18
3 files changed, 60 insertions, 17 deletions
diff --git a/src/ral/backends/opengl/backend_opengl.h b/src/ral/backends/opengl/backend_opengl.h
index 3e40945..805914e 100644
--- a/src/ral/backends/opengl/backend_opengl.h
+++ b/src/ral/backends/opengl/backend_opengl.h
@@ -68,10 +68,43 @@ typedef struct opengl_support {
u32 pad;
} opengl_support;
-// u32 shader_create_separate(const char *vert_shader, const char *frag_shader);
void uniform_vec3f(u32 program_id, const char *uniform_name, Vec3 *value);
void uniform_f32(u32 program_id, const char *uniform_name, f32 value);
void uniform_i32(u32 program_id, const char *uniform_name, i32 value);
void uniform_mat4f(u32 program_id, const char *uniform_name, Mat4 *value);
+
+typedef enum GlCommandType {
+ GLCMD_DRAW,
+ GLCMD_DRAW_INDEXED,
+ GLCMD_BIND_VBUF,
+ GLCMD_BIND_IBUF,
+ GLCMD_SET_PROGRAM,
+} GlCommandType;
+
+typedef struct GlCommand {
+ GlCommandType cmd_type;
+ union {
+ struct {
+ PrimitiveTopology topology;
+ u32 start_vertex;
+ u32 vertex_count;
+ // TODO: instance
+ } draw;
+ struct {
+ PrimitiveTopology topology;
+ u32 index_count;
+ } draw_indexed;
+ struct {
+ u32 buffer_id;
+ } bind_vbuf;
+ struct {
+ u32 buffer_id;
+ } bind_ibuf;
+ struct {
+ u32 program_id;
+ } set_program;
+ } data;
+} GlCommand;
+
#endif
diff --git a/src/ral/ral_impl.h b/src/ral/ral_impl.h
index 8f96bc3..2ca75d6 100644
--- a/src/ral/ral_impl.h
+++ b/src/ral/ral_impl.h
@@ -62,22 +62,7 @@ PUB void GPU_TextureDestroy(TextureHandle handle);
PUB void GPU_TextureUpload(TextureHandle handle, size_t n_bytes, const void* data);
// --- Data copy commands
-// TODO: Rename these to reflect current coding style
-void encode_buffer_copy(GPU_CmdEncoder* encoder, BufferHandle src, u64 src_offset, BufferHandle dst,
- u64 dst_offset, u64 copy_size);
-void buffer_upload_bytes(BufferHandle gpu_buf, bytebuffer cpu_buf, u64 offset, u64 size);
-
-void copy_buffer_to_buffer_oneshot(BufferHandle src, u64 src_offset, BufferHandle dst,
- u64 dst_offset, u64 copy_size);
-void copy_buffer_to_image_oneshot(BufferHandle src, TextureHandle dst);
-
-// --- Render commands
-PUB void GPU_EncodeBindPipeline(GPU_CmdEncoder* encoder, GPU_Pipeline* pipeline);
-PUB void GPU_EncodeBindShaderData(GPU_CmdEncoder* encoder, u32 group, ShaderDataLayout layout);
-void GPU_EncodeSetDefaults(GPU_CmdEncoder* encoder);
-PUB void GPU_EncodeSetVertexBuffer(GPU_CmdEncoder* encoder, BufferHandle buf);
-PUB void GPU_EncodeSetIndexBuffer(GPU_CmdEncoder* encoder, BufferHandle buf);
-PUB void GPU_EncodeCopyBufToBuf();
+PUB void GPU_EncodeCopyBufToBuf(GPU_CmdEncoder* encoder, BufferHandle src, u64 src_offset, BufferHandle dst, u64 dst_offset, u64 copy_size);
// PUB void GPU_EncodeCopyBufToTex(GPU_CmdEncoder* encoder, BufferHandle src, TextureHandle dst,
// u32 x_offset, u32 y_offset, u32 width, u32 height, const void* data);
@@ -88,6 +73,13 @@ PUB void GPU_WriteTextureRegion(GPU_CmdEncoder* encoder, TextureHandle dst, u32
PUB void GPU_WriteBuffer(GPU_CmdEncoder* encoder, BufferHandle buf, u64 offset, u64 size,
const void* data);
+// --- Render commands
+PUB void GPU_EncodeBindPipeline(GPU_CmdEncoder* encoder, GPU_Pipeline* pipeline);
+PUB void GPU_EncodeBindShaderData(GPU_CmdEncoder* encoder, u32 group, ShaderDataLayout layout);
+void GPU_EncodeSetDefaults(GPU_CmdEncoder* encoder);
+PUB void GPU_EncodeSetVertexBuffer(GPU_CmdEncoder* encoder, BufferHandle buf);
+PUB void GPU_EncodeSetIndexBuffer(GPU_CmdEncoder* encoder, BufferHandle buf);
+
PUB void GPU_EncodeDraw(GPU_CmdEncoder* encoder, u64 count);
PUB void GPU_EncodeDrawIndexed(GPU_CmdEncoder* encoder, u64 index_count);
PUB void GPU_EncodeDrawInstanced(GPU_CmdEncoder* encoder, u64 index_count,
diff --git a/src/ral/ral_types.h b/src/ral/ral_types.h
index 470e4e9..e15e0f4 100644
--- a/src/ral/ral_types.h
+++ b/src/ral/ral_types.h
@@ -232,6 +232,24 @@ typedef enum PrimitiveTopology {
typedef enum CullMode { CULL_BACK_FACE, CULL_FRONT_FACE, CULL_COUNT } CullMode;
+typedef enum Winding {
+ WINDING_CCW,
+ WINDING_CW
+} Winding;
+
+// based on https://registry.khronos.org/OpenGL-Refpages/gl4/html/glDepthFunc.xhtml
+typedef enum CompareFunc {
+ COMPARE_NEVER,
+ COMPARE_LESS,
+ COMPARE_EQUAL,
+ COMPARE_LESS_EQUAL,
+ COMPARE_GREATER,
+ COMPARE_NOT_EQUAL,
+ COMPARE_GREATER_EQUAL,
+ COMPARE_ALWAYS,
+ COMPARE_COUNT
+} CompareFunc;
+
typedef struct GraphicsPipelineDesc {
const char* debug_name;
VertexDescription vertex_desc;