aboutsummaryrefslogtreecommitdiff
path: root/src/Engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/Engine')
-rw-r--r--src/Engine/Engine.cpp24
-rw-r--r--src/Engine/Engine.h28
2 files changed, 37 insertions, 15 deletions
diff --git a/src/Engine/Engine.cpp b/src/Engine/Engine.cpp
index 20a295f..a947357 100644
--- a/src/Engine/Engine.cpp
+++ b/src/Engine/Engine.cpp
@@ -10,6 +10,7 @@
#include "Engine.h"
#include "Core/Log.h"
+#include "Core/HDRIManager.h"
#include "Rendering/VertexBuffer.h"
#include "Rendering/IndexBuffer.h"
@@ -36,15 +37,25 @@ namespace Donut
m_ComputeProgram = CreateComputeProgram("Assets/Shaders/Geodesic.glsl");
m_BlurShader = Ref<Shader>(Shader::Create("Assets/Shaders/Blur.glsl"));
+ auto& hdriManager = HDRIManager::Get();
+ m_HDRIEnvironment = hdriManager.GetCurrentHDRI();
+ if (!m_HDRIEnvironment)
+ {
+ hdriManager.SetCurrentHDRI("Assets/HDRI/HDR_blue_nebulae-1.hdr");
+ m_HDRIEnvironment = hdriManager.GetCurrentHDRI();
+ if (!m_HDRIEnvironment)
+ DONUT_WARN("Failed to load default HDRI, using fallback");
+ }
+
m_CameraUBO = UniformBuffer::Create(128, 1);
- m_DiskUBO = UniformBuffer::Create(sizeof(float) * 5, 2); // Added density parameter
+ m_DiskUBO = UniformBuffer::Create(sizeof(float) * 5, 2);
uint32_t objUBOSize = sizeof(int) + 3 * sizeof(float)
+ 16 * (sizeof(glm::vec4) + sizeof(glm::vec4))
+ 16 * sizeof(float);
m_ObjectsUBO = UniformBuffer::Create(objUBOSize, 3);
- m_SimulationUBO = UniformBuffer::Create(sizeof(int) * 2 + sizeof(float) * 2, 4); // time added to existing float
+ m_SimulationUBO = UniformBuffer::Create(sizeof(int) * 2 + sizeof(float) * 2, 4);
auto result = QuadVAO();
m_QuadVAO = result.first;
@@ -117,6 +128,9 @@ namespace Donut
void Engine::DispatchCompute(const Camera& cam)
{
+ auto& hdriManager = HDRIManager::Get();
+ m_HDRIEnvironment = hdriManager.GetCurrentHDRI();
+
int cw = GetComputeWidth();
int ch = m_ComputeHeight;
@@ -128,7 +142,10 @@ namespace Donut
UploadObjectsUBO(m_Objects);
UploadSimulationUBO();
m_Texture->BindAsImage(0, false);
-
+
+ if (m_HDRIEnvironment)
+ m_HDRIEnvironment->Bind(5);
+
uint32_t groupsX = static_cast<uint32_t>(std::ceil(cw / 16.0f));
uint32_t groupsY = static_cast<uint32_t>(std::ceil(ch / 16.0f));
m_ComputeProgram->Dispatch(groupsX, groupsY, 1);
@@ -509,4 +526,5 @@ namespace Donut
RenderCommand::SetViewport(0, 0, originalWidth, originalHeight);
}
+
}
diff --git a/src/Engine/Engine.h b/src/Engine/Engine.h
index 83f0b19..c3cfdd0 100644
--- a/src/Engine/Engine.h
+++ b/src/Engine/Engine.h
@@ -101,30 +101,34 @@ namespace Donut
void SetMaxStepsStatic(int steps) { m_MaxStepsStatic = steps; }
void SetEarlyExitDistance(float distance) { m_EarlyExitDistance = distance; }
- float GetDiskThickness() const { return m_DiskThickness; }
+ float GetDiskThickness() const { return m_DiskThickness; }
void SetDiskThickness(float thickness) { m_DiskThickness = thickness; }
- float GetDiskDensity() const { return m_DiskDensity; }
- void SetDiskDensity(float density) { m_DiskDensity = density; }
+ float GetDiskDensity() const { return m_DiskDensity; }
+ void SetDiskDensity(float density) { m_DiskDensity = density; }
- float GetRotationSpeed() const { return m_RotationSpeed; }
- void SetRotationSpeed(float speed) { m_RotationSpeed = speed; }
+ float GetRotationSpeed() const { return m_RotationSpeed; }
+ void SetRotationSpeed(float speed) { m_RotationSpeed = speed; }
- float GetBlurStrength() const { return m_BlurStrength; }
- void SetBlurStrength(float strength) { m_BlurStrength = strength; }
+ float GetBlurStrength() const { return m_BlurStrength; }
+ void SetBlurStrength(float strength) { m_BlurStrength = strength; }
- float GetGlowIntensity() const { return m_GlowIntensity; }
+ float GetGlowIntensity() const { return m_GlowIntensity; }
void SetGlowIntensity(float intensity) { m_GlowIntensity = intensity; }
void LoadObjectsFromScene(const std::vector<Donut::Object>& objects);
void ExportHighResFrame(const std::string& filename, int width = 4096, int height = 3072);
void PrintObjectInfo() const;
+
+ void SetHDRIEnvironment(Ref<CubemapTexture> hdri) { m_HDRIEnvironment = hdri; }
+ Ref<CubemapTexture> GetHDRIEnvironment() const { return m_HDRIEnvironment; }
private:
Ref<Shader> CreateComputeProgram(const char* path);
std::pair<Ref<VertexArray>, Ref<Texture2D>> QuadVAO();
private:
Ref<VertexArray> m_QuadVAO;
Ref<Texture2D> m_Texture;
+ Ref<CubemapTexture> m_HDRIEnvironment;
Ref<Shader> m_ShaderProgram;
Ref<Shader> m_ComputeProgram;
Ref<Shader> m_BlurShader;
@@ -135,8 +139,8 @@ namespace Donut
int m_Width;
int m_Height;
- float m_Width_f = 100*10e10f;
- float m_Height_f = 75*10e10f;
+ float m_Width_f = 100.0f*1e10f;
+ float m_Height_f = 75.0f*1e10f;
int m_TargetFPS = 60;
float m_CurrentFPS = 60.0f;
@@ -150,9 +154,9 @@ namespace Donut
int m_MaxStepsMoving = 60000;
int m_MaxStepsStatic = 30000;
- float m_EarlyExitDistance = 5e11f;
+ float m_EarlyExitDistance = 5.0e11f;
- float m_DiskThickness = 0.1;
+ float m_DiskThickness = 0.1f;
float m_DiskDensity = 0.1f;
float m_RotationSpeed = 1.0f;
float m_BlurStrength = 2.0f;