summaryrefslogtreecommitdiff
path: root/archive/src/ral/ral_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'archive/src/ral/ral_common.h')
-rw-r--r--archive/src/ral/ral_common.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/archive/src/ral/ral_common.h b/archive/src/ral/ral_common.h
new file mode 100644
index 0000000..5a797e5
--- /dev/null
+++ b/archive/src/ral/ral_common.h
@@ -0,0 +1,61 @@
+/**
+ * @brief Common functions that don't actually depend on the specific backend
+ */
+#pragma once
+#include "buf.h"
+#include "defines.h"
+#include "mem.h"
+#include "ral_types.h"
+// #include "ral_impl.h"
+
+// Concrete implementation
+#if defined(CEL_REND_BACKEND_OPENGL)
+#include "backend_opengl.h"
+#endif
+
+TYPED_POOL(GPU_Buffer, Buffer);
+TYPED_POOL(GPU_Texture, Texture);
+TYPED_POOL(GPU_PipelineLayout, PipelineLayout);
+TYPED_POOL(GPU_Pipeline, Pipeline);
+TYPED_POOL(GPU_Renderpass, Renderpass);
+
+// --- Handy macros
+#define BUFFER_GET(h) (Buffer_pool_get(&context.resource_pools->buffers, h))
+#define TEXTURE_GET(h) (Texture_pool_get(&context.resource_pools->textures, h))
+
+// --- Views
+typedef struct GPU_BufferView {
+ BufferHandle buf;
+ size_t offset;
+ size_t bytes;
+} GPU_BufferView;
+
+// --- Pools
+typedef struct GPU_BackendPools {
+ Pipeline_pool pipelines;
+ PipelineLayout_pool pipeline_layouts;
+ Renderpass_pool renderpasses;
+} GPU_BackendPools;
+void BackendPools_Init(arena* a, GPU_BackendPools* backend_pools);
+
+struct ResourcePools {
+ Buffer_pool buffers;
+ Texture_pool textures;
+};
+typedef struct ResourcePools ResourcePools;
+void ResourcePools_Init(arena* a, struct ResourcePools* res_pools);
+
+PUB GPU_Renderpass* GPU_GetDefaultRenderpass(); // returns a renderpass that draws directly to
+ // default framebuffer with default depth
+
+// --
+// window resize callback
+void GPU_WindowResizedCallback(u32 x, u32 y);
+
+// --- Vertex formats
+VertexDescription static_3d_vertex_description();
+
+void VertexDesc_AddAttr(VertexDescription* builder, const char* name, VertexAttribType type);
+size_t VertexDesc_CalcStride(VertexDescription* desc);
+
+size_t VertexAttribSize(VertexAttribType attr);