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);