| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- #include "anki/renderer/Pps.h"
- #include "anki/renderer/Renderer.h"
- #include "anki/renderer/Hdr.h"
- #include "anki/renderer/Ssao.h"
- #include "anki/renderer/RendererInitializer.h"
- namespace anki {
- //==============================================================================
- // Constructor =
- //==============================================================================
- Pps::Pps(Renderer& r_)
- : RenderingPass(r_),
- hdr(r_),
- ssao(r_),
- bl(r_)
- {}
- //==============================================================================
- // Destructor =
- //==============================================================================
- Pps::~Pps()
- {}
- //==============================================================================
- // init =
- //==============================================================================
- void Pps::init(const RendererInitializer& initializer)
- {
- ssao.init(initializer);
- hdr.init(initializer);
- //
- // Init pre pass
- //
- // FBO
- try
- {
- prePassFbo.create();
- prePassFbo.bind();
- prePassFbo.setNumOfColorAttachements(1);
- Renderer::createFai(r.getWidth(), r.getHeight(), GL_RGB, GL_RGB,
- GL_FLOAT, prePassFai);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, prePassFai.getGlId(), 0);
- prePassFbo.checkIfGood();
- prePassFbo.unbind();
- }
- catch(std::exception& e)
- {
- throw ANKI_EXCEPTION_R("Cannot create pre-pass "
- "post-processing stage FBO", e);
- }
- // SProg
- std::string pps = "";
- if(ssao.getEnabled())
- {
- pps += "#define SSAO_ENABLED\n";
- }
- prePassSProg.load(ShaderProgram::createSrcCodeToCache(
- "shaders/PpsPrePass.glsl", pps.c_str()).c_str());
- //
- // Init post pass
- //
- // FBO
- try
- {
- postPassFbo.create();
- postPassFbo.bind();
- postPassFbo.setNumOfColorAttachements(1);
- Renderer::createFai(r.getWidth(), r.getHeight(), GL_RGB, GL_RGB,
- GL_FLOAT, postPassFai);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, postPassFai.getGlId(), 0);
- postPassFbo.checkIfGood();
- postPassFbo.unbind();
- }
- catch(std::exception& e)
- {
- throw ANKI_EXCEPTION_R("Cannot create post-pass "
- "post-processing stage FBO", e);
- }
- // SProg
- pps = "";
- if(hdr.getEnabled())
- {
- pps += "#define HDR_ENABLED\n";
- }
- postPassSProg.load(ShaderProgram::createSrcCodeToCache(
- "shaders/PpsPostPass.glsl", pps.c_str()).c_str());
- //
- // Init Bl after
- //
- bl.init(initializer);
- }
- //==============================================================================
- // runPrePass =
- //==============================================================================
- void Pps::runPrePass()
- {
- if(ssao.getEnabled())
- {
- ssao.run();
- }
- prePassFbo.bind();
- GlStateMachineSingleton::get().enable(GL_DEPTH_TEST, false);
- GlStateMachineSingleton::get().enable(GL_BLEND, false);
- GlStateMachineSingleton::get().setViewport(0, 0,
- r.getWidth(), r.getHeight());
- prePassSProg->bind();
- prePassSProg->getUniformVariableByName("isFai").set(r.getIs().getFai(), 0);
- if(ssao.getEnabled())
- {
- prePassSProg->getUniformVariableByName("ppsSsaoFai").set(
- ssao.getFai(), 1);
- }
- r.drawQuad();
- }
- //==============================================================================
- // runPostPass =
- //==============================================================================
- void Pps::runPostPass()
- {
- //
- // The actual pass
- //
- if(hdr.getEnabled())
- {
- hdr.run();
- }
- postPassFbo.bind();
- GlStateMachineSingleton::get().enable(GL_DEPTH_TEST, false);
- GlStateMachineSingleton::get().enable(GL_BLEND, false);
- GlStateMachineSingleton::get().setViewport(0, 0,
- r.getWidth(), r.getHeight());
- postPassSProg->bind();
- postPassSProg->getUniformVariableByName("ppsPrePassFai").set(
- prePassFai, 0);
- if(hdr.getEnabled())
- {
- postPassSProg->getUniformVariableByName("ppsHdrFai").set(
- hdr.getFai(), 1);
- }
- r.drawQuad();
- //
- // Blurring
- //
- bl.run();
- }
- } // end namespace
|