//------------------------------------------------------ // Auto Focus //------------------------------------------------------ private void autoFocus(Texture depth_texture) { _pAutoFocus.bind(); _ssboAutoFocus.bind(0); depth_texture.bind(_pAutoFocus.getSamplerUniform(0), 0); GL.DispatchCompute(1, 1, 1); GL.MemoryBarrier(MemoryBarrierFlags.ShaderStorageBarrierBit); }
protected override void load_Buffers() { _ssboExposure = new ShaderStorageBuffer(new EngineHelper.size[] { EngineHelper.size.vec2 }); _ssboExposure.bind(); Vector2 default_luminosity = new Vector2(1000.0f, 0.0f); GL.BufferData(BufferTarget.ShaderStorageBuffer, (int)EngineHelper.size.vec2, ref default_luminosity, BufferUsageHint.DynamicCopy); _ssboExposure.unbind(); _tLuminosity = new Texture(TextureTarget.Texture2D, _resolution.W, _resolution.H, 0, true, false, PixelInternalFormat.R16f, PixelFormat.Red, PixelType.Float, TextureMinFilter.LinearMipmapLinear, TextureMagFilter.Linear, TextureWrapMode.Clamp); _tLuminosity.load(); _tTempScene = new Texture(TextureTarget.Texture2D, _resolution.W, _resolution.H, 0, false, false, PixelInternalFormat.Rgba16f, PixelFormat.Rgba, PixelType.Float, TextureMinFilter.Linear, TextureMagFilter.Linear, TextureWrapMode.Clamp); _tTempScene.load(); }
private void autoExposure() { _pAutoExposure.bind(); // Pass lowest LOD based on log2(max(dimension)) GL.Uniform1(_pAutoExposure.getUniform("luminosity_lod"), _tLuminosity.getMaxMipMap()); // Bind SSBO for storing luminosity _ssboExposure.bind(0); // Bind Scene Texture _tLuminosity.bind(_pAutoExposure.getSamplerUniform(0), 0); GL.DispatchCompute(1, 1, 1); GL.MemoryBarrier(MemoryBarrierFlags.ShaderStorageBarrierBit); _ssboExposure.unbind(); }