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); }
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); }