From c38a26b92a7707c662ea5c057048d4bc4585941c Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Thu, 21 Aug 2014 23:26:16 +0200 Subject: [PATCH] Use a separate rtt for diffuse/specular --- src/graphics/irr_driver.hpp | 9 ++++++--- src/graphics/render_geometry.cpp | 4 ++-- src/graphics/render_lighting.cpp | 6 +++--- src/graphics/rtts.cpp | 12 ++++++++---- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/graphics/irr_driver.hpp b/src/graphics/irr_driver.hpp index 3fe360c36..86ca6490e 100644 --- a/src/graphics/irr_driver.hpp +++ b/src/graphics/irr_driver.hpp @@ -78,9 +78,10 @@ enum TypeFBO { FBO_SSAO, FBO_NORMAL_AND_DEPTHS, - FBO_COMBINED_TMP1_TMP2, + FBO_COMBINED_DIFFUSE_SPECULAR, FBO_COLORS, - FBO_LOG_LUMINANCE, + FBO_DIFFUSE, + FBO_SPECULAR, FBO_MLAA_COLORS, FBO_MLAA_BLEND, FBO_MLAA_TMP, @@ -140,7 +141,9 @@ enum TypeRTT RTT_LINEAR_DEPTH, RTT_NORMAL_AND_DEPTH, RTT_COLOR, - RTT_LOG_LUMINANCE, + RTT_DIFFUSE, + RTT_SPECULAR, + RTT_HALF1, RTT_HALF2, diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index ec27ac576..3edef84be 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -384,12 +384,12 @@ void IrrDriver::renderSolidSecondPass() if (irr_driver->getGLSLVersion() >= 330) glBindSampler(0, 0); #endif - setTexture(0, m_rtts->getRenderTarget(RTT_TMP1), GL_NEAREST, GL_NEAREST); + setTexture(0, m_rtts->getRenderTarget(RTT_DIFFUSE), GL_NEAREST, GL_NEAREST); #ifdef GL_VERSION_3_3 if (irr_driver->getGLSLVersion() >= 330) glBindSampler(1, 0); #endif - setTexture(1, m_rtts->getRenderTarget(RTT_TMP2), GL_NEAREST, GL_NEAREST); + setTexture(1, m_rtts->getRenderTarget(RTT_SPECULAR), GL_NEAREST, GL_NEAREST); #ifdef GL_VERSION_3_3 if (irr_driver->getGLSLVersion() >= 330) glBindSampler(2, 0); diff --git a/src/graphics/render_lighting.cpp b/src/graphics/render_lighting.cpp index 36fd61aa2..ded49f872 100644 --- a/src/graphics/render_lighting.cpp +++ b/src/graphics/render_lighting.cpp @@ -169,14 +169,14 @@ void IrrDriver::renderLights(unsigned pointlightcount) for (unsigned i = 0; i < sun_ortho_matrix.size(); i++) sun_ortho_matrix[i] *= getInvViewMatrix(); - m_rtts->getFBO(FBO_COMBINED_TMP1_TMP2).Bind(); + m_rtts->getFBO(FBO_COMBINED_DIFFUSE_SPECULAR).Bind(); if (!UserConfigParams::m_dynamic_lights) glClearColor(.5, .5, .5, .5); glClear(GL_COLOR_BUFFER_BIT); if (!UserConfigParams::m_dynamic_lights) return; - m_rtts->getFBO(FBO_TMP1_WITH_DS).Bind(); + m_rtts->getFBO(FBO_DIFFUSE).Bind(); if (UserConfigParams::m_gi) { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_GI)); @@ -188,7 +188,7 @@ void IrrDriver::renderLights(unsigned pointlightcount) m_post_processing->renderDiffuseEnvMap(blueSHCoeff, greenSHCoeff, redSHCoeff); } - m_rtts->getFBO(FBO_COMBINED_TMP1_TMP2).Bind(); + m_rtts->getFBO(FBO_COMBINED_DIFFUSE_SPECULAR).Bind(); // Render sunlight if and only if track supports shadow if (!World::getWorld() || World::getWorld()->getTrack()->hasShadows()) diff --git a/src/graphics/rtts.cpp b/src/graphics/rtts.cpp index aa6ecb6e2..c16921488 100644 --- a/src/graphics/rtts.cpp +++ b/src/graphics/rtts.cpp @@ -115,6 +115,8 @@ RTT::RTT(size_t width, size_t height) RenderTargetTextures[RTT_MLAA_BLEND] = generateRTT(res, GL_SRGB8_ALPHA8, GL_BGR, GL_UNSIGNED_BYTE); RenderTargetTextures[RTT_SSAO] = generateRTT(res, GL_R16F, GL_RED, GL_FLOAT); RenderTargetTextures[RTT_DISPLACE] = generateRTT(res, GL_RGBA16F, GL_BGRA, GL_FLOAT); + RenderTargetTextures[RTT_DIFFUSE] = generateRTT(res, GL_RGB16F, GL_BGR, GL_FLOAT); + RenderTargetTextures[RTT_SPECULAR] = generateRTT(res, GL_RGB16F, GL_BGR, GL_FLOAT); RenderTargetTextures[RTT_HALF1] = generateRTT(half, GL_RGBA16F, GL_BGRA, GL_FLOAT); RenderTargetTextures[RTT_QUARTER1] = generateRTT(quarter, GL_RGBA16F, GL_BGRA, GL_FLOAT); @@ -133,7 +135,6 @@ RTT::RTT(size_t width, size_t height) RenderTargetTextures[RTT_TMP_256] = generateRTT(shadowsize2, GL_RGBA16F, GL_BGR, GL_FLOAT); RenderTargetTextures[RTT_BLOOM_128] = generateRTT(shadowsize3, GL_RGBA16F, GL_BGR, GL_FLOAT); RenderTargetTextures[RTT_TMP_128] = generateRTT(shadowsize3, GL_RGBA16F, GL_BGR, GL_FLOAT); - RenderTargetTextures[RTT_LOG_LUMINANCE] = generateRTT(shadowsize0, GL_R16F, GL_RED, GL_FLOAT); std::vector somevector; somevector.push_back(RenderTargetTextures[RTT_SSAO]); @@ -143,14 +144,17 @@ RTT::RTT(size_t width, size_t height) somevector.push_back(RenderTargetTextures[RTT_NORMAL_AND_DEPTH]); FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height)); somevector.clear(); - somevector.push_back(RenderTargetTextures[RTT_TMP1]); - somevector.push_back(RenderTargetTextures[RTT_TMP2]); + somevector.push_back(RenderTargetTextures[RTT_DIFFUSE]); + somevector.push_back(RenderTargetTextures[RTT_SPECULAR]); FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height)); somevector.clear(); somevector.push_back(RenderTargetTextures[RTT_COLOR]); FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height)); somevector.clear(); - somevector.push_back(RenderTargetTextures[RTT_LOG_LUMINANCE]); + somevector.push_back(RenderTargetTextures[RTT_DIFFUSE]); + FrameBuffers.push_back(new FrameBuffer(somevector, res.Width, res.Height)); + somevector.clear(); + somevector.push_back(RenderTargetTextures[RTT_SPECULAR]); FrameBuffers.push_back(new FrameBuffer(somevector, res.Width, res.Height)); somevector.clear(); somevector.push_back(RenderTargetTextures[RTT_MLAA_COLORS]);