Use a separate rtt for diffuse/specular
This commit is contained in:
parent
4584464798
commit
c38a26b92a
@ -78,9 +78,10 @@ enum TypeFBO
|
|||||||
{
|
{
|
||||||
FBO_SSAO,
|
FBO_SSAO,
|
||||||
FBO_NORMAL_AND_DEPTHS,
|
FBO_NORMAL_AND_DEPTHS,
|
||||||
FBO_COMBINED_TMP1_TMP2,
|
FBO_COMBINED_DIFFUSE_SPECULAR,
|
||||||
FBO_COLORS,
|
FBO_COLORS,
|
||||||
FBO_LOG_LUMINANCE,
|
FBO_DIFFUSE,
|
||||||
|
FBO_SPECULAR,
|
||||||
FBO_MLAA_COLORS,
|
FBO_MLAA_COLORS,
|
||||||
FBO_MLAA_BLEND,
|
FBO_MLAA_BLEND,
|
||||||
FBO_MLAA_TMP,
|
FBO_MLAA_TMP,
|
||||||
@ -140,7 +141,9 @@ enum TypeRTT
|
|||||||
RTT_LINEAR_DEPTH,
|
RTT_LINEAR_DEPTH,
|
||||||
RTT_NORMAL_AND_DEPTH,
|
RTT_NORMAL_AND_DEPTH,
|
||||||
RTT_COLOR,
|
RTT_COLOR,
|
||||||
RTT_LOG_LUMINANCE,
|
RTT_DIFFUSE,
|
||||||
|
RTT_SPECULAR,
|
||||||
|
|
||||||
|
|
||||||
RTT_HALF1,
|
RTT_HALF1,
|
||||||
RTT_HALF2,
|
RTT_HALF2,
|
||||||
|
@ -384,12 +384,12 @@ void IrrDriver::renderSolidSecondPass()
|
|||||||
if (irr_driver->getGLSLVersion() >= 330)
|
if (irr_driver->getGLSLVersion() >= 330)
|
||||||
glBindSampler(0, 0);
|
glBindSampler(0, 0);
|
||||||
#endif
|
#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
|
#ifdef GL_VERSION_3_3
|
||||||
if (irr_driver->getGLSLVersion() >= 330)
|
if (irr_driver->getGLSLVersion() >= 330)
|
||||||
glBindSampler(1, 0);
|
glBindSampler(1, 0);
|
||||||
#endif
|
#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
|
#ifdef GL_VERSION_3_3
|
||||||
if (irr_driver->getGLSLVersion() >= 330)
|
if (irr_driver->getGLSLVersion() >= 330)
|
||||||
glBindSampler(2, 0);
|
glBindSampler(2, 0);
|
||||||
|
@ -169,14 +169,14 @@ void IrrDriver::renderLights(unsigned pointlightcount)
|
|||||||
|
|
||||||
for (unsigned i = 0; i < sun_ortho_matrix.size(); i++)
|
for (unsigned i = 0; i < sun_ortho_matrix.size(); i++)
|
||||||
sun_ortho_matrix[i] *= getInvViewMatrix();
|
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)
|
if (!UserConfigParams::m_dynamic_lights)
|
||||||
glClearColor(.5, .5, .5, .5);
|
glClearColor(.5, .5, .5, .5);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
if (!UserConfigParams::m_dynamic_lights)
|
if (!UserConfigParams::m_dynamic_lights)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_rtts->getFBO(FBO_TMP1_WITH_DS).Bind();
|
m_rtts->getFBO(FBO_DIFFUSE).Bind();
|
||||||
if (UserConfigParams::m_gi)
|
if (UserConfigParams::m_gi)
|
||||||
{
|
{
|
||||||
ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_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_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
|
// Render sunlight if and only if track supports shadow
|
||||||
if (!World::getWorld() || World::getWorld()->getTrack()->hasShadows())
|
if (!World::getWorld() || World::getWorld()->getTrack()->hasShadows())
|
||||||
|
@ -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_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_SSAO] = generateRTT(res, GL_R16F, GL_RED, GL_FLOAT);
|
||||||
RenderTargetTextures[RTT_DISPLACE] = generateRTT(res, GL_RGBA16F, GL_BGRA, 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_HALF1] = generateRTT(half, GL_RGBA16F, GL_BGRA, GL_FLOAT);
|
||||||
RenderTargetTextures[RTT_QUARTER1] = generateRTT(quarter, 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_TMP_256] = generateRTT(shadowsize2, GL_RGBA16F, GL_BGR, GL_FLOAT);
|
||||||
RenderTargetTextures[RTT_BLOOM_128] = generateRTT(shadowsize3, 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_TMP_128] = generateRTT(shadowsize3, GL_RGBA16F, GL_BGR, GL_FLOAT);
|
||||||
RenderTargetTextures[RTT_LOG_LUMINANCE] = generateRTT(shadowsize0, GL_R16F, GL_RED, GL_FLOAT);
|
|
||||||
|
|
||||||
std::vector<GLuint> somevector;
|
std::vector<GLuint> somevector;
|
||||||
somevector.push_back(RenderTargetTextures[RTT_SSAO]);
|
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]);
|
somevector.push_back(RenderTargetTextures[RTT_NORMAL_AND_DEPTH]);
|
||||||
FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height));
|
FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height));
|
||||||
somevector.clear();
|
somevector.clear();
|
||||||
somevector.push_back(RenderTargetTextures[RTT_TMP1]);
|
somevector.push_back(RenderTargetTextures[RTT_DIFFUSE]);
|
||||||
somevector.push_back(RenderTargetTextures[RTT_TMP2]);
|
somevector.push_back(RenderTargetTextures[RTT_SPECULAR]);
|
||||||
FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height));
|
FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height));
|
||||||
somevector.clear();
|
somevector.clear();
|
||||||
somevector.push_back(RenderTargetTextures[RTT_COLOR]);
|
somevector.push_back(RenderTargetTextures[RTT_COLOR]);
|
||||||
FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height));
|
FrameBuffers.push_back(new FrameBuffer(somevector, DepthStencilTexture, res.Width, res.Height));
|
||||||
somevector.clear();
|
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));
|
FrameBuffers.push_back(new FrameBuffer(somevector, res.Width, res.Height));
|
||||||
somevector.clear();
|
somevector.clear();
|
||||||
somevector.push_back(RenderTargetTextures[RTT_MLAA_COLORS]);
|
somevector.push_back(RenderTargetTextures[RTT_MLAA_COLORS]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user