added options to toggle gamma correct and HDR tonemapping from the debug GUI
This commit is contained in:
parent
f4e71649ad
commit
34bfe8d419
@ -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.
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user