/// <summary> /// Releases unmanaged and - optionally - managed resources /// </summary> /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { if (!IsDisposed) { //Dispose of managed resources if (disposing) { if (_shaderResourceView != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_shaderResourceView.ComPointer); } _shaderResourceView.Dispose(); _shaderResourceView = null; } if (_renderTargetView != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_renderTargetView.ComPointer); } _renderTargetView.Dispose(); _renderTargetView = null; } if (_depthStencilView != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_depthStencilView.ComPointer); } _depthStencilView.Dispose(); _depthStencilView = null; } if (_texture2D != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_texture2D.ComPointer); } _texture2D.Dispose(); _texture2D = null; } if (_staging != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_staging.ComPointer); } _staging.Dispose(); _staging = null; } } base.Dispose(disposing); } }
private void CreateViews() { _backBuffer = D3D.Resource.FromSwapChain <D3D.Texture2D>(_swapChain, 0); _renderTargetView = new D3D.RenderTargetView(_graphicsDevice, _backBuffer); //Add resources to tracker _renderer.Resources.AddTrackedObject(_backBuffer.ComPointer, this); _renderer.Resources.AddTrackedObject(_renderTargetView.ComPointer, this); if (_presentParams.DepthStencilFormat != DepthFormat.None) { D3D.Texture2DDescription depthBufferDesc = new D3D.Texture2DDescription { ArraySize = 1, BindFlags = D3D.BindFlags.DepthStencil, CpuAccessFlags = D3D.CpuAccessFlags.None, Format = D3D10Helper.ToD3DDepthFormat(_presentParams.DepthStencilFormat), Height = _presentParams.BackBufferHeight, Width = _presentParams.BackBufferWidth, MipLevels = 1, OptionFlags = D3D.ResourceOptionFlags.None, SampleDescription = _backBuffer.Description.SampleDescription, Usage = D3D.ResourceUsage.Default }; using (var depthBuffer = new D3D.Texture2D(_graphicsDevice, depthBufferDesc)) { _depthStencilView = new D3D.DepthStencilView(_graphicsDevice, depthBuffer); //Add resource to tracker _renderer.Resources.AddTrackedObject(_depthStencilView.ComPointer, this); } } }
/// <summary> /// Releases unmanaged and - optionally - managed resources /// </summary> /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { if (!IsDisposed) { //Dispose of managed resources if (disposing) { if (_shaderResourceView != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_shaderResourceView.ComPointer); } _shaderResourceView.Dispose(); _shaderResourceView = null; } if (_renderTargetView != null) { for (int i = 0; i < 6; i++) { D3D.RenderTargetView rt = _renderTargetView[i]; if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(rt.ComPointer); } rt.Dispose(); _renderTargetView[i] = null; } } if (_depthStencilView != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_depthStencilView.ComPointer); } _depthStencilView.Dispose(); _depthStencilView = null; } if (_texture2D != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_texture2D.ComPointer); } _texture2D.Dispose(); _texture2D = null; } } base.Dispose(disposing); } }
private void DestroyViews() { if (_renderTargetView != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_renderTargetView.ComPointer); } _renderTargetView.Dispose(); _renderTargetView = null; } if (_backBuffer != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_backBuffer.ComPointer); } _backBuffer.Dispose(); _backBuffer = null; } if (_staging != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_staging.ComPointer); } _staging.Dispose(); _staging = null; } if (_depthStencilView != null) { if (_renderer != null) { _renderer.Resources.RemoveTrackedObject(_depthStencilView.ComPointer); } _depthStencilView.Dispose(); _depthStencilView = null; } }
private void SetBackBufferTargets() { if (_activeBackBuffer != null) { D3D10Helper.CheckDisposed(_activeBackBuffer); D3D.RenderTargetView rtv = _activeBackBuffer.D3D10RenderTargetView; D3D.DepthStencilView dsv = _activeBackBuffer.D3D10DepthStencilView; if (rtv != null) { if (dsv != null) { _graphicsDevice.OutputMerger.SetTargets(dsv, rtv); } else { _graphicsDevice.OutputMerger.SetTargets(rtv); } } } }
public DepthBuffer( D3D10.Device device, int width, int height, DXGI.Format format ) { this.device = device; D3D10.Texture2DDescription desc = new D3D10.Texture2DDescription(); desc.Width = width; desc.Height = height; desc.ArraySize = 1; desc.BindFlags = D3D10.BindFlags.DepthStencil; desc.CpuAccessFlags = D3D10.CpuAccessFlags.None; desc.Format = format; desc.MipLevels = 1; desc.OptionFlags = D3D10.ResourceOptionFlags.None; desc.SampleDescription = new SlimDX.DXGI.SampleDescription( 1, 0 ); desc.Usage = D3D10.ResourceUsage.Default; Resource = new D3D10.Texture2D( device, desc ); View = new D3D10.DepthStencilView( device, Resource ); }
/// <summary> /// Creates a new instance of <see cref="D3D10Texture2DImplementation"/>, for RenderTarget2D. /// </summary> /// <param name="renderer">The D3D10 renderer.</param> /// <param name="width">The texture width in pixels.</param> /// <param name="height">The texture height in pixels.</param> /// <param name="genMipMaps">True if a mipmap chain should be generated or not.</param> /// <param name="format">The surface format.</param> /// <param name="depthFormat">The depth-stencil format.</param> /// <param name="multiSampleCount">The multisample count.</param> /// <param name="usage">The target usage.</param> /// <exception cref="System.ArgumentException">Thrown if the formats are invalid to be used in a render target.</exception> internal D3D10Texture2DImplementation(D3D10Renderer renderer, int width, int height, bool genMipMaps, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, RenderTargetUsage usage) : base(width, height, format, depthFormat, multiSampleCount, usage) { _renderer = renderer; _graphicsDevice = _renderer.GraphicsDevice; if (!renderer.Adapter.QueryRenderTargetFormat(format, depthFormat, multiSampleCount)) { throw new ArgumentException("Format combination not supported."); } D3D.Texture2DDescription desc2D = new D3D.Texture2DDescription(); desc2D.ArraySize = 1; desc2D.BindFlags = D3D.BindFlags.ShaderResource | D3D.BindFlags.RenderTarget; desc2D.CpuAccessFlags = D3D.CpuAccessFlags.None; desc2D.Format = D3D10Helper.ToD3DSurfaceFormat(format); desc2D.Height = height; desc2D.Width = width; desc2D.Usage = _usage = D3D.ResourceUsage.Default; if (genMipMaps) { desc2D.OptionFlags = D3D.ResourceOptionFlags.GenerateMipMaps; } else { desc2D.OptionFlags = D3D.ResourceOptionFlags.None; } desc2D.MipLevels = (genMipMaps) ? 0 : 1; if (multiSampleCount > 1) { desc2D.SampleDescription = new SlimDX.DXGI.SampleDescription(multiSampleCount, 0); } else { desc2D.SampleDescription = new DXGI.SampleDescription(1, 0); } _texture2D = new D3D.Texture2D(_graphicsDevice, desc2D); _shaderResourceView = new D3D.ShaderResourceView(_graphicsDevice, _texture2D); _renderTargetView = new D3D.RenderTargetView(_graphicsDevice, _texture2D); _graphicsDevice.ClearRenderTargetView(_renderTargetView, new SDX.Color4(1.0f, 0, 0, 0)); //Add to tracker _renderer.Resources.AddTrackedObject(_texture2D.ComPointer, this); _renderer.Resources.AddTrackedObject(_shaderResourceView.ComPointer, this); _renderer.Resources.AddTrackedObject(_renderTargetView.ComPointer, this); _mipCount = _texture2D.Description.MipLevels; if (depthFormat != DepthFormat.None) { D3D.Texture2DDescription dbdesc = new D3D.Texture2DDescription(); dbdesc.ArraySize = 1; dbdesc.BindFlags = D3D.BindFlags.DepthStencil; dbdesc.CpuAccessFlags = D3D.CpuAccessFlags.None; dbdesc.Format = D3D10Helper.ToD3DDepthFormat(depthFormat); dbdesc.Height = height; dbdesc.Width = width; dbdesc.Usage = D3D.ResourceUsage.Default; dbdesc.OptionFlags = D3D.ResourceOptionFlags.None; dbdesc.MipLevels = 1; if (multiSampleCount > 1) { dbdesc.SampleDescription = new SlimDX.DXGI.SampleDescription(multiSampleCount, 0); } else { dbdesc.SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0); } using (D3D.Texture2D depthBuffer = new D3D.Texture2D(_graphicsDevice, dbdesc)) { _depthStencilView = new D3D.DepthStencilView(_graphicsDevice, depthBuffer); if (depthFormat == Tesla.Graphics.DepthFormat.Depth24Stencil8) { _graphicsDevice.ClearDepthStencilView(_depthStencilView, D3D.DepthStencilClearFlags.Depth | D3D.DepthStencilClearFlags.Stencil, 1.0f, 0); } else { _graphicsDevice.ClearDepthStencilView(_depthStencilView, D3D.DepthStencilClearFlags.Depth, 1.0f, 0); } //Add to tracker _renderer.Resources.AddTrackedObject(_depthStencilView.ComPointer, this); } } }
/// <summary> /// Creates a new instance of <see cref="D3D10TextureCubeImplementation"/>. /// </summary> /// <param name="renderer">The D3D10 renderer.</param> /// <param name="size">The size (width/height) of each cube face.</param> /// <param name="genMipMaps">True if a mipmap chain should be generated or not.</param> /// <param name="format">The surface format.</param> /// <param name="depthFormat">The depth-stencil format.</param> /// <param name="multiSampleCount">The number of sample locations for multisampling</param> /// <param name="usage">Sets the render target's behavior.</param> internal D3D10TextureCubeImplementation(D3D10Renderer renderer, int size, bool genMipMaps, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, RenderTargetUsage usage) : base(size, format, depthFormat, multiSampleCount, usage) { _renderer = renderer; _graphicsDevice = _renderer.GraphicsDevice; if (!renderer.Adapter.QueryRenderTargetFormat(format, depthFormat, multiSampleCount)) { throw new ArgumentException("Format combination not supported."); } D3D.Texture2DDescription desc2D = new D3D.Texture2DDescription(); desc2D.ArraySize = 6; desc2D.BindFlags = D3D.BindFlags.ShaderResource | D3D.BindFlags.RenderTarget; desc2D.CpuAccessFlags = D3D.CpuAccessFlags.None; desc2D.Format = D3D10Helper.ToD3DSurfaceFormat(format); desc2D.Height = size; desc2D.Width = size; desc2D.Usage = D3D.ResourceUsage.Default; if (genMipMaps) { desc2D.OptionFlags = D3D.ResourceOptionFlags.GenerateMipMaps | D3D.ResourceOptionFlags.TextureCube; } else { desc2D.OptionFlags = D3D.ResourceOptionFlags.TextureCube; } desc2D.MipLevels = (genMipMaps) ? 0 : 1; if (multiSampleCount > 1) { desc2D.SampleDescription = new SlimDX.DXGI.SampleDescription(multiSampleCount, 0); } else { desc2D.SampleDescription = new DXGI.SampleDescription(1, 0); } //Create the resources _texture2D = new D3D.Texture2D(_graphicsDevice, desc2D); _shaderResourceView = new D3D.ShaderResourceView(_graphicsDevice, _texture2D); _renderTargetView = new D3D.RenderTargetView[6]; //Add to tracker _renderer.Resources.AddTrackedObject(_texture2D.ComPointer, this); _renderer.Resources.AddTrackedObject(_shaderResourceView.ComPointer, this); //Setup each render target view for each face for (int i = 0; i < 6; i++) { D3D.RenderTargetViewDescription rtDesc = new D3D.RenderTargetViewDescription(); rtDesc.ArraySize = 1; rtDesc.FirstArraySlice = i; if (multiSampleCount > 1) { rtDesc.Dimension = D3D.RenderTargetViewDimension.Texture2DMultisampledArray; } else { rtDesc.Dimension = D3D.RenderTargetViewDimension.Texture2DArray; } rtDesc.Format = desc2D.Format; _renderTargetView[i] = new D3D.RenderTargetView(_graphicsDevice, _texture2D, rtDesc); _graphicsDevice.ClearRenderTargetView(_renderTargetView[i], new SDX.Color4(1.0f, 0, 0, 0)); _renderer.Resources.AddTrackedObject(_renderTargetView[i].ComPointer, this); } _mipCount = _texture2D.Description.MipLevels; if (depthFormat != DepthFormat.None) { D3D.Texture2DDescription dbdesc = new D3D.Texture2DDescription(); dbdesc.ArraySize = 6; dbdesc.BindFlags = D3D.BindFlags.DepthStencil; dbdesc.CpuAccessFlags = D3D.CpuAccessFlags.None; dbdesc.Format = D3D10Helper.ToD3DDepthFormat(depthFormat); dbdesc.Height = size; dbdesc.Width = size; dbdesc.Usage = D3D.ResourceUsage.Default; dbdesc.OptionFlags = D3D.ResourceOptionFlags.None; dbdesc.MipLevels = 1; if (multiSampleCount > 1) { dbdesc.SampleDescription = new SlimDX.DXGI.SampleDescription(multiSampleCount, 0); } else { dbdesc.SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0); } using (D3D.Texture2D depthBuffer = new D3D.Texture2D(_graphicsDevice, dbdesc)) { _depthStencilView = new D3D.DepthStencilView(_graphicsDevice, depthBuffer); if (depthFormat == Tesla.Graphics.DepthFormat.Depth24Stencil8) { _graphicsDevice.ClearDepthStencilView(_depthStencilView, D3D.DepthStencilClearFlags.Depth | D3D.DepthStencilClearFlags.Stencil, 1.0f, 0); } else { _graphicsDevice.ClearDepthStencilView(_depthStencilView, D3D.DepthStencilClearFlags.Depth, 1.0f, 0); } //Add to tracker _renderer.Resources.AddTrackedObject(_depthStencilView.ComPointer, this); } } }
private void CreateDepthStencil() { DXGI.SampleDescription sampleDesc = new SlimDX.DXGI.SampleDescription(); sampleDesc.Count = 1; sampleDesc.Quality = 0; D3D10.Texture2DDescription texDesc = new SlimDX.Direct3D10.Texture2DDescription(); texDesc.Width = width; texDesc.Height = height; texDesc.MipLevels = 1; texDesc.ArraySize = 1; texDesc.BindFlags = D3D10.BindFlags.DepthStencil; texDesc.CpuAccessFlags = D3D10.CpuAccessFlags.None; texDesc.Format = DXGI.Format.D32_Float; texDesc.SampleDescription = sampleDesc; texDesc.Usage = D3D10.ResourceUsage.Default; texDesc.OptionFlags = D3D10.ResourceOptionFlags.None; D3D10.DepthStencilViewDescription stencilViewDesc = new SlimDX.Direct3D10.DepthStencilViewDescription(); stencilViewDesc.Dimension = D3D10.DepthStencilViewDimension.Texture2D; stencilViewDesc.Format = texDesc.Format; stencilViewDesc.MipSlice = 0; stencilViewDesc.FirstArraySlice = 0; stencilViewDesc.ArraySize = 1; using (D3D10.Texture2D stencilTex = new SlimDX.Direct3D10.Texture2D(device, texDesc)) { depthStencilView = new SlimDX.Direct3D10.DepthStencilView(device, stencilTex,stencilViewDesc); } }
public void SetRenderTargets(RenderTargetBinding[] targets) { D3D10Helper.CheckDisposed(_graphicsDevice); if (targets == null || targets.Length == 0) { //Clear targets ClearTargets(); //Set the swapchain's targets to the device, unbinding the current ones SetBackBufferTargets(); //Generate mip maps of previously bounded targets GenerateTargetMips(); } else { //If we have a larger array than the max targets possible, throw an exception if (targets.Length > _currentRenderTargets.Length) { throw new ArgumentOutOfRangeException("Cannot bind more than 8 targets at a time."); } //Clear targets ClearTargets(); D3D.RenderTargetView rtv; D3D.DepthStencilView dsv = null; DepthFormat depthFormat = DepthFormat.None; int width = 0; int height = 0; int samples = 0; int pixelDepth = 0; for (int i = 0; i < targets.Length; i++) { RenderTargetBinding binding = targets[i]; RenderTargetUsage usage = RenderTargetUsage.DiscardContents; if (binding.IsRenderTargetCube) { D3D10TextureCubeImplementation cubeImpl = binding.RenderTargetCube.Implementation as D3D10TextureCubeImplementation; D3D10Helper.CheckDisposed(cubeImpl); rtv = cubeImpl.GetRenderTargetView(binding.CubeMapFace); usage = cubeImpl.TargetUsage; if (i == 0) { width = cubeImpl.Size; height = cubeImpl.Size; dsv = cubeImpl.D3D10DepthStencilView; depthFormat = cubeImpl.DepthFormat; samples = cubeImpl.MultiSampleCount; pixelDepth = D3D10Helper.FormatSize(cubeImpl.Format); } else { if (cubeImpl.Size != width || cubeImpl.Size != height || cubeImpl.MultiSampleCount != samples || D3D10Helper.FormatSize(cubeImpl.Format) != pixelDepth) { throw new ArgumentException("All render target dimensions must match."); } } } else { D3D10Texture2DImplementation texImpl = binding.RenderTarget2D.Implementation as D3D10Texture2DImplementation; D3D10Helper.CheckDisposed(texImpl); rtv = texImpl.D3D10RenderTargetVew; usage = texImpl.TargetUsage; if (i == 0) { width = texImpl.Width; height = texImpl.Height; dsv = texImpl.D3D10DepthStencilView; depthFormat = texImpl.DepthFormat; samples = texImpl.MultiSampleCount; pixelDepth = D3D10Helper.FormatSize(texImpl.Format); } else { if (texImpl.Width != width || texImpl.Height != height || texImpl.MultiSampleCount != samples || D3D10Helper.FormatSize(texImpl.Format) != pixelDepth) { throw new ArgumentException("All render target dimensions, sample count, and bit depth must match."); } } } //Set the targets to the arrays, after we're done processing we set them all at once _currentRenderTargets[i] = binding; _views[i] = rtv; _currentRenderTargetCount++; //Check usage, if we're using a target that isn't preserve contents, //then we clear the target. if (usage != RenderTargetUsage.PreserveContents) { _graphicsDevice.ClearRenderTargetView(rtv, new SlimDX.Color4(1.0f, 0, 0, 0)); if (i == 0 && dsv != null) { D3D.DepthStencilClearFlags flags = D3D.DepthStencilClearFlags.Depth; if (depthFormat == DepthFormat.Depth24Stencil8) { flags |= D3D.DepthStencilClearFlags.Stencil; } _graphicsDevice.ClearDepthStencilView(dsv, flags, 1.0f, 0); } } } //Bind targets if (dsv != null) { _graphicsDevice.OutputMerger.SetTargets(dsv, _views); } else { _graphicsDevice.OutputMerger.SetTargets(_views); } //Generate mip maps of previously bounded targets GenerateTargetMips(); //Note: What if a user binds a target here that was previously bound, //is generating mip maps on a bound target ok? I don't know if //a user would even want to do that... } }
/// <summary> /// Clears the active targets, or back buffer if there are none. /// </summary> /// <param name="options"></param> /// <param name="color"></param> /// <param name="depth"></param> /// <param name="stencil"></param> public void ClearTargets(ClearOptions options, Color color, float depth, int stencil) { D3D10Helper.CheckDisposed(_graphicsDevice); SlimDX.Color4 sc; D3D10Helper.Convert(ref color, out sc); if (_currentRenderTargetCount == 0 && _activeBackBuffer != null) { D3D10Helper.CheckDisposed(_activeBackBuffer); if (_activeBackBuffer.D3D10DepthStencilView != null) { if (((options & ClearOptions.Depth) == ClearOptions.Depth) && ((options & ClearOptions.Stencil) == ClearOptions.Stencil)) { _graphicsDevice.ClearDepthStencilView(_activeBackBuffer.D3D10DepthStencilView, D3D.DepthStencilClearFlags.Depth | D3D.DepthStencilClearFlags.Stencil, depth, (byte)stencil); } else if ((options & ClearOptions.Depth) == ClearOptions.Depth) { _graphicsDevice.ClearDepthStencilView(_activeBackBuffer.D3D10DepthStencilView, D3D.DepthStencilClearFlags.Depth, depth, (byte)stencil); } else if ((options & ClearOptions.Stencil) == ClearOptions.Stencil) { _graphicsDevice.ClearDepthStencilView(_activeBackBuffer.D3D10DepthStencilView, D3D.DepthStencilClearFlags.Stencil, depth, (byte)stencil); } } if ((_activeBackBuffer.D3D10RenderTargetView != null) && ((options & ClearOptions.Target) == ClearOptions.Target)) { _graphicsDevice.ClearRenderTargetView(_activeBackBuffer.D3D10RenderTargetView, sc); } } else { for (int i = 0; i < _currentRenderTargetCount; i++) { RenderTargetBinding binding = _currentRenderTargets[i]; D3D.DepthStencilView dsv = null; D3D.RenderTargetView rtv = null; if (!binding.IsRenderTargetCube) { D3D10Texture2DImplementation impl2D = binding.RenderTarget2D.Implementation as D3D10Texture2DImplementation; D3D10Helper.CheckDisposed(impl2D); dsv = impl2D.D3D10DepthStencilView; rtv = impl2D.D3D10RenderTargetVew; } else { D3D10TextureCubeImplementation implcube = binding.RenderTargetCube.Implementation as D3D10TextureCubeImplementation; D3D10Helper.CheckDisposed(implcube); dsv = implcube.D3D10DepthStencilView; rtv = implcube.GetRenderTargetView(binding.CubeMapFace); } if (dsv != null) { if (((options & ClearOptions.Depth) == ClearOptions.Depth) && ((options & ClearOptions.Stencil) == ClearOptions.Stencil)) { _graphicsDevice.ClearDepthStencilView(dsv, D3D.DepthStencilClearFlags.Depth | D3D.DepthStencilClearFlags.Stencil, depth, (byte)stencil); } else if ((options & ClearOptions.Depth) == ClearOptions.Depth) { _graphicsDevice.ClearDepthStencilView(dsv, D3D.DepthStencilClearFlags.Depth, depth, (byte)stencil); } else if ((options & ClearOptions.Stencil) == ClearOptions.Stencil) { _graphicsDevice.ClearDepthStencilView(dsv, D3D.DepthStencilClearFlags.Stencil, depth, (byte)stencil); } } if ((rtv != null) && ((options & ClearOptions.Target) == ClearOptions.Target)) { _graphicsDevice.ClearRenderTargetView(rtv, sc); } } } }
public void SetSize(int width, int height) { if (DepthBuffer != null) DepthBuffer.Dispose(); if (DepthBufferView != null) DepthBufferView.Dispose(); if (RenderTarget != null) RenderTarget.Dispose(); SwapChain.ResizeBuffers(1, width, height, DXGI.Format.R8G8B8A8_UNorm, DXGI.SwapChainFlags.None); RenderTarget = new Texturing.RenderTarget(this, width, height); D3D.Texture2DDescription depthbufferdesc = new D3D.Texture2DDescription() { Width = width, Height = height, MipLevels = 1, ArraySize = 1, Format = SlimDX.DXGI.Format.D24_UNorm_S8_UInt, SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0), Usage = D3D.ResourceUsage.Default, BindFlags = D3D.BindFlags.DepthStencil, CpuAccessFlags = D3D.CpuAccessFlags.None, OptionFlags = D3D.ResourceOptionFlags.None }; DepthBuffer = new D3D.Texture2D(Device, depthbufferdesc); DepthBufferView = new D3D.DepthStencilView(Device, DepthBuffer); Viewport = new D3D.Viewport() { X = 0, Y = 0, Width = width, Height = height, MinZ = 0.0f, MaxZ = 1.0f }; Device.Rasterizer.SetViewports(Viewport); SetOutputTargets(); }