|
|
@@ -102,6 +102,55 @@ void Pps::init(const RendererInitializer& initializer)
|
|
|
|
|
|
initPrePassSProg();
|
|
|
initPostPassSProg();
|
|
|
+
|
|
|
+
|
|
|
+ hBlurSProg.loadRsrc(ShaderProg::createSrcCodeToCache("shaders/PpsBlurGeneric.glsl", "#define HPASS\n",
|
|
|
+ "h").c_str());
|
|
|
+ vBlurSProg.loadRsrc(ShaderProg::createSrcCodeToCache("shaders/PpsBlurGeneric.glsl", "#define VPASS\n",
|
|
|
+ "v").c_str());
|
|
|
+
|
|
|
+ Renderer::createFai(r.getWidth(), r.getHeight(), GL_RGB, GL_RGB, GL_FLOAT, blurFai);
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ hBlurFbo.create();
|
|
|
+ hBlurFbo.bind();
|
|
|
+ hBlurFbo.setNumOfColorAttachements(1);
|
|
|
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, blurFai.getGlId(), 0);
|
|
|
+ }
|
|
|
+ catch(std::exception& e)
|
|
|
+ {
|
|
|
+ throw EXCEPTION("Cannot create h blur post-processing stage FBO: " + e.what());
|
|
|
+ }
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ vBlurFbo.create();
|
|
|
+ vBlurFbo.bind();
|
|
|
+ vBlurFbo.setNumOfColorAttachements(1);
|
|
|
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, postPassFai.getGlId(), 0);
|
|
|
+ }
|
|
|
+ catch(std::exception& e)
|
|
|
+ {
|
|
|
+ throw EXCEPTION("Cannot create v blur post-processing stage FBO: " + e.what());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ sideBlurFbo.create();
|
|
|
+ sideBlurFbo.bind();
|
|
|
+ sideBlurFbo.setNumOfColorAttachements(1);
|
|
|
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, r.getMs().getNormalFai().getGlId(), 0);
|
|
|
+ }
|
|
|
+ catch(std::exception& e)
|
|
|
+ {
|
|
|
+ throw EXCEPTION("Cannot create side blur post-processing stage FBO: " + e.what());
|
|
|
+ }
|
|
|
+
|
|
|
+ sideBlur.loadRsrc("engine-rsrc/side-blur.png");
|
|
|
+
|
|
|
+ sideBlurSProg.loadRsrc("shaders/PpsSideBlur.glsl");
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -135,6 +184,40 @@ void Pps::runPrePass()
|
|
|
}
|
|
|
|
|
|
|
|
|
+//======================================================================================================================
|
|
|
+// runBlur =
|
|
|
+//======================================================================================================================
|
|
|
+void Pps::runBlur()
|
|
|
+{
|
|
|
+ GlStateMachineSingleton::getInstance().setBlendingEnabled(false);
|
|
|
+ uint blurringIterationsNum = 1;
|
|
|
+ for(uint i = 0; i < blurringIterationsNum; i++)
|
|
|
+ {
|
|
|
+ // hpass
|
|
|
+ hBlurFbo.bind();
|
|
|
+
|
|
|
+ hBlurSProg->bind();
|
|
|
+ hBlurSProg->findUniVar("img")->set(postPassFai, 0);
|
|
|
+ hBlurSProg->findUniVar("msNormalFai")->set(r.getMs().getNormalFai(), 1);
|
|
|
+ float tmp = r.getWidth();
|
|
|
+ hBlurSProg->findUniVar("imgDimension")->set(&tmp);
|
|
|
+
|
|
|
+ r.drawQuad();
|
|
|
+
|
|
|
+ // vpass
|
|
|
+ vBlurFbo.bind();
|
|
|
+
|
|
|
+ vBlurSProg->bind();
|
|
|
+ vBlurSProg->findUniVar("img")->set(blurFai, 0);
|
|
|
+ vBlurSProg->findUniVar("msNormalFai")->set(r.getMs().getNormalFai(), 1);
|
|
|
+ tmp = r.getHeight();
|
|
|
+ vBlurSProg->findUniVar("imgDimension")->set(&tmp);
|
|
|
+
|
|
|
+ r.drawQuad();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
//======================================================================================================================
|
|
|
// runPostPass =
|
|
|
//======================================================================================================================
|
|
|
@@ -161,5 +244,17 @@ void Pps::runPostPass()
|
|
|
|
|
|
r.drawQuad();
|
|
|
|
|
|
- //Fbo::unbind();
|
|
|
+ //
|
|
|
+ // todo
|
|
|
+ //
|
|
|
+ sideBlurFbo.bind();
|
|
|
+ sideBlurSProg->bind();
|
|
|
+ sideBlurSProg->findUniVar("tex")->set(*sideBlur, 0);
|
|
|
+ GlStateMachineSingleton::getInstance().setBlendingEnabled(true);
|
|
|
+ glBlendFunc(GL_ONE, GL_ONE);
|
|
|
+ r.drawQuad();
|
|
|
+
|
|
|
+
|
|
|
+ runBlur();
|
|
|
+
|
|
|
}
|