Beispiel #1
0
 public MyScreenShot(VRageMath.Vector2 sizeMultiplier, string path, bool ignoreSprites, bool showNotification)
 {
     IgnoreSprites    = ignoreSprites;
     Path             = path;
     SizeMultiplier   = sizeMultiplier;
     ShowNotification = showNotification;
 }
Beispiel #2
0
 public MyScreenShot(VRageMath.Vector2 sizeMultiplier, string path, bool ignoreSprites, bool showNotification)
 {
     IgnoreSprites = ignoreSprites;
     Path = path;
     SizeMultiplier = sizeMultiplier;
     ShowNotification = showNotification;
 }
Beispiel #3
0
 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)));
 }
Beispiel #5
0
 public MyScreenShot(VRageMath.Vector2 sizeMultiplier, string path, bool ignoreSprites)
 {
     IgnoreSprites = ignoreSprites;
     Path = path;
     SizeMultiplier = sizeMultiplier;
 }
Beispiel #6
0
        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);
        }