private void DisposeTexture() { if (this.lasttexture != null) { this.lasttexture.Dispose(); this.lasttexture = null; } }
public DX11MipSliceRenderTarget(DX11RenderContext context, DX11Texture3D texture, int mipindex,int w, int h,int d) { this.context = context; RenderTargetViewDescription rtd = new RenderTargetViewDescription() { Dimension = RenderTargetViewDimension.Texture3D, Format = texture.Format, MipSlice = mipindex, DepthSliceCount = d }; ShaderResourceViewDescription srvd = new ShaderResourceViewDescription(); srvd.Dimension = ShaderResourceViewDimension.Texture3D; srvd.MipLevels = 1; srvd.MostDetailedMip = mipindex; srvd.Format = texture.Format; this.RTV = new RenderTargetView(context.Device, texture.Resource, rtd); this.SRV = new ShaderResourceView(context.Device, texture.Resource, srvd); this.Width = w; this.Height = h; this.Depth = d; }
public DX11MipSliceRenderTarget3D(DX11RenderContext context, DX11Texture3D texture, int mipindex, int w, int h, int d) : base(context) { this.Resource = texture.Resource; RenderTargetViewDescription rtd = new RenderTargetViewDescription() { Dimension = RenderTargetViewDimension.Texture3D, Format = texture.Format, MipSlice = mipindex, DepthSliceCount = d }; UnorderedAccessViewDescription uavd = new UnorderedAccessViewDescription() { Dimension = UnorderedAccessViewDimension.Texture3D, Format = texture.Format, MipSlice = mipindex, FirstDepthSlice = 0, DepthSliceCount = d }; ShaderResourceViewDescription srvd = new ShaderResourceViewDescription(); srvd.Dimension = ShaderResourceViewDimension.Texture3D; srvd.MipLevels = 1; srvd.MostDetailedMip = mipindex; srvd.Format = texture.Format; srvd.ArraySize = d; srvd.FirstArraySlice = 0; this.RTV = new RenderTargetView(context.Device, texture.Resource, rtd); this.SRV = new ShaderResourceView(context.Device, texture.Resource, srvd); this.UAV = new UnorderedAccessView(context.Device, texture.Resource, uavd); this.Width = w; this.Height = h; this.Depth = d; }
public void Present() { DX11RenderContext context = this.RenderContext; //Rendering is finished, so should be ok to grab texture now if (this.FTextureInput.IsConnected && this.FTextureInput.SliceCount > 0 && this.FTextureInput[0].Contains(context)) { DX11Texture3D texture = this.FTextureInput[0][context]; if (texture != null) { if (this.lasttexture != null) { if (this.lasttexture.Resource.Description != texture.Resource.Description) { this.DisposeTexture(); } } if (this.lasttexture == null) { this.lasttexture = DX11Texture3D.FromDescription(context, texture.Resource.Description); } context.CurrentDeviceContext.CopyResource(texture.Resource, this.lasttexture.Resource); if (this.FInFlush[0]) { context.CurrentDeviceContext.Flush(); } } } else { this.DisposeTexture(); } }