当前位置: 首页>>代码示例>>C#>>正文


C# GraphicsDevice.ResolveRenderTarget方法代码示例

本文整理汇总了C#中GraphicsDevice.ResolveRenderTarget方法的典型用法代码示例。如果您正苦于以下问题:C# GraphicsDevice.ResolveRenderTarget方法的具体用法?C# GraphicsDevice.ResolveRenderTarget怎么用?C# GraphicsDevice.ResolveRenderTarget使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在GraphicsDevice的用法示例。


在下文中一共展示了GraphicsDevice.ResolveRenderTarget方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Render

        public void Render(GraphicsDevice gd)
        {
            /////////////////////////////////
            // BRIGHT PASS
            /////////////////////////////////

            gd.SetRenderTarget(0, _brightPassRender);
            //gd.SetRenderTarget(0, null);
            gd.Clear(Color.CornflowerBlue);

            // We need to compute the sampling offsets used for this pass.
            // A 2x2 sampling pattern is used, so we need to generate 4 offsets
            Vector4[] offsets = new Vector4[4];

            // Because the source and destination are NOT the same sizes, we
            // need to provide offsets to correctly map between them.
            float sU = (1.0f / _sceneRender.Width);
            float sV = (1.0f / _sceneRender.Height);

            // The last two components (z,w) are unused. This makes for simpler code, but if
            // constant-storage is limited then it is possible to pack 4 offsets into 2 float4's
            offsets[0] = new Vector4(-0.5f * sU, 0.5f * sV, 0.0f, 0.0f);
            offsets[1] = new Vector4(0.5f * sU, 0.5f * sV, 0.0f, 0.0f);
            offsets[2] = new Vector4(-0.5f * sU, -0.5f * sV, 0.0f, 0.0f);
            offsets[3] = new Vector4(0.5f * sU, -0.5f * sV, 0.0f, 0.0f);

            gd.Clear(Color.Black);
            _ppBatch.Effect = _brightPassShader;
            _ppBatch.ResetMatrices(gd.Viewport.Width, gd.Viewport.Height);
            _ppBatch.Effect.Parameters["tcDownSampleOffsets"].SetValue(offsets);
            _ppBatch.Effect.Parameters["fBrightPassThreshold"].SetValue(_brightPassValue);
            _ppBatch.Effect.Parameters["diffuseTexture"].SetValue(_sceneRender.GetTexture());
            _ppBatch.RenderToTexture(_brightPassRender);
            //_ppBatch.Draw(_sceneRender.GetTexture(), new Rectangle(0, 0, 800, 600), new Rectangle(0, 0, (800 / 2), (600 / 2)), Color.White);
            _ppBatch.Flush();

            /////////////////////////////////
            // DOWNSAMPLE PASS
            /////////////////////////////////

            gd.ResolveRenderTarget(0);
            //gd.SetRenderTarget(0, null);
            gd.SetRenderTarget(0, _downsamplePassRender);

            // We need to compute the sampling offsets used for this pass.
            // A 2x2 sampling pattern is used, so we need to generate 4 offsets
            Vector4[] offsets2 = new Vector4[16];

            int idx = 0;
            for (int i = -2; i < 2; i++)
            {
                for (int j = -2; j < 2; j++)
                {
                    offsets2[idx++] = new Vector4(
                                                ((i) + 0.5f) * (1.0f / (_downsamplePassRender.Width)),
                                                ((j) + 0.5f) * (1.0f / (_downsamplePassRender.Height)),
                                                0.0f, // unused
                                                0.0f  // unused
                                            );
                }
            }

            gd.Clear(Color.Black);
            _ppBatch.Effect = _downsamplePassShader;
            _ppBatch.ResetMatrices(gd.Viewport.Width, gd.Viewport.Height);
            _ppBatch.Effect.Parameters["tcDownSampleOffsets"].SetValue(offsets2);
            _ppBatch.Effect.Parameters["diffuseTexture"].SetValue(_brightPassRender.GetTexture());
            _ppBatch.RenderToTexture(_downsamplePassRender);
            //_ppBatch.Draw(_brightPassRender.GetTexture(), new Rectangle(0, 0, 800 / 2, 600 / 2), new Rectangle(0, 0, 800 / 8, 600 / 8), Color.White);
            _ppBatch.Flush();

            ///////////////////////////////////
            //// HORIZONTAL BLOOM PASS
            ///////////////////////////////////

            gd.ResolveRenderTarget(0);
            //gd.SetRenderTarget(0, null);
            gd.SetRenderTarget(0, _hozbloomPassRender);

            // Configure the sampling offsets and their weights
            float[] HBloomWeights = new float[9];
            float[] HBloomOffsets = new float[9];

            for (int i = 0; i < 9; i++)
            {
                // Compute the offsets. We take 9 samples - 4 either side and one in the middle:
                //     i =  0,  1,  2,  3, 4,  5,  6,  7,  8
                //Offset = -4, -3, -2, -1, 0, +1, +2, +3, +4
                HBloomOffsets[i] = (i - 4.0f) * (1.0f / _downsamplePassRender.Width);

                // 'x' is just a simple alias to map the [0,8] range down to a [-1,+1]
                float x = (i - 4.0f) / 4.0f;

                // Use a gaussian distribution. Changing the standard-deviation
                // (second parameter) as well as the amplitude (multiplier) gives
                // distinctly different results.
                HBloomWeights[i] = 0.4f * ComputeGaussianValue(x, 0.0f, 0.8f);
            }

            gd.Clear(Color.Black);
//.........这里部分代码省略.........
开发者ID:mikecann,项目名称:Portal2D-XNA,代码行数:101,代码来源:cPostProcessing.cs

示例2: endMainRender

 public void endMainRender(GraphicsDevice gd)
 {
     gd.ResolveRenderTarget(0);
     //gd.SetRenderTarget(0, null);
 }
开发者ID:mikecann,项目名称:Portal2D-XNA,代码行数:5,代码来源:cPostProcessing.cs


注:本文中的GraphicsDevice.ResolveRenderTarget方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。