Ejemplo n.º 1
0
        internal static void ReleaseScreenResources()
        {
            if (m_fullResViewDepthTarget != null)
            {
                MyRwTextureManager rwManager = MyManagers.RwTextures;
                rwManager.DisposeTex(ref m_fullResViewDepthTarget);
                rwManager.DisposeTex(ref m_fullResNormalTexture);
                rwManager.DisposeTex(ref m_fullResAOZTexture);
                rwManager.DisposeTex(ref m_fullResAOZTexture2);

                MyArrayTextureManager arrayManager = MyManagers.ArrayTextures;
                arrayManager.DisposeTex(ref m_quarterResViewDepthTextureArray);
                arrayManager.DisposeTex(ref m_quarterResAOTextureArray);
            }
        }
Ejemplo n.º 2
0
        internal static void RemoveScreenResources()
        {
            MyRwTextureManager texManager = MyManagers.RwTextures;

            MyManagers.GlobalResources.Destroy();

            if (m_lastScreenDataResource != null && m_lastScreenDataResource != Backbuffer)
            {
                m_lastScreenDataResource.Release();
                m_lastScreenDataResource = null;
            }

            if (m_lastDataStream != null)
            {
                m_lastDataStream.Dispose();
                m_lastDataStream = null;
            }
        }
Ejemplo n.º 3
0
        internal static void CreateScreenResources()
        {
            var width   = m_resolution.X;
            var height  = m_resolution.Y;
            var samples = RenderSettings.AntialiasingMode.SamplesCount();

            MyUtils.Init(ref MyGBuffer.Main);
            MyGBuffer.Main.Resize(width, height, samples, 0);

            MyScreenDependants.Resize(width, height, samples, 0);

            RemoveScreenResources();

            MyRwTextureManager texManager = MyManagers.RwTextures;

            MyManagers.GlobalResources.Create();

            MyHBAO.InitScreenResources();
        }
Ejemplo n.º 4
0
        internal static void InitScreenResources()
        {
            MyRwTextureManager rwManager = MyManagers.RwTextures;

            m_fullResViewDepthTarget = rwManager.CreateRtv("MyHBAO.FullResViewDepthTarget", MyRender11.m_resolution.X, MyRender11.m_resolution.Y,
                                                           SharpDX.DXGI.Format.R32_Float, 1, 0);
            m_fullResNormalTexture = rwManager.CreateRtv("MyHBAO.FullResNormalTexture", MyRender11.m_resolution.X, MyRender11.m_resolution.Y,
                                                         SharpDX.DXGI.Format.R8G8B8A8_UNorm, 1, 0);
            m_fullResAOZTexture = rwManager.CreateRtv("MyHBAO.FullResAOZTexture", MyRender11.m_resolution.X, MyRender11.m_resolution.Y,
                                                      SharpDX.DXGI.Format.R16G16_Float, 1, 0);
            m_fullResAOZTexture2 = rwManager.CreateRtv("MyHBAO.FullResAOZTexture2", MyRender11.m_resolution.X, MyRender11.m_resolution.Y,
                                                       SharpDX.DXGI.Format.R16G16_Float, 1, 0);

            MyArrayTextureManager arrayManager = MyManagers.ArrayTextures;

            m_quarterResViewDepthTextureArray = arrayManager.CreateRtvArray("MyHBAO.QuarterResViewDepthTextureArray",
                                                                            DivUp(MyRender11.m_resolution.X, 4), DivUp(MyRender11.m_resolution.Y, 4), NUM_SLICES, SharpDX.DXGI.Format.R16_Float);
            m_quarterResAOTextureArray = arrayManager.CreateRtvArray("MyHBAO.QuarterResAOTextureArray",
                                                                     DivUp(MyRender11.m_resolution.X, 4), DivUp(MyRender11.m_resolution.Y, 4), NUM_SLICES, SharpDX.DXGI.Format.R8_UNorm);
        }
        private static void TakeCustomSizedScreenshot(Vector2 rescale)
        {
            IRtvTexture m_finalImage;

            var resCpy = m_resolution;

            m_resolution = new Vector2I(resCpy * rescale);
            CreateScreenResources();

            m_finalImage         = DrawGameScene(null);
            m_resetEyeAdaptation = true;

            MyRwTextureManager texManager = MyManagers.RwTextures;
            var surface = texManager.CreateRtv("MyRender11.TakeCustomSizedScreenshot",
                                               m_finalImage.Size.X, m_finalImage.Size.Y, SharpDX.DXGI.Format.R8G8B8A8_UNorm_SRgb, 1, 0);

            MyCopyToRT.Run(surface, m_finalImage);
            MyCopyToRT.ClearAlpha(surface);
            SaveScreenshotFromResource(surface.Resource);
            texManager.DisposeTex(ref surface);

            m_resolution = resCpy;
            CreateScreenResources();
        }
Ejemplo n.º 6
0
        internal static void RenderColoredTextures(List <renderColoredTextureProperties> texturesToRender)
        {
            if (texturesToRender.Count == 0)
            {
                return;
            }

            if (!m_initialized)
            {
                Init();
            }

            const int RENDER_TEXTURE_RESOLUTION = 512;

            RC.SetBlendState(null);
            RC.SetInputLayout(null);

            RC.PixelShader.Set(m_ps);
            RC.AllShaderStages.SetConstantBuffer(MyCommon.FRAME_SLOT, MyCommon.FrameConstants);
            RC.AllShaderStages.SetConstantBuffer(1, m_cb);

            Dictionary <Vector2I, IRtvTexture> createdRenderTextureTargets = new Dictionary <Vector2I, IRtvTexture>();

            MyRwTextureManager   rwTexManager   = MyManagers.RwTextures;
            MyFileTextureManager fileTexManager = MyManagers.FileTextures;

            foreach (var texture in texturesToRender)
            {
                ISrvBindable tex = fileTexManager.GetTexture(texture.TextureName, MyFileTextureEnum.COLOR_METAL, true);
                if (tex == null)
                {
                    continue;
                }

                Vector2  texSize = tex.Size;
                Vector2I renderTargetResolution = new Vector2I(RENDER_TEXTURE_RESOLUTION, RENDER_TEXTURE_RESOLUTION);
                if (texSize.Y > 0)
                {
                    if (texSize.Y < RENDER_TEXTURE_RESOLUTION)
                    {
                        renderTargetResolution.X = (int)texSize.X;
                        renderTargetResolution.Y = (int)texSize.Y;
                    }
                    else
                    {
                        renderTargetResolution.X *= (int)(texSize.X / texSize.Y);
                    }
                }

                MyViewport viewport = new MyViewport(renderTargetResolution.X, renderTargetResolution.Y);

                IRtvTexture renderTexture = null;
                if (!createdRenderTextureTargets.TryGetValue(renderTargetResolution, out renderTexture))
                {
                    renderTexture = rwTexManager.CreateRtv("MySaveExportedTextures.RenderColoredTextures",
                                                           renderTargetResolution.X, renderTargetResolution.Y, SharpDX.DXGI.Format.R8G8B8A8_UNorm_SRgb, 1, 0);
                    createdRenderTextureTargets[renderTargetResolution] = renderTexture;
                }

                RC.SetRtv(renderTexture);

                // Set color
                var     mapping = MyMapping.MapDiscard(m_cb);
                Vector4 color   = new Vector4(texture.ColorMaskHSV, 1);
                mapping.WriteAndPosition(ref color);
                mapping.Unmap();

                // Set texture
                RC.PixelShader.SetSrv(0, tex);

                // Draw
                MyScreenPass.DrawFullscreenQuad(viewport);

                // Save to file
                MyTextureData.ToFile(renderTexture.Resource, texture.PathToSave, ImageFileFormat.Png);
            }

            texturesToRender.Clear();

            foreach (var tex in createdRenderTextureTargets)
            {
                IRtvTexture _tex = tex.Value;
                rwTexManager.DisposeTex(ref _tex);
            }
            createdRenderTextureTargets.Clear();

            RC.SetRtv(null);
            RC.PixelShader.SetSrvs(0, MyGBuffer.Main);
        }