private void downsampleSceneInto1x1pixelsBuffer() { PerformanceMonitor.startActivity("Rendering eye adaption"); materials.downSampler.enable(); FBO downSampledFBO; for (int i = 4; i >= 0; i--) { downSampledFBO = buffers.downSampledScene[i]; materials.downSampler.setFloat("size", downSampledFBO.width(), true); downSampledFBO.bind(); setViewportTo(downSampledFBO.dimensions()); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // TODO: move this block above, for consistency if (i == 4) { buffers.initialPost.bindTexture(); } else { buffers.downSampledScene[i + 1].bindTexture(); } renderFullscreenQuad(); graphicState.bindDisplay(); // TODO: probably can be removed or moved out of the loop } setViewportToWholeDisplay(); // TODO: verify this is necessary PerformanceMonitor.endActivity(); }
private void generateSkyBand(FBO skyBand) { materials.blur.enable(); materials.blur.setFloat("radius", 8.0f, true); materials.blur.setFloat2("texelSize", 1.0f / skyBand.width(), 1.0f / skyBand.height(), true); if (skyBand == buffers.sceneSkyBand0) { buffers.sceneOpaque.bindTexture(); } else { buffers.sceneSkyBand0.bindTexture(); } skyBand.bind(); graphicState.setRenderBufferMask(skyBand, true, false, false); setViewportTo(skyBand.dimensions()); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // TODO: verify this is necessary renderFullscreenQuad(); graphicState.bindDisplay(); // TODO: verify this is necessary setViewportToWholeDisplay(); // TODO: verify this is necessary }
private void generateBlur(FBO sceneBlur) { materials.blur.enable(); materials.blur.setFloat( "radius", overallBlurRadiusFactor * renderingConfig.getBlurRadius(), true); materials.blur.setFloat2( "texelSize", 1.0f / sceneBlur.width(), 1.0f / sceneBlur.height(), true); if (sceneBlur == buffers.sceneBlur0) { buffers.sceneToneMapped.bindTexture(); } else { buffers.sceneBlur0.bindTexture(); } sceneBlur.bind(); setViewportTo(sceneBlur.dimensions()); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); renderFullscreenQuad(); graphicState.bindDisplay(); setViewportToWholeDisplay(); }
private void generateBloom(FBO sceneBloom) { materials.blur.enable(); materials.blur.setFloat("radius", bloomBlurRadius, true); materials.blur.setFloat2( "texelSize", 1.0f / sceneBloom.width(), 1.0f / sceneBloom.height(), true); if (sceneBloom == buffers.sceneBloom0) { buffers.sceneHighPass.bindTexture(); } else if (sceneBloom == buffers.sceneBloom1) { buffers.sceneBloom0.bindTexture(); } else { buffers.sceneBloom1.bindTexture(); } sceneBloom.bind(); setViewportTo(sceneBloom.dimensions()); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // TODO: verify this is necessary renderFullscreenQuad(); graphicState.bindDisplay(); // TODO: verify this is necessary setViewportToWholeDisplay(); // TODO: verify this is necessary }