public MyScreenShot(VRageMath.Vector2 sizeMultiplier, string path, bool ignoreSprites, bool showNotification) { IgnoreSprites = ignoreSprites; Path = path; SizeMultiplier = sizeMultiplier; ShowNotification = showNotification; }
public MyScreenShot(VRageMath.Vector2 sizeMultiplier, string path, bool ignoreSprites) { IgnoreSprites = ignoreSprites; Path = path; SizeMultiplier = sizeMultiplier; }
private static Viewport ScaleViewport(Viewport viewport, VRageMath.Vector2 scale) { return(new Viewport((int)(viewport.X * scale.X), (int)(viewport.Y * scale.Y), (int)(viewport.Width * scale.X), (int)(viewport.Height * scale.Y))); }
public static void Draw(bool draw = true) { RenderTimeInMS += MyRenderConstants.RENDER_STEP_IN_MILLISECONDS; MyPerformanceCounter.PerCameraDrawWrite.Reset(); UpdateInterpolationLag(); GetRenderProfiler().StartProfilingBlock("ProcessMessages"); ProcessMessageQueue(); GetRenderProfiler().EndProfilingBlock(); if (draw) { Texture rt = null; Texture dt = null; if (m_screenshot != null) { m_renderSetup.CallerID = MyRenderCallerEnum.Main; Viewport viewport = MyRenderCamera.Viewport; m_sizeMultiplierForStrings = m_screenshot.SizeMultiplier; UpdateScreenSize(); MyEnvironmentMap.Reset(); MyRenderCamera.ChangeFov(MyRenderCamera.FieldOfView); // Refresh projection MyRenderCamera.UpdateCamera(); MyRender.SetDeviceViewport(MyRenderCamera.Viewport); CreateRenderTargets(); m_renderSetup.ShadowRenderer = MyRender.GetShadowRenderer(); //We need depth n stencil because stencil is used for drawing hud rt = new Texture(GraphicsDevice, (int)(MyRenderCamera.Viewport.Width), (int)(MyRenderCamera.Viewport.Height), 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); dt = new Texture(GraphicsDevice, (int)(MyRenderCamera.Viewport.Width), (int)(MyRenderCamera.Viewport.Height), 1, Usage.DepthStencil, Format.D24S8, Pool.Default); m_renderSetup.RenderTargets = new Texture[] { rt }; m_renderSetup.AspectRatio = MyRenderCamera.AspectRatio; m_renderSetup.ProjectionMatrix = MyRenderCamera.ProjectionMatrix; m_screenshot.DefaultSurface = rt.GetSurfaceLevel(0); m_screenshot.DefaultDepth = dt.GetSurfaceLevel(0); // To have render target with large size on device (screen.Draw calls MyCamera.EnableForward, which sets Viewport on device) SetRenderTargets(m_renderSetup.RenderTargets, dt); PushRenderSetupAndApply(m_renderSetup, ref m_backupRenderSetup); m_backupRenderSetup.Viewport = viewport; } GetRenderProfiler().StartProfilingBlock("DrawMessageQueue"); DrawMessageQueue(); GetRenderProfiler().EndProfilingBlock(); if (null != m_texturesToRender && m_texturesToRender.Count > 0) { RenderColoredTextures(); } if (m_screenshot != null) { MyRender.PopRenderSetupAndRevert(m_backupRenderSetup); MyRender.TakeScreenshot("FinalScreen", GetScreenshotTexture(), Effects.MyEffectScreenshot.ScreenshotTechniqueEnum.Color); var screen = m_screenshot; m_screenshot = null; // Need to clear before SetRenderTarget(null, null) SetRenderTarget(null, null); MyRender.Blit(GetScreenshotTexture(), true, MyEffectScreenshot.ScreenshotTechniqueEnum.Color); GetScreenshotTexture().Dispose(); screen.DefaultSurface.Dispose(); screen.DefaultDepth.Dispose(); rt.Dispose(); dt.Dispose(); MyRender.GraphicsDevice.Viewport = m_backupRenderSetup.Viewport.Value; UpdateScreenSize(); MyRender.CreateRenderTargets(); MyEnvironmentMap.Reset(); RestoreDefaultTargets(); m_sizeMultiplierForStrings = Vector2.One; } } GetRenderProfiler().StartProfilingBlock("ClearDrawMessages"); ClearDrawMessages(); GetRenderProfiler().EndProfilingBlock(); if (m_spriteBatch != null) Debug.Assert(m_spriteBatch.ScissorStack.Empty); }