added options to toggle gamma correct and HDR tonemapping from the debug GUI

This commit is contained in:
Anselme 2017-08-25 17:24:38 +02:00
parent f4e71649ad
commit 34bfe8d419
5 changed files with 43 additions and 14 deletions

View File

@ -90,7 +90,7 @@ vec3 GGX(
mat3 viewToWorld = inverseViewMatrix; mat3 viewToWorld = inverseViewMatrix;
vec3 irradiance = texture(ambientMap, viewToWorld*N).rgb; vec3 irradiance = texture(ambientMap, viewToWorld * N).rgb;
vec3 diffuse = irradiance * albedo; vec3 diffuse = irradiance * albedo;
// sample both the pre-filter map and the BRDF lut and combine them together as per the Split-Sum approximation to get the IBL specular part. // sample both the pre-filter map and the BRDF lut and combine them together as per the Split-Sum approximation to get the IBL specular part.

View File

@ -1,5 +1,3 @@
#version 330 core
// LIGHT BUFFER // LIGHT BUFFER
uniform sampler2DRect lightBuffer; uniform sampler2DRect lightBuffer;
@ -15,10 +13,14 @@ void main(void) {
vec3 color = texelFetch(lightBuffer, texCoord).xyz; vec3 color = texelFetch(lightBuffer, texCoord).xyz;
// HDR tonemapping // HDR tonemapping
#ifdef HDR_TONEMAPPING
color = color / (color + vec3(1.0)); color = color / (color + vec3(1.0));
#endif
// gamma correct // gamma correct
#ifdef GAMMA_CORRECT
color = pow(color, vec3(1.0/2.2)); color = pow(color, vec3(1.0/2.2));
#endif
outColor = vec4(color, 1.0); outColor = vec4(color, 1.0);
} }

View File

@ -1,5 +1,3 @@
#version 330 core
layout(location = 0)in vec2 inPosition; layout(location = 0)in vec2 inPosition;
void main(void) { void main(void) {

View File

@ -90,11 +90,14 @@ DeferredPipeline::DeferredPipeline() :
m_skybox(nullptr), m_skybox(nullptr),
m_width(512), m_width(512),
m_height(512), m_height(512),
m_postEffectsShader(nullptr),
m_depth_stencil_renderBuffer(0), m_depth_stencil_renderBuffer(0),
m_gBuffer(nullptr), m_gBuffer(nullptr),
m_lightingBuffer(nullptr), m_lightingBuffer(nullptr),
m_renderTarget(nullptr), m_renderTarget(nullptr),
m_debugGuiEnabled(false) m_debugGuiEnabled(false),
m_gammaCorrectEnabled(true),
m_hdrTonemappingEnabled(false)
{ {
Resource::ResourceMap shaderMap; Resource::ResourceMap shaderMap;
Resource::getResourcePack_shaders(shaderMap); Resource::getResourcePack_shaders(shaderMap);
@ -107,15 +110,21 @@ DeferredPipeline::DeferredPipeline() :
m_mesh2DSource = new ShaderSource(); m_mesh2DSource = new ShaderSource();
m_mesh2DSource->setSource(shaderMap["shaders/gui.vert.glsl"], ShaderSource::VERTEX); m_mesh2DSource->setSource(shaderMap["shaders/gui.vert.glsl"], ShaderSource::VERTEX);
m_mesh2DSource->setSource(shaderMap["shaders/gui.frag.glsl"], ShaderSource::FRAGMENT); m_mesh2DSource->setSource(shaderMap["shaders/gui.frag.glsl"], ShaderSource::FRAGMENT);
std::string vertSource = shaderMap["shaders/posteffects.vert.glsl"];
std::string fragSource = shaderMap["shaders/posteffects.frag.glsl"]; m_postEffectsShaders = new ShaderSource();
m_postEffectsShader = new Shader(vertSource, fragSource); m_postEffectsShaders->setSource(shaderMap["shaders/posteffects.vert.glsl"], ShaderSource::VERTEX);
m_postEffectsShaders->setSource(shaderMap["shaders/posteffects.frag.glsl"], ShaderSource::FRAGMENT);
recompilePostEffectsShader();
m_debugShaders = new ShaderSource(); m_debugShaders = new ShaderSource();
m_debugShaders->setSource(shaderMap["shaders/gui.vert.glsl"], ShaderSource::VERTEX); m_debugShaders->setSource(shaderMap["shaders/debug.vert.glsl"], ShaderSource::VERTEX);
m_debugShaders->setSource(shaderMap["shaders/gui.frag.glsl"], ShaderSource::FRAGMENT); m_debugShaders->setSource(shaderMap["shaders/debug.frag.glsl"], ShaderSource::FRAGMENT);
m_guiMesh = new GuiMesh(); m_guiMesh = new GuiMesh();
m_guiMesh->initGL(); m_guiMesh->initGL();
glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
} }
bool depthCompare(const GeometryNode* firstElem, const GeometryNode* secondElem) { bool depthCompare(const GeometryNode* firstElem, const GeometryNode* secondElem) {
@ -259,8 +268,8 @@ void DeferredPipeline::renderGL(Scene *scene)
node->mesh->draw(shader); node->mesh->draw(shader);
} }
//if(m_debugGuiEnabled) if(m_debugGuiEnabled)
// gui(); gui();
// IMGUI PASS // IMGUI PASS
m_guiMesh->drawGL(); m_guiMesh->drawGL();
@ -316,6 +325,10 @@ struct DebugCanvas
void DeferredPipeline::gui() void DeferredPipeline::gui()
{ {
ImGui::Begin("Rendering Pipeline", &m_debugGuiEnabled); ImGui::Begin("Rendering Pipeline", &m_debugGuiEnabled);
if(ImGui::Checkbox("Gamma correction", &m_gammaCorrectEnabled))
recompilePostEffectsShader();
if(ImGui::Checkbox("HDR tonemapping", &m_hdrTonemappingEnabled))
recompilePostEffectsShader();
if(ImGui::Button("Add a debug canvas")) if(ImGui::Button("Add a debug canvas"))
{ {
@ -326,6 +339,18 @@ void DeferredPipeline::gui()
} }
void DeferredPipeline::recompilePostEffectsShader()
{
std::vector<const char*> defines;
if(m_gammaCorrectEnabled)
defines.push_back("GAMMA_CORRECT");
if(m_hdrTonemappingEnabled)
defines.push_back("HDR_TONEMAPPING");
if(m_postEffectsShader != nullptr)
delete m_postEffectsShader;
m_postEffectsShader = m_postEffectsShaders->compile(defines);
}
void DeferredPipeline::setSkybox(Texture* texture) void DeferredPipeline::setSkybox(Texture* texture)
{ {
if(m_skybox != nullptr) if(m_skybox != nullptr)

View File

@ -44,11 +44,12 @@ class DeferredPipeline : public Pipeline
std::unordered_map<unsigned int, Shader*> m_mesh3DShaders; std::unordered_map<unsigned int, Shader*> m_mesh3DShaders;
std::unordered_map<unsigned int, Shader*> m_lightShaders; std::unordered_map<unsigned int, Shader*> m_lightShaders;
std::unordered_map<unsigned int, Shader*> m_mesh2DShaders; std::unordered_map<unsigned int, Shader*> m_mesh2DShaders;
Shader *m_postEffectsShader;
ShaderSource *m_gBufferSource; ShaderSource *m_gBufferSource;
ShaderSource *m_lightingSource; ShaderSource *m_lightingSource;
ShaderSource *m_mesh2DSource; ShaderSource *m_mesh2DSource;
Shader *m_postEffectsShader; // TODELETE ShaderSource *m_postEffectsShaders;
ShaderSource *m_debugShaders; ShaderSource *m_debugShaders;
GuiMesh * m_guiMesh; GuiMesh * m_guiMesh;
@ -61,8 +62,11 @@ class DeferredPipeline : public Pipeline
// debug gui // debug gui
bool m_debugGuiEnabled; bool m_debugGuiEnabled;
bool m_gammaCorrectEnabled;
bool m_hdrTonemappingEnabled;
void gui(); void gui();
void recompilePostEffectsShader();
public: public:
DeferredPipeline(); DeferredPipeline();