Bloom: Use power of two quads.
This commit is contained in:
@@ -621,31 +621,37 @@ void PostProcessing::render()
|
||||
|
||||
if (globalbloom)
|
||||
{
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, irr_driver->getFBO(FBO_TMP2_WITH_DS));
|
||||
renderBloom(out_rtt);
|
||||
|
||||
glClear(GL_STENCIL_BUFFER_BIT);
|
||||
|
||||
// To half
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, irr_driver->getFBO(FBO_HALF1));
|
||||
glViewport(0, 0, UserConfigParams::m_width / 2, UserConfigParams::m_height / 2);
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_TMP2));
|
||||
renderGaussian6Blur(irr_driver->getFBO(FBO_HALF1), irr_driver->getRenderTargetTexture(RTT_HALF1),
|
||||
irr_driver->getFBO(FBO_HALF2), irr_driver->getRenderTargetTexture(RTT_HALF2), UserConfigParams::m_width / 2, UserConfigParams::m_height / 2);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, irr_driver->getFBO(FBO_BLOOM_1024));
|
||||
glViewport(0, 0, 1024, 1024);
|
||||
renderPassThrough(out_rtt);
|
||||
|
||||
// To quarter
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, irr_driver->getFBO(FBO_QUARTER1));
|
||||
glViewport(0, 0, UserConfigParams::m_width / 4, UserConfigParams::m_height / 4);
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_HALF1));
|
||||
renderGaussian6Blur(irr_driver->getFBO(FBO_QUARTER1), irr_driver->getRenderTargetTexture(RTT_QUARTER1),
|
||||
irr_driver->getFBO(FBO_QUARTER2), irr_driver->getRenderTargetTexture(RTT_QUARTER2), UserConfigParams::m_width / 4, UserConfigParams::m_height / 4);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, irr_driver->getFBO(FBO_BLOOM_512));
|
||||
glViewport(0, 0, 512, 512);
|
||||
renderBloom(irr_driver->getRenderTargetTexture(RTT_BLOOM_1024));
|
||||
|
||||
// To eighth
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, irr_driver->getFBO(FBO_EIGHTH1));
|
||||
glViewport(0, 0, UserConfigParams::m_width / 8, UserConfigParams::m_height / 8);
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_QUARTER1));
|
||||
renderGaussian6Blur(irr_driver->getFBO(FBO_EIGHTH1), irr_driver->getRenderTargetTexture(RTT_EIGHTH1),
|
||||
irr_driver->getFBO(FBO_EIGHTH2), irr_driver->getRenderTargetTexture(RTT_EIGHTH2), UserConfigParams::m_width / 8, UserConfigParams::m_height / 8);
|
||||
// Downsample
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, irr_driver->getFBO(FBO_BLOOM_256));
|
||||
glViewport(0, 0, 256, 256);
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_BLOOM_512));
|
||||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, irr_driver->getFBO(FBO_BLOOM_128));
|
||||
glViewport(0, 0, 128, 128);
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_BLOOM_256));
|
||||
|
||||
// Blur
|
||||
glViewport(0, 0, 512, 512);
|
||||
renderGaussian6Blur(irr_driver->getFBO(FBO_BLOOM_512), irr_driver->getRenderTargetTexture(RTT_BLOOM_512),
|
||||
irr_driver->getFBO(FBO_TMP_512), irr_driver->getRenderTargetTexture(RTT_TMP_512), 512, 512);
|
||||
|
||||
glViewport(0, 0, 256, 256);
|
||||
renderGaussian6Blur(irr_driver->getFBO(FBO_BLOOM_256), irr_driver->getRenderTargetTexture(RTT_BLOOM_256),
|
||||
irr_driver->getFBO(FBO_TMP_256), irr_driver->getRenderTargetTexture(RTT_TMP_256), 256, 256);
|
||||
|
||||
glViewport(0, 0, 128, 128);
|
||||
renderGaussian6Blur(irr_driver->getFBO(FBO_BLOOM_128), irr_driver->getRenderTargetTexture(RTT_BLOOM_128),
|
||||
irr_driver->getFBO(FBO_TMP_128), irr_driver->getRenderTargetTexture(RTT_TMP_128), 128, 128);
|
||||
|
||||
glViewport(0, 0, UserConfigParams::m_width, UserConfigParams::m_height);
|
||||
|
||||
@@ -654,9 +660,9 @@ void PostProcessing::render()
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_ONE, GL_ONE);
|
||||
glBlendEquation(GL_FUNC_ADD);
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_HALF1));
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_QUARTER1));
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_EIGHTH1));
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_BLOOM_128));
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_BLOOM_256));
|
||||
renderPassThrough(irr_driver->getRenderTargetTexture(RTT_BLOOM_512));
|
||||
glDisable(GL_BLEND);
|
||||
} // end if bloom
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ RTT::RTT()
|
||||
const dimension2du shadowsize0(shadowside, shadowside);
|
||||
const dimension2du shadowsize1(shadowside / 2, shadowside / 2);
|
||||
const dimension2du shadowsize2(shadowside / 4, shadowside / 4);
|
||||
const dimension2du shadowsize3(shadowside / 8, shadowside / 8);
|
||||
const dimension2du warpvsize(1, 512);
|
||||
const dimension2du warphsize(512, 1);
|
||||
|
||||
@@ -97,6 +98,14 @@ RTT::RTT()
|
||||
RenderTargetTextures[RTT_QUARTER2] = generateRTT(quarter, GL_RGBA16F, GL_BGRA, GL_FLOAT);
|
||||
RenderTargetTextures[RTT_EIGHTH2] = generateRTT(eighth, GL_RGBA16F, GL_BGRA, GL_FLOAT);
|
||||
|
||||
RenderTargetTextures[RTT_BLOOM_1024] = generateRTT(shadowsize0, GL_RGB16F, GL_BGR, GL_FLOAT);
|
||||
RenderTargetTextures[RTT_BLOOM_512] = generateRTT(shadowsize1, GL_RGB16F, GL_BGR, GL_FLOAT);
|
||||
RenderTargetTextures[RTT_TMP_512] = generateRTT(shadowsize1, GL_RGB16F, GL_BGR, GL_FLOAT);
|
||||
RenderTargetTextures[RTT_BLOOM_256] = generateRTT(shadowsize2, GL_RGB16F, GL_BGR, GL_FLOAT);
|
||||
RenderTargetTextures[RTT_TMP_256] = generateRTT(shadowsize2, GL_RGB16F, GL_BGR, GL_FLOAT);
|
||||
RenderTargetTextures[RTT_BLOOM_128] = generateRTT(shadowsize3, GL_RGB16F, GL_BGR, GL_FLOAT);
|
||||
RenderTargetTextures[RTT_TMP_128] = generateRTT(shadowsize3, GL_RGB16F, GL_BGR, GL_FLOAT);
|
||||
|
||||
FrameBuffers[FBO_SSAO] = generateFBO(RenderTargetTextures[RTT_SSAO]);
|
||||
// Clear this FBO to 1s so that if no SSAO is computed we can still use it.
|
||||
glClearColor(1., 1., 1., 1.);
|
||||
@@ -117,6 +126,14 @@ RTT::RTT()
|
||||
FrameBuffers[FBO_EIGHTH1] = generateFBO(RenderTargetTextures[RTT_EIGHTH1]);
|
||||
FrameBuffers[FBO_EIGHTH2] = generateFBO(RenderTargetTextures[RTT_EIGHTH2]);
|
||||
|
||||
FrameBuffers[FBO_BLOOM_1024] = generateFBO(RenderTargetTextures[RTT_BLOOM_1024]);
|
||||
FrameBuffers[FBO_BLOOM_512] = generateFBO(RenderTargetTextures[RTT_BLOOM_512]);
|
||||
FrameBuffers[FBO_TMP_512] = generateFBO(RenderTargetTextures[RTT_TMP_512]);
|
||||
FrameBuffers[FBO_BLOOM_256] = generateFBO(RenderTargetTextures[RTT_BLOOM_256]);
|
||||
FrameBuffers[FBO_TMP_256] = generateFBO(RenderTargetTextures[RTT_TMP_256]);
|
||||
FrameBuffers[FBO_BLOOM_128] = generateFBO(RenderTargetTextures[RTT_BLOOM_128]);
|
||||
FrameBuffers[FBO_TMP_128] = generateFBO(RenderTargetTextures[RTT_TMP_128]);
|
||||
|
||||
FrameBuffers[FBO_COMBINED_TMP1_TMP2] = generateFBO(RenderTargetTextures[RTT_TMP1], DepthStencilTexture);
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, RenderTargetTextures[RTT_TMP2], 0);
|
||||
|
||||
|
||||
@@ -64,6 +64,14 @@ enum TypeRTT
|
||||
RTT_DISPLACE,
|
||||
RTT_MLAA_COLORS,
|
||||
|
||||
RTT_BLOOM_1024,
|
||||
RTT_BLOOM_512,
|
||||
RTT_TMP_512,
|
||||
RTT_BLOOM_256,
|
||||
RTT_TMP_256,
|
||||
RTT_BLOOM_128,
|
||||
RTT_TMP_128,
|
||||
|
||||
RTT_COUNT
|
||||
};
|
||||
|
||||
@@ -86,6 +94,13 @@ enum TypeFBO
|
||||
FBO_EIGHTH1,
|
||||
FBO_EIGHTH2,
|
||||
FBO_DISPLACE,
|
||||
FBO_BLOOM_1024,
|
||||
FBO_BLOOM_512,
|
||||
FBO_TMP_512,
|
||||
FBO_BLOOM_256,
|
||||
FBO_TMP_256,
|
||||
FBO_BLOOM_128,
|
||||
FBO_TMP_128,
|
||||
FBO_COUNT
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user