//============================================================================== void Hdr::run(GlCommandBufferHandle& jobs) { ANKI_ASSERT(m_enabled); // For the passes it should be NEAREST //vblurFai.setFiltering(Texture::TFrustumType::NEAREST); // pass 0 m_vblurFb.bind(jobs, true); jobs.setViewport(0, 0, m_width, m_height); m_tonePpline.bind(jobs); if(m_parameterUpdateTimestamp > m_commonUboUpdateTimestamp) { updateDefaultBlock(jobs); m_commonUboUpdateTimestamp = getGlobTimestamp(); } m_r->getIs()._getRt().bind(jobs, 0); m_commonBuff.bindShaderBuffer(jobs, 0); m_r->drawQuad(jobs); // Blurring passes for(U32 i = 0; i < m_blurringIterationsCount; i++) { if(i == 0) { jobs.bindTextures(0, {m_hblurRt, m_vblurRt}); } // hpass m_hblurFb.bind(jobs, true); m_hblurPpline.bind(jobs); m_r->drawQuad(jobs); // vpass m_vblurFb.bind(jobs, true); m_vblurPpline.bind(jobs); m_r->drawQuad(jobs); } // For the next stage it should be LINEAR though //vblurFai.setFiltering(Texture::TFrustumType::LINEAR); }
//============================================================================== void Ssao::run(GlCommandBufferHandle& cmdb) { ANKI_ASSERT(m_enabled); const Camera& cam = m_r->getSceneGraph().getActiveCamera(); cmdb.setViewport(0, 0, m_width, m_height); // 1st pass // m_vblurFb.bind(cmdb, true); m_ssaoPpline.bind(cmdb); m_uniformsBuff.bindShaderBuffer(cmdb, 0); Array<GlTextureHandle, 3> tarr = {{ m_r->getMs()._getSmallDepthRt(), m_r->getMs()._getRt1(), m_noiseTex}}; cmdb.bindTextures(0, tarr.begin(), tarr.getSize()); // Write common block if(m_commonUboUpdateTimestamp < m_r->getProjectionParametersUpdateTimestamp() || m_commonUboUpdateTimestamp < cam.FrustumComponent::getTimestamp() || m_commonUboUpdateTimestamp == 1) { GlClientBufferHandle tmpBuff; tmpBuff.create(cmdb, sizeof(ShaderCommonUniforms), nullptr); ShaderCommonUniforms& blk = *((ShaderCommonUniforms*)tmpBuff.getBaseAddress()); blk.m_projectionParams = m_r->getProjectionParameters(); blk.m_projectionMatrix = cam.getProjectionMatrix().getTransposed(); m_uniformsBuff.write(cmdb, tmpBuff, 0, 0, tmpBuff.getSize()); m_commonUboUpdateTimestamp = getGlobTimestamp(); } // Draw m_r->drawQuad(cmdb); // Blurring passes // for(U i = 0; i < m_blurringIterationsCount; i++) { if(i == 0) { Array<GlTextureHandle, 2> tarr = {{m_hblurRt, m_vblurRt}}; cmdb.bindTextures(0, tarr.begin(), tarr.getSize()); } // hpass m_hblurFb.bind(cmdb, true); m_hblurPpline.bind(cmdb); m_r->drawQuad(cmdb); // vpass m_vblurFb.bind(cmdb, true); m_vblurPpline.bind(cmdb); m_r->drawQuad(cmdb); } }