Пример #1
0
        public Postprocess(Game game, string shaderFile, RenderTexture rt = null, string name = null)
        {
            this.game = game;
            this.renderTexture = rt;
            if(name == null)
            {
                this.Name = System.IO.Path.GetFileNameWithoutExtension(shaderFile);
                this.debugName = "Postprocess " + this.Name;
            }
            else
            {
                this.debugName = this.Name = name;
            }
            this.shaderFile = shaderFile;

            var desc = SamplerStateDescription.Default();
            desc.Filter = Filter.MinMagMipPoint;
            defaultSamplerStateDescription = desc;

            LoadShader();
            BuildVertexBuffer();
            ppBuffer = Material.CreateBuffer<LiliumPostprocessData>();

            game.AddObject(this);
        }
Пример #2
0
        public RenderTexture(Game game, int width, int height, int mrtCount = 1, string debugName = null)
        {
            this.game = game;

            if (mrtCount < 1) mrtCount = 1;
            this.debugName = debugName ?? "RenderTexture " + Debug.NextObjectId;
            var format = Format.R32G32B32A32_Float;
            {
                var desc = new Texture2DDescription();
                desc.Format = format;
                desc.Width = width;
                desc.Height = height;
                desc.BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource;
                desc.Usage = ResourceUsage.Default;
                desc.ArraySize = 1;
                desc.CpuAccessFlags = CpuAccessFlags.None;
                desc.MipLevels = 1;
                desc.SampleDescription.Count = 1;
                desc.SampleDescription.Quality = 0;
                desc.OptionFlags = ResourceOptionFlags.None;

                textures = new Texture2D[mrtCount];
                for (int i = 0; i < mrtCount; ++i)
                {
                    textures[i] = new Texture2D(game.Device, desc);
                    textures[i].DebugName = DebugName + "[" + i + "]";
                }
            }
            {
                var desc = new RenderTargetViewDescription();
                desc.Format = format;
                desc.Dimension = RenderTargetViewDimension.Texture2D;
                desc.Texture2D.MipSlice = 0;

                renderTargetViews = new RenderTargetView[mrtCount];
                for (int i = 0; i < mrtCount; ++i)
                {
                    renderTargetViews[i] = new RenderTargetView(game.Device, textures[i], desc);
                    renderTargetViews[i].DebugName = DebugName + "[" + i + "]";
                }
            }
            {
                shaderResourceViews = new ShaderResourceView[mrtCount];
                for (int i = 0; i < mrtCount; ++i)
                {
                    shaderResourceViews[i] = new ShaderResourceView(game.Device, textures[i]);
                    shaderResourceViews[i].DebugName = DebugName + "[" + i + "]";
                }
            }
            {
                clearColors = new Color4[mrtCount];
                for (int i = 0; i < mrtCount; ++i)
                {
                    clearColors[i] = Color4.Black;
                }
            }
            {
                var desc = new Texture2DDescription();
                desc.Format = Format.D24_UNorm_S8_UInt;
                desc.ArraySize = 1;
                desc.MipLevels = 1;
                desc.Width = width;
                desc.Height = height;
                desc.SampleDescription.Count = 1;
                desc.SampleDescription.Quality = 0;
                desc.Usage = ResourceUsage.Default;
                desc.BindFlags = BindFlags.DepthStencil;
                desc.CpuAccessFlags = CpuAccessFlags.None;
                desc.OptionFlags = ResourceOptionFlags.None;
                depthStencilTexture = new Texture2D(game.Device, desc);
                depthStencilTexture.DebugName = DebugName + "(DS)";
            }
            {
                depthStencilView = new DepthStencilView(game.Device, depthStencilTexture);
                depthStencilView.DebugName = DebugName;
            }
            vp = new SharpDX.Viewport(0, 0, width, height);

            game.AddObject(this);
        }