public void OnBeginRender() { if (_frameBuffer == null) { return; } _platform.LoadFrameBuffer(_frameBuffer); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); }
private void OnRenderSsrOut() { var ssrOutFB = _framebuffers[(int)EnumSSRFB.Out]; var ssrCausticsFB = _framebuffers[(int)EnumSSRFB.Caustics]; var ssrFB = _framebuffers[(int)EnumSSRFB.SSR]; var ssrOutShader = _shaders[(int)EnumSSRShaders.Out]; var ssrCausticsShader = _shaders[(int)EnumSSRShaders.Caustics]; if (ssrOutFB == null) { return; } if (ssrOutShader == null) { return; } GL.Disable(EnableCap.Blend); _platform.LoadFrameBuffer(ssrOutFB); GL.ClearBuffer(ClearBuffer.Color, 0, new[] { 0f, 0f, 0f, 1f }); var myUniforms = _mod.Uniforms; var uniforms = _mod.CApi.Render.ShaderUniforms; var ambient = _mod.CApi.Ambient; var shader = ssrOutShader; shader.Use(); shader.BindTexture2D("primaryScene", _platform.FrameBuffers[(int)EnumFrameBuffer.Primary].ColorTextureIds[0], 0); shader.BindTexture2D("gPosition", ssrFB.ColorTextureIds[0], 1); shader.BindTexture2D("gNormal", ssrFB.ColorTextureIds[1], 2); shader.BindTexture2D("gDepth", _platform.FrameBuffers[(int)EnumFrameBuffer.Primary].DepthTextureId, 3); shader.BindTexture2D("gTint", ssrFB.ColorTextureIds[2], 4); shader.UniformMatrix("projectionMatrix", _mod.CApi.Render.CurrentProjectionMatrix); shader.UniformMatrix("invProjectionMatrix", myUniforms.InvProjectionMatrix); shader.UniformMatrix("invModelViewMatrix", myUniforms.InvModelViewMatrix); shader.Uniform("zNear", uniforms.ZNear); shader.Uniform("zFar", uniforms.ZNear); shader.Uniform("sunPosition", _mod.CApi.World.Calendar.SunPositionNormalized); shader.Uniform("dayLight", myUniforms.DayLight); shader.Uniform("horizonFog", ambient.BlendedCloudDensity); shader.Uniform("fogDensityIn", ambient.BlendedFogDensity); shader.Uniform("fogMinIn", ambient.BlendedFogMin); shader.Uniform("rgbaFog", ambient.BlendedFogColor); _platform.RenderFullscreenTriangle(_screenQuad); shader.Stop(); _platform.CheckGlError("Error while calculating SSR"); if (_causticsEnabled && ssrCausticsFB != null && ssrCausticsShader != null) { _platform.LoadFrameBuffer(ssrCausticsFB); GL.ClearBuffer(ClearBuffer.Color, 0, new[] { 0.5f }); shader = ssrCausticsShader; shader.Use(); shader.BindTexture2D("gDepth", _platform.FrameBuffers[(int)EnumFrameBuffer.Primary].DepthTextureId, 0); shader.BindTexture2D("gNormal", ssrFB.ColorTextureIds[1], 1); shader.UniformMatrix("invProjectionMatrix", myUniforms.InvProjectionMatrix); shader.UniformMatrix("invModelViewMatrix", myUniforms.InvModelViewMatrix); shader.Uniform("dayLight", myUniforms.DayLight); shader.Uniform("playerPos", uniforms.PlayerPos); shader.Uniform("sunPosition", uniforms.SunPosition3D); shader.Uniform("waterFlowCounter", uniforms.WaterFlowCounter); if (ShaderProgramBase.shadowmapQuality > 0) { var fbShadowFar = _platform.FrameBuffers[(int)EnumFrameBuffer.ShadowmapFar]; shader.BindTexture2D("shadowMapFar", fbShadowFar.DepthTextureId, 2); shader.BindTexture2D("shadowMapNear", _platform.FrameBuffers[(int)EnumFrameBuffer.ShadowmapNear].DepthTextureId, 3); shader.Uniform("shadowMapWidthInv", 1f / fbShadowFar.Width); shader.Uniform("shadowMapHeightInv", 1f / fbShadowFar.Height); shader.Uniform("shadowRangeFar", uniforms.ShadowRangeFar); shader.Uniform("shadowRangeNear", uniforms.ShadowRangeNear); shader.UniformMatrix("toShadowMapSpaceMatrixFar", uniforms.ToShadowMapSpaceMatrixFar); shader.UniformMatrix("toShadowMapSpaceMatrixNear", uniforms.ToShadowMapSpaceMatrixNear); } shader.Uniform("fogDensityIn", ambient.BlendedFogDensity); shader.Uniform("fogMinIn", ambient.BlendedFogMin); shader.Uniform("rgbaFog", ambient.BlendedFogColor); _platform.RenderFullscreenTriangle(_screenQuad); shader.Stop(); _platform.CheckGlError("Error while calculating caustics"); } _platform.LoadFrameBuffer(EnumFrameBuffer.Primary); GL.Enable(EnableCap.Blend); }