public void Render(float deltaTime)
        {
            if (screenshotRequest != null)
            {
                activePipeline.TakeScreenshot(screenshotRequest);
            }

            activePipeline.Render(deltaTime);

            if (screenshotRequest != null)
            {
                OnResize(lastScreenWidth, lastScreenHeight);
                screenshotRequest = null;
            }

            Camera.Active.Update(deltaTime);
        }
 public override void TakeScreenshot(ScreenshotRequest request)
 {
     screenshotRequest = request;
     screenshotRenderTarg.Resize(request.RenderWidth, request.RenderHeight);
 }
        public override void Render(float deltaTime)
        {
            TryBindScreenshotTarg();
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            if (IsRenderingEnabled(RendererFlags.Objects))
            {
                if (GFXSettings.RenderShadows)
                {
                    RenderShadowMap();
                    TryBindScreenshotTarg();
                }

                if (IsRenderingEnabled(RendererFlags.Sky))
                {
                    // Render the skybox
                    if (Renderer.FogEnabled && GFXSettings.FogQuality == FogQuality.High)
                    {
                        skyRenderTarg.Bind();

                        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
                        Renderer.Sky.Render(deltaTime, false);

                        skyRenderTarg.Unbind();
                    }
                }

                if (GFXSettings.EnablePostProcessing)
                {
                    ppBuffer.Bind();
                    GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
                }

                if (IsRenderingEnabled(RendererFlags.Sky))
                {
                    Renderer.Sky.Render(deltaTime, true);
                }

                RenderObjects();

                if (GFXSettings.EnablePostProcessing)
                {
                    ppBuffer.Unbind();
                    TryBindScreenshotTarg();
                }

                // Tell the renderers to clear their batches
                foreach (Renderer3D renderer in Renderer.Renderer3Ds.Values)
                {
                    renderer.ClearBatch();
                }

                if (GFXSettings.EnablePostProcessing)
                {
                    Renderer.Gui.PrepareRender(ppShader);

                    GL.ActiveTexture(TextureUnit.Texture0);
                    ppBuffer.ColorTexture.Bind();

                    ppShader.LoadVector2("resolution", new Vector2(ScreenWidth, ScreenHeight));
                    ppShader.LoadMatrix4("transformationMatrix", Matrix4.Identity);
                    ppShader.LoadBool("apply_fxaa", GFXSettings.ApplyFXAA);

                    // Draw Post Process
                    GL.DrawArrays(BeginMode.TriangleStrip, 0, 4);

                    ppBuffer.ColorTexture.Unbind();
                    Renderer.Gui.EndRender(ppShader);
                }
            }

            if (IsRenderingEnabled(RendererFlags.Gui2D))
            {
                StateManager.Enable(EnableCap.Blend);
                GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

                if (Renderer.DebugRenderShadowMap)
                {
                    Renderer.Gui.DebugRenderShadowMap(shadowMap);
                }

                StateManager.Disable(EnableCap.DepthTest);

                // Draw 2D UI
                foreach (Renderer2D renderer in Renderer.Renderer2Ds.Values)
                {
                    renderer.Prepare();
                    renderer.Render();
                }
            }

            if (screenshotRequest != null)
            {
                SaveCurrentBufferAsScreenshot();
                screenshotRenderTarg.Unbind();
                screenshotRequest = null;
            }
        }
 public abstract void TakeScreenshot(ScreenshotRequest request);