コード例 #1
0
 private void DrawTexture(RenderTarget2D tex, RenderTarget2D rt)
 {
     _graphicsDevice.SetRenderTarget(rt);
     ScreenTexture = tex;
     _texPass.Apply();
     _quadRenderer.RenderQuad(_graphicsDevice, -Vector2.One, Vector2.One);
 }
コード例 #2
0
        public RenderTarget2D DrawGaussianBlur(RenderTarget2D renderTargetOutput)
        {
            //select rendertarget
            RenderTarget2D renderTargetBlur = null;

            if (renderTargetOutput.Format != SurfaceFormat.Vector2)
            {
                throw new NotImplementedException("Unsupported Format for blurring");
            }

            //Only square expected
            int size = renderTargetOutput.Width;

            switch (size)
            {
            case 256:
                renderTargetBlur = _rt2562;
                break;

            case 512:
                renderTargetBlur = _rt5122;
                break;

            case 1024:
                renderTargetBlur = _rt10242;
                break;

            case 2048:
                renderTargetBlur = _rt20482;
                break;
            }

            if (renderTargetBlur == null)
            {
                throw new NotImplementedException("Unsupported Size for blurring");
            }

            _graphicsDevice.SetRenderTarget(renderTargetBlur);

            Vector2 invRes = new Vector2(1.0f / size, 1.0f / size);

            Shaders.GaussianBlurEffectParameter_InverseResolution.SetValue(invRes);
            Shaders.GaussianBlurEffectParameter_TargetMap.SetValue(renderTargetOutput);

            _horizontalPass.Apply();
            _quadRenderer.RenderQuad(_graphicsDevice, Vector2.One * -1, Vector2.One);

            _graphicsDevice.SetRenderTarget(renderTargetOutput);
            Shaders.GaussianBlurEffectParameter_TargetMap.SetValue(renderTargetBlur);
            _verticalPass.Apply();
            _quadRenderer.RenderQuad(_graphicsDevice, Vector2.One * -1, Vector2.One);

            return(renderTargetOutput);
        }
コード例 #3
0
        public void DrawPass(Texture2D tex, RenderTarget2D target, EffectPass pass)
        {
            _graphicsDevice.SetRenderTarget(target);

            ScreenTexture = tex;

            pass.Apply();
            _quadRenderer.RenderQuad(_graphicsDevice, -Vector2.One, Vector2.One);
        }
コード例 #4
0
        private void FixSeams()
        {
            if (!GameSettings.g_FixSeams)
            {
                return;
            }

            _graphicsDevice.SetRenderTarget(_textureBufferSeamFix);

            Shaders.SeamFixEffect.CurrentTechnique.Passes[0].Apply();

            _quadRenderer.RenderQuad(_graphicsDevice, -Vector2.One, Vector2.One);
        }
コード例 #5
0
        public void Draw(GameTime gameTime)
        {
            if (startFlag)
            {
                //Capture the last screen!
                _screenManager.Draw(gameTime, _capturedRenderTarget2D, _capturedScreen);
                startFlag = false;
            }
            //Draw the transition

            if (Timer <= MaxTimer && Timer >= 0)
            {
                _graphics.SetRenderTarget(null);
                _graphics.BlendState = BlendState.NonPremultiplied;
                TransitionShader();
                _quadRenderer.RenderQuad(_graphics, -Vector2.One, Vector2.One);
            }
        }
コード例 #6
0
 public void DrawAmbientOcclusion()
 {
     _ssaoPass.Apply();
     _quadRenderer.RenderQuad(_graphicsDevice, -Vector2.One, Vector2.One);
 }
コード例 #7
0
        public void Draw(Texture2D tex, Texture2D shape, RenderTarget2D rt, float brightness, float bokehSize, int downsize, bool fullPrecision, bool dynamicDownsize)
        {
            InitializeParameters();

            if (!_effectLoaded)
            {
                return;
            }

            if (dynamicDownsize)
            {
                int amount = Math.Min((int)(bokehSize / 5), 2);

                int sizeamount = 1 << amount;

                bokehSize /= sizeamount;

                downsize = downsize << amount;
            }

            //Create Quads
            if (Math.Abs(bokehSize - _bokehSize) > 0.01f || downsize != _downsize)
            {
                _bokehSize = bokehSize;

                if (_downsize != downsize)
                {
                    _downsize        = downsize;
                    _downsizeChanged = true;
                    _fullPrecision   = fullPrecision;
                    CreateRT(downsize, fullPrecision);
                }

                CreateQuads(_bokehSize, downsize);
            }

            if (_fullPrecision != fullPrecision)
            {
                _fullPrecision = fullPrecision;
                CreateRT(downsize, fullPrecision);
            }

            ScreenTexture = tex;
            ShapeTexture  = shape;
            Brightness    = brightness;

            _graphicsDevice.SetRenderTarget(_renderTarget0);
            //1280 800

            _defaultPass.Apply();

            _graphicsDevice.RasterizerState = RasterizerState.CullNone;
            _graphicsDevice.BlendState      = BlendState.Additive;

            _graphicsDevice.SetVertexBuffer(_vertexBuffer);
            _graphicsDevice.Indices = _indexBuffer;
            _graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, PrimitiveCount);

            //Draw to RT
            _graphicsDevice.SetRenderTarget(rt);
            _graphicsDevice.Clear(Color.Black);

            ScreenTexture = _renderTarget0;
            _texPass.Apply();
            _quadRenderer.RenderQuad(_graphicsDevice, -Vector2.One, Vector2.One);
        }