Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions include/weird-renderer/core/SDF3DRenderPipeline.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,17 @@ namespace WeirdEngine
void free();
void showDebugUI();

void setAntialiasing(bool enable);
void setPathTracer(bool enable);

Config& getConfig()
{
return m_config;
}

private:
void updatePipelineDefines();

Config m_config;
RenderPlane& m_renderPlane;

Expand Down
74 changes: 55 additions & 19 deletions src/weird-renderer/core/SDF3DRenderPipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,23 +31,64 @@ namespace WeirdEngine
m_shapeDataBuffer = new DataBuffer();
resize(config.renderWidth, config.renderHeight);

updatePipelineDefines();

m_sdfShader.addDefine("MESH_SHADOW_SDF");
}

SDF3DRenderPipeline::~SDF3DRenderPipeline()
{
free();
delete m_shapeDataBuffer;
}

void SDF3DRenderPipeline::updatePipelineDefines()
{
if (m_config.enablePathTracer)
{
m_sdfShader.addDefine("PATH_TRACING");
m_resolveShader.removeDefine("FXAA");
if (m_config.enableAntialiasing)
{
m_sdfShader.addDefine("ANTIALIASING");
}
else
{
m_sdfShader.removeDefine("ANTIALIASING");
}
}

if (m_config.enableAntialiasing)
else
{
m_sdfShader.addDefine("ANTIALIASING");
m_sdfShader.removeDefine("PATH_TRACING");
m_sdfShader.removeDefine("ANTIALIASING");
if (m_config.enableAntialiasing)
{
m_resolveShader.addDefine("FXAA");
}
else
{
m_resolveShader.removeDefine("FXAA");
}
}
}

m_sdfShader.addDefine("MESH_SHADOW_SDF");
void SDF3DRenderPipeline::setAntialiasing(bool enable)
{
if (m_config.enableAntialiasing != enable)
{
m_config.enableAntialiasing = enable;
updatePipelineDefines();
}
}

SDF3DRenderPipeline::~SDF3DRenderPipeline()
void SDF3DRenderPipeline::setPathTracer(bool enable)
{
free();
delete m_shapeDataBuffer;
if (m_config.enablePathTracer != enable)
{
m_config.enablePathTracer = enable;
m_frameCounter = 0;
updatePipelineDefines();
}
}

Shader& SDF3DRenderPipeline::getShader()
Expand All @@ -59,7 +100,7 @@ namespace WeirdEngine
const std::vector<Light>& lights, const Camera& camera, double time,
const GBuffer& gbuffer, const Material3D* materials)
{
// Reset frame counter when path tracer is disabled (no accumulation)
// Reset frame counter when path tracer is disabled (no accumulation in realtime)
if (!m_config.enablePathTracer)
m_frameCounter = 0;

Expand Down Expand Up @@ -141,7 +182,7 @@ namespace WeirdEngine
m_sdfShader.setUniform("u_loadedObjects", (int)dataSize);
m_sdfShader.setUniform("u_shapeCount", (int)shapeCount);

if (m_frameCounter < m_config.maxAccumulationFrames)
if (!m_config.enablePathTracer || m_frameCounter < m_config.maxAccumulationFrames)
m_renderPlane.draw(m_sdfShader);

m_frameCounter++;
Expand All @@ -151,6 +192,8 @@ namespace WeirdEngine

m_resolveShader.use();
m_resolveShader.setUniform("t_input", 0);
m_resolveShader.setUniform("u_inverseResolution",
glm::vec2(1.0f / m_config.renderWidth, 1.0f / m_config.renderHeight));
m_accumTexture[m_accumIdx].bind(0);

glDisable(GL_DEPTH_TEST);
Expand Down Expand Up @@ -223,22 +266,15 @@ namespace WeirdEngine
{
WeirdEngine::Logger::log(std::string("Path tracer ") +
(m_config.enablePathTracer ? "enabled" : "disabled"));

if (m_config.enablePathTracer)
m_sdfShader.addDefine("PATH_TRACING");
else
m_sdfShader.removeDefine("PATH_TRACING");
m_frameCounter = 0;
updatePipelineDefines();
}

if (ImGui::Checkbox("Enable Anti-Aliasing", &m_config.enableAntialiasing))
{
WeirdEngine::Logger::log(std::string("Anti-Aliasing ") +
(m_config.enableAntialiasing ? "enabled" : "disabled"));

if (m_config.enableAntialiasing)
m_sdfShader.addDefine("ANTIALIASING");
else
m_sdfShader.removeDefine("ANTIALIASING");
updatePipelineDefines();
}

if (ImGui::SliderFloat("Contrast", &m_config.contrast, 1.0f, 10.0f))
Expand Down
Loading
Loading