Пример #1
0
        public static void DrawRenderTargetContent(RenderTargetInstance contentSource, RenderTargetInstance target, Texture2D previousContent, byte?opacity)
        {
            // End the sprite batch if needed
            if (DrawingLayerTypeInUse != null)
            {
                _spriteBatch.End();
                DrawingLayerTypeInUse = null;
            }
            Color color = Color.White;

            if (opacity.HasValue)
            {
                color.A = opacity.Value;
            }
            DrawingManager.RenderTargetManager.SwitchTo(target);
            GraphicsDevice.Clear(new Color(0, 0, 0, 0));
            Texture2D renderTexture = _renderTargetManager.GetRenderTarget2D(contentSource);

            _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.NonPremultiplied);
            if (previousContent != null)
            {
                //DrawingManager.RenderTargetManager.SaveTexture(RenderTargetInstance.OwnLayerRendering, "E:/own.png");
                _spriteBatch.Draw(previousContent, Vector2.Zero, Color.White);
            }
            _spriteBatch.Draw(renderTexture, Vector2.Zero, color);
            _spriteBatch.End();
        }
Пример #2
0
        public void SaveTexture(RenderTargetInstance renderTarget, String filePath)
        {
            Texture2D bufferTexture = GetRenderTarget2D(renderTarget);

            using (System.IO.Stream stream = System.IO.File.OpenWrite(filePath))
            {
                bufferTexture.SaveAsPng(stream, bufferTexture.Width, bufferTexture.Height);
            }
        }
Пример #3
0
 public Texture2D GetTexture(RenderTargetInstance renderTarget)
 {
     if (renderTarget == RenderTargetInstance.A)
     {
         return(_resolveTextureA);
     }
     else if (renderTarget == RenderTargetInstance.B)
     {
         return(_resolveTextureB);
     }
     else
     {
         return((Texture2D)_backbufferTexture);
     }
 }
Пример #4
0
 public void SwitchTo(RenderTargetInstance renderTarget)
 {
     if (renderTarget == RenderTargetInstance.A)
     {
         _graphicsDevice.SetRenderTarget(_renderTargetA);
     }
     else if (renderTarget == RenderTargetInstance.B)
     {
         _graphicsDevice.SetRenderTarget(_renderTargetB);
     }
     else
     {
         _graphicsDevice.SetRenderTarget(_backbuffer);
     }
 }
Пример #5
0
 public Texture2D GetTexture(RenderTargetInstance renderTarget)
 {
     if (renderTarget == RenderTargetInstance.A)
     {
         return(_renderTargetA);
     }
     else if (renderTarget == RenderTargetInstance.B)
     {
         return(_renderTargetB);
     }
     else
     {
         return(_backbuffer);
     }
 }
Пример #6
0
        public static void LoadContent(GraphicsDevice graphicsDevice)
        {
            _graphicsDevice = graphicsDevice;
            _viewPortSize   = new Point(_graphicsDevice.Viewport.Width, _graphicsDevice.Viewport.Height);
            _spriteBatch    = new SpriteBatch(graphicsDevice);
                        #if !REACH
            _primitiveBatch = new PrimitiveBatch(graphicsDevice);

            _pixelTexture = new Texture2D(graphicsDevice, 1, 1, false, SurfaceFormat.Color);
            Color[] pixelColor = new Color[1];
            pixelColor[0] = Color.White;
            _pixelTexture.SetData <Color>(pixelColor);
            _renderTargetManager = new RenderTargetManager(graphicsDevice);
            CurrentRenderTarget  = RenderTargetInstance.BackBuffer;
            _renderTargetManager.LoadContent();
            #else
            _pixelTexture = Texture2D.FromFile(DrawingManager.GraphicsDevice, "Content/pixel.png");
            #endif
            LoadEmbeddedIceEffects();
        }
Пример #7
0
        public RenderTarget2D GetRenderTarget2D(RenderTargetInstance renderTarget)
        {
            switch (renderTarget)
            {
            case RenderTargetInstance.SceneRendering:
                return(_renderTargetSceneRendering);

            case RenderTargetInstance.OwnLayerRendering:
                return(_renderTargetOwnLayerRendering);

            case RenderTargetInstance.EffectA:
                return(_renderTargetB);

            case RenderTargetInstance.EffectB:
                return(_renderTargetC);

            default:
                return(null);
            }
        }
Пример #8
0
 public void ResolveToTexture(RenderTargetInstance renderTarget)
 {
     if (_backbufferTexture != null && (_backbufferTexture.Width !=
                                        GraphicsDevice.PresentationParameters.BackBufferWidth ||
                                        _backbufferTexture.Height != GraphicsDevice.PresentationParameters.BackBufferHeight))
     {
         UnloadContent();
         LoadContent();
     }
     if (renderTarget == RenderTargetInstance.A)
     {
         _resolveTextureA = _renderTargetA.GetTexture();
     }
     else if (renderTarget == RenderTargetInstance.B)
     {
         _resolveTextureB = _renderTargetB.GetTexture();
     }
     else
     {
         _graphicsDevice.ResolveBackBuffer(_backbufferTexture);
     }
 }
Пример #9
0
 public void SwitchTo(RenderTargetInstance renderTarget)
 {
     RenderTarget2D rt = GetRenderTarget2D(renderTarget);
     _graphicsDevice.SetRenderTarget(rt);
 }
Пример #10
0
 public RenderTarget2D GetRenderTarget2D(RenderTargetInstance renderTarget)
 {
     switch (renderTarget)
     {
         case RenderTargetInstance.SceneRendering:
             return _renderTargetSceneRendering;
         case RenderTargetInstance.OwnLayerRendering:
             return _renderTargetOwnLayerRendering;
         case RenderTargetInstance.EffectA:
             return _renderTargetB;
         case RenderTargetInstance.EffectB:
             return _renderTargetC;
         default:
             return null;
     }
 }
Пример #11
0
        public void SwitchTo(RenderTargetInstance renderTarget)
        {
            RenderTarget2D rt = GetRenderTarget2D(renderTarget);

            _graphicsDevice.SetRenderTarget(rt);
        }
Пример #12
0
        public static void LoadContent(GraphicsDevice graphicsDevice)
        {
            _graphicsDevice = graphicsDevice;
            _viewPortSize = new Point(_graphicsDevice.Viewport.Width, _graphicsDevice.Viewport.Height);
            _spriteBatch = new SpriteBatch(graphicsDevice);
			#if !REACH
            _primitiveBatch = new PrimitiveBatch(graphicsDevice);  
            
            _pixelTexture = new Texture2D(graphicsDevice, 1, 1, false, SurfaceFormat.Color);
            Color[] pixelColor = new Color[1];
            pixelColor[0] = Color.White;
            _pixelTexture.SetData<Color>(pixelColor);
			_renderTargetManager = new RenderTargetManager(graphicsDevice);
            CurrentRenderTarget = RenderTargetInstance.BackBuffer;
            _renderTargetManager.LoadContent();
            #else
			_pixelTexture = Texture2D.FromFile(DrawingManager.GraphicsDevice, "Content/pixel.png");
            #endif
            LoadEmbeddedIceEffects();            
        }
Пример #13
0
        /// <summary>
        /// Call this method to render all the layers of the scene
        /// </summary>
        public static void RenderScene()
        {
            if (_isRendering == true)
            {
                throw new Exception("RenderScene was previously called but not ended with EndRendering()");
            }            
            _isRendering = true;            

            // Reset the value of the last layer in use
            DrawingLayerTypeInUse = null;
            // Ensure the rendertargets are of correct size
            PresentationParameters pp = _graphicsDevice.PresentationParameters;
			#if !REACH
            _renderTargetManager.BackbufferResized(pp.BackBufferWidth, pp.BackBufferHeight);
            CurrentRenderTarget = RenderTargetInstance.BackBuffer;
            if (_drawOnRenderTarget == true)
            {
                _renderTargetManager.SwitchTo(RenderTargetInstance.SceneRendering);
                CurrentRenderTarget = RenderTargetInstance.SceneRendering;
            }
			#endif
            for (int c = 0; c < SceneManager.ActiveScene.ActiveCameras.Count; c++)
            {
                Camera camera = SceneManager.ActiveScene.ActiveCameras[c];
                Viewport _viewPort = DrawingManager.GraphicsDevice.Viewport;
                _viewPort.X = camera.ViewPortPosition.X;
                _viewPort.Y = camera.ViewPortPosition.Y;
                _viewPort.Width = DrawingManager.ViewPortSize.X;
                _viewPort.Height = DrawingManager.ViewPortSize.Y;
                DrawingManager.GraphicsDevice.Viewport = _viewPort;
                // Clear our viewport
                if (DrawingManager.IgnoreClearBeforeRendering == false)
                {
                    DrawingManager.GraphicsDevice.Clear(SceneManager.ActiveScene.ClearColor);
                }
                // Render the scene one time per active camera (split screen)

                // Render each layer
                for (int i = _layers.Length - 1; i >= 0; i--)
                {
                    if (_layers[i].Visible == true)
                    {
                        Matrix layerMatrix;
                        if (_ignoreCamera[i] == true)
                        {
                            layerMatrix = Matrix.Identity;
                        }
                        else
                        {
                            layerMatrix = camera.GetMatrix(_layers[i].Parallax);
                        }
                        _layers[i].RenderLayer(_graphicsDevice, layerMatrix);
                    }
                }
                // End the sprite batch if needed
                if (DrawingLayerTypeInUse != null)
                {
                    _spriteBatch.End();
                    DrawingManager.DrawingLayerTypeInUse = null;
                    DrawingManager.LastTransformMatrix = null;
                }
				#if !REACH
                // Check for debug shapes to draw
                if (_enableDebugDrawing == true && DebugShapes.LinesList.Count > 0)
                {
                    _primitiveBatch.SetViewPortSize(DrawingManager.ViewPortSize.X, DrawingManager.ViewPortSize.Y);
                    _primitiveBatch.Begin(PrimitiveType.LineList, camera.GetMatrix(DebugShapes.Parallax));
                    foreach (DebugLine line in DebugShapes.LinesList)
                    {
                        _primitiveBatch.AddVertex(line.vertex, line.color);
                    }
                    _primitiveBatch.End();
                }
				#endif
            }
            // End rendering
            _isRendering = false;
            for (int i = _layers.Length - 1; i >= 0; i--)
            {
                _layers[i].EndDrawing();
            }
            DebugShapes.LinesList.Clear();
			#if !REACH
            if (_drawOnRenderTarget == true)
            {
                _drawOnRenderTarget = false;
                DrawRenderTargetContent(RenderTargetInstance.SceneRendering, RenderTargetInstance.BackBuffer, null, 255);
                CurrentRenderTarget = RenderTargetInstance.BackBuffer;
            }
			#endif
        }
Пример #14
0
 public static void DrawRenderTargetContent(RenderTargetInstance contentSource, RenderTargetInstance target, Texture2D previousContent, byte? opacity)
 {
     // End the sprite batch if needed
     if (DrawingLayerTypeInUse != null)
     {
         _spriteBatch.End();
         DrawingLayerTypeInUse = null;
     }
     Color color = Color.White;
     if (opacity.HasValue)
     {
         color.A = opacity.Value;
     }
     DrawingManager.RenderTargetManager.SwitchTo(target);
     GraphicsDevice.Clear(new Color(0, 0, 0, 0));
     Texture2D renderTexture = _renderTargetManager.GetRenderTarget2D(contentSource);
     _spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.NonPremultiplied);
     if (previousContent != null)
     {
         //DrawingManager.RenderTargetManager.SaveTexture(RenderTargetInstance.OwnLayerRendering, "E:/own.png");
         _spriteBatch.Draw(previousContent, Vector2.Zero, Color.White);
     }
     _spriteBatch.Draw(renderTexture, Vector2.Zero, color);
     _spriteBatch.End();    
 }
Пример #15
0
 public void ResolveToTexture(RenderTargetInstance renderTarget)
 {
     if (_backbufferTexture != null && (_backbufferTexture.Width != 
         GraphicsDevice.PresentationParameters.BackBufferWidth || 
         _backbufferTexture.Height != GraphicsDevice.PresentationParameters.BackBufferHeight))
     {
         UnloadContent();
         LoadContent();
     }
     if (renderTarget == RenderTargetInstance.A)
     {
         _resolveTextureA = _renderTargetA.GetTexture();
     }
     else if (renderTarget == RenderTargetInstance.B)
     {
         _resolveTextureB = _renderTargetB.GetTexture();
     }
     else
     {
         _graphicsDevice.ResolveBackBuffer(_backbufferTexture);
     }
 }
Пример #16
0
        /// <summary>
        /// Call this method to render all the layers of the scene
        /// </summary>
        public static void RenderScene()
        {
            if (_isRendering == true)
            {
                throw new Exception("RenderScene was previously called but not ended with EndRendering()");
            }
            _isRendering = true;

            // Reset the value of the last layer in use
            DrawingLayerTypeInUse = null;
            // Ensure the rendertargets are of correct size
            PresentationParameters pp = _graphicsDevice.PresentationParameters;

                        #if !REACH
            _renderTargetManager.BackbufferResized(pp.BackBufferWidth, pp.BackBufferHeight);
            CurrentRenderTarget = RenderTargetInstance.BackBuffer;
            if (_drawOnRenderTarget == true)
            {
                _renderTargetManager.SwitchTo(RenderTargetInstance.SceneRendering);
                CurrentRenderTarget = RenderTargetInstance.SceneRendering;
            }
                        #endif
            for (int c = 0; c < SceneManager.ActiveScene.ActiveCameras.Count; c++)
            {
                Camera   camera    = SceneManager.ActiveScene.ActiveCameras[c];
                Viewport _viewPort = DrawingManager.GraphicsDevice.Viewport;
                _viewPort.X      = camera.ViewPortPosition.X;
                _viewPort.Y      = camera.ViewPortPosition.Y;
                _viewPort.Width  = DrawingManager.ViewPortSize.X;
                _viewPort.Height = DrawingManager.ViewPortSize.Y;
                DrawingManager.GraphicsDevice.Viewport = _viewPort;
                // Clear our viewport
                if (DrawingManager.IgnoreClearBeforeRendering == false)
                {
                    DrawingManager.GraphicsDevice.Clear(SceneManager.ActiveScene.ClearColor);
                }
                // Render the scene one time per active camera (split screen)

                // Render each layer
                for (int i = _layers.Length - 1; i >= 0; i--)
                {
                    if (_layers[i].Visible == true)
                    {
                        Matrix layerMatrix;
                        if (_ignoreCamera[i] == true)
                        {
                            layerMatrix = Matrix.Identity;
                        }
                        else
                        {
                            layerMatrix = camera.GetMatrix(_layers[i].Parallax);
                        }
                        _layers[i].RenderLayer(_graphicsDevice, layerMatrix);
                    }
                }
                // End the sprite batch if needed
                if (DrawingLayerTypeInUse != null)
                {
                    _spriteBatch.End();
                    DrawingManager.DrawingLayerTypeInUse = null;
                    DrawingManager.LastTransformMatrix   = null;
                }
                                #if !REACH
                // Check for debug shapes to draw
                if (_enableDebugDrawing == true && DebugShapes.LinesList.Count > 0)
                {
                    _primitiveBatch.SetViewPortSize(DrawingManager.ViewPortSize.X, DrawingManager.ViewPortSize.Y);
                    _primitiveBatch.Begin(PrimitiveType.LineList, camera.GetMatrix(DebugShapes.Parallax));
                    foreach (DebugLine line in DebugShapes.LinesList)
                    {
                        _primitiveBatch.AddVertex(line.vertex, line.color);
                    }
                    _primitiveBatch.End();
                }
                                #endif
            }
            // End rendering
            _isRendering = false;
            for (int i = _layers.Length - 1; i >= 0; i--)
            {
                _layers[i].EndDrawing();
            }
            DebugShapes.LinesList.Clear();
                        #if !REACH
            if (_drawOnRenderTarget == true)
            {
                _drawOnRenderTarget = false;
                DrawRenderTargetContent(RenderTargetInstance.SceneRendering, RenderTargetInstance.BackBuffer, null, 255);
                CurrentRenderTarget = RenderTargetInstance.BackBuffer;
            }
                        #endif
        }
Пример #17
0
 public void SaveTexture(RenderTargetInstance renderTarget, String filePath)
 {
     Texture2D bufferTexture = GetRenderTarget2D(renderTarget);
     using (System.IO.Stream stream = System.IO.File.OpenWrite(filePath))
     {
         bufferTexture.SaveAsPng(stream, bufferTexture.Width, bufferTexture.Height);
     }
 }
Пример #18
0
 public void SwitchTo(RenderTargetInstance renderTarget)
 {
     if (renderTarget == RenderTargetInstance.A)
     {
         _graphicsDevice.SetRenderTarget(0, _renderTargetA);
     }
     else if (renderTarget == RenderTargetInstance.B)
     {
         _graphicsDevice.SetRenderTarget(0, _renderTargetB);
     }
     else
     {
         _graphicsDevice.SetRenderTarget(0, null);
     }
 }
Пример #19
0
 public Texture2D GetTexture(RenderTargetInstance renderTarget)
 {
     if (renderTarget == RenderTargetInstance.A)
     {
         return _resolveTextureA;
     }
     else if (renderTarget == RenderTargetInstance.B)
     {
         return _resolveTextureB;
     }
     else
     {
         return (Texture2D)_backbufferTexture;
     }
 }