public ForwardPipeline(MasterRenderer renderer)
            : base(renderer)
        {
            GLError.Begin();

            forwardShader        = new WorldShader();
            shadowShader         = new ShadowShader();
            shadowMap            = new ShadowMap(GFXSettings.ShadowResolution, GFXSettings.ShadowResolution);
            shadowCamera         = new ShadowCamera();
            ppBuffer             = new PostProcessBuffer(ScreenWidth, ScreenHeight);
            ppShader             = new PostProcessShader();
            skyRenderTarg        = new TexRenderTarget(ScreenWidth, ScreenHeight);
            screenshotRenderTarg = new TexRenderTarget(1, 1);

            screenshotRenderTarg.Bind();
            GL.ReadBuffer(ReadBufferMode.ColorAttachment0);
            screenshotRenderTarg.Unbind();

            ErrorCode err = GLError.End();

            if (err != ErrorCode.NoError)
            {
                throw new Exception(string.Format("Failed to initialize forward pipeline. OpenGL Error: {0}", err));
            }
        }
Пример #2
0
        public void DebugRenderShadowMap(ShadowMap shadowMap)
        {
            PrepareRender(depthDebugShader);

            depthDebugShader.LoadBool("linearize", false);
            //depthDebugShader.LoadFloat("nearPlane", 10);
            //depthDebugShader.LoadFloat("farPlane", 4000);

            // Bind the FBO texture
            GL.ActiveTexture(TextureUnit.Texture0);
            shadowMap.BindTex();
            // Set transformation matrix
            depthDebugShader.LoadMatrix4("transformationMatrix",
                                         Maths.CreateTransformationMatrix(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f)));
            // Draw
            GL.DrawArrays(BeginMode.TriangleStrip, 0, 4);

            // Ubind the FBO texture
            GL.BindTexture(TextureTarget.Texture2D, 0);
            EndRender(depthDebugShader);
        }