summaryrefslogtreecommitdiff
path: root/archive/src/render/pbr.h
diff options
context:
space:
mode:
Diffstat (limited to 'archive/src/render/pbr.h')
-rw-r--r--archive/src/render/pbr.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/archive/src/render/pbr.h b/archive/src/render/pbr.h
new file mode 100644
index 0000000..5a21533
--- /dev/null
+++ b/archive/src/render/pbr.h
@@ -0,0 +1,70 @@
+/**
+ * @file pbr.h
+ * @brief PBR render pass and uniforms
+ */
+
+#pragma once
+#include "backend_opengl.h"
+#include "camera.h"
+#include "defines.h"
+#include "maths_types.h"
+#include "ral_types.h"
+#include "render_types.h"
+
+// --- Public API
+
+/** @brief Holds data for the PBR pipeline */
+typedef struct PBR_Storage {
+ GPU_Renderpass* pbr_pass;
+ GPU_Pipeline* pbr_static_pipeline;
+ GPU_Pipeline* pbr_skinned_pipeline;
+} PBR_Storage;
+
+typedef struct PBRMaterialUniforms {
+ Material mat;
+} PBRMaterialUniforms;
+
+/** @brief */
+PUB void PBR_Init(PBR_Storage* storage);
+
+// NOTE: For simplicity's sake we will render this pass directly to the default framebuffer
+// internally this defers to `PBR_Execute()`
+PUB void PBR_Run(PBR_Storage* storage
+ // light data
+ // camera
+ // geometry
+ // materials
+);
+
+/** @brief Parameters that get passed as a uniform block to the PBR shader */
+typedef struct PBR_Params {
+ Vec3 albedo;
+ f32 metallic;
+ f32 roughness;
+ f32 ambient_occlusion;
+} PBR_Params;
+
+/** @brief Textures that will get passed into the PBR shader if they're not `INVALID_TEX_HANDLE` */
+typedef struct PBR_Textures {
+ TextureHandle albedo_map;
+ TextureHandle normal_map;
+ bool metal_roughness_combined;
+ TextureHandle metallic_map;
+ TextureHandle roughness_map;
+ TextureHandle ao_map;
+} PBR_Textures;
+
+/** @brief Returns a default white matte material */
+PUB Material PBRMaterialDefault();
+
+PUB ShaderDataLayout PBRMaterial_GetLayout(void* data);
+
+// --- Internal
+
+GPU_Renderpass* PBR_RPassCreate(); /** @brief Create the PBR Renderpass */
+
+void PBR_PipelinesCreate(PBR_Storage* storage,
+ GPU_Renderpass* rpass); /** @brief Create PBR Pipelines */
+
+void PBR_Execute(PBR_Storage* storage, Camera camera, TextureHandle shadowmap_tex,
+ RenderEnt* entities, size_t entity_count);