GLUSboolean update(GLUSfloat time) { m_scale += 0.05f; renderGeometryPass(); /* Render the scene again to populate the depth buffer. * Can optimized because the value of depths are already * written in the gbuffer fbo */ renderDepthPass(); beginLightPasses(); renderDirectionalLightPass(); renderPointLights(); return GLUS_TRUE; }
void Game::renderPass() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_pLightingEffect->enable(); renderPointLights(); renderSpotLights(); renderLightEffects(); m_pPipe->setCamera(m_pGameCamera->GetPos(), m_pGameCamera->GetTarget(), m_pGameCamera->GetUp()); m_pObjects->render(m_pPipe, * m_pLightingEffect); //renderHeightmap(); renderSkybox(); }
void IrrDriver::renderLights(unsigned pointlightcount, bool hasShadow) { //RH if (UserConfigParams::m_gi && UserConfigParams::m_shadows && hasShadow) { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_RH)); glDisable(GL_BLEND); m_rtts->getRH().Bind(); glBindVertexArray(SharedObject::FullScreenQuadVAO); if (irr_driver->needRHWorkaround()) { glUseProgram(FullScreenShader::NVWorkaroundRadianceHintsConstructionShader::getInstance()->Program); FullScreenShader::NVWorkaroundRadianceHintsConstructionShader::getInstance()->SetTextureUnits( m_rtts->getRSM().getRTT()[0], m_rtts->getRSM().getRTT()[1], m_rtts->getRSM().getDepthTexture()); for (unsigned i = 0; i < 32; i++) { FullScreenShader::NVWorkaroundRadianceHintsConstructionShader::getInstance()->setUniforms(rsm_matrix, rh_matrix, rh_extend, i, irr_driver->getSunColor()); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } } else { glUseProgram(FullScreenShader::RadianceHintsConstructionShader::getInstance()->Program); FullScreenShader::RadianceHintsConstructionShader::getInstance()->SetTextureUnits( m_rtts->getRSM().getRTT()[0], m_rtts->getRSM().getRTT()[1], m_rtts->getRSM().getDepthTexture() ); FullScreenShader::RadianceHintsConstructionShader::getInstance()->setUniforms(rsm_matrix, rh_matrix, rh_extend, irr_driver->getSunColor()); glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, 32); } } for (unsigned i = 0; i < sun_ortho_matrix.size(); i++) sun_ortho_matrix[i] *= getInvViewMatrix(); m_rtts->getFBO(FBO_COMBINED_DIFFUSE_SPECULAR).Bind(); glClear(GL_COLOR_BUFFER_BIT); m_rtts->getFBO(FBO_DIFFUSE).Bind(); if (irr_driver->usesGI() && hasShadow) { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_GI)); m_post_processing->renderGI(rh_matrix, rh_extend, m_rtts->getRH().getRTT()[0], m_rtts->getRH().getRTT()[1], m_rtts->getRH().getRTT()[2]); } m_rtts->getFBO(FBO_COMBINED_DIFFUSE_SPECULAR).Bind(); { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_ENVMAP)); m_post_processing->renderEnvMap(blueSHCoeff, greenSHCoeff, redSHCoeff, SkyboxSpecularProbe); } // Render sunlight if and only if track supports shadow if (!World::getWorld() || World::getWorld()->getTrack()->hasShadows()) { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_SUN)); if (World::getWorld() && irr_driver->usesShadows() && hasShadow) m_post_processing->renderShadowedSunlight(irr_driver->getSunDirection(), irr_driver->getSunColor(), sun_ortho_matrix, m_rtts->getShadowFBO().getRTT()[0]); else m_post_processing->renderSunlight(irr_driver->getSunDirection(), irr_driver->getSunColor()); } { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_POINTLIGHTS)); renderPointLights(MIN2(pointlightcount, MAXLIGHT)); } }