// 描画. void UpscaleGeometryRenderingApp::RenderInternal(izanagi::graph::CGraphicsDevice* device) { if (m_enableUpscale) { renderColorPass(device); renderGeometryPass(device); renderFinalPass(device); device->SetTexture(0, IZ_NULL); m_gbuffer.drawBuffers(device); } else { const auto& camera = GetCamera(); const auto& mtxW2C = camera.GetParam().mtxW2C; auto* shd = m_shdColorPass.m_program; device->SetShaderProgram(shd); auto hW2C = shd->GetHandleByName("mtxW2C"); shd->SetMatrix(device, hW2C, mtxW2C); m_scene.render(device, shd); } }
void Renderer::render() { for(auto cameraIter = activeCameras.begin(); cameraIter < activeCameras.end(); cameraIter++){ (*cameraIter)->update(); // Geometry pass renderGeometryPass( **cameraIter ); // light pass renderLightPass( **cameraIter ); } }
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 SceneRenderer::render(const Camera *camera) { assert(camera); renderGeometryPass(camera); // bind the geometry buffer textures for (unsigned int i = 0; i < 3; ++i) { glActiveTexture(GL_TEXTURE0 + i); glBindTexture(GL_TEXTURE_2D, gBuffer->getTexture(i)); } renderAmbientOcclusionPass(); renderLightingPass(camera); // unbind the geometry buffer textures for (unsigned int i = 0; i < 3; ++i) { glActiveTexture(GL_TEXTURE0 + i); glBindTexture(GL_TEXTURE_2D, 0); } renderBlurPass(); }