public ISurface CreateSurface( int width, int height, PixelFormat pixelFormat, SurfaceType type, DataResource dataResource = null) { if (width <= 0 || width > 65536) { throw new ArgumentOutOfRangeException(nameof(width), "Must be between 1 and 65536"); } if (height <= 0 || height > 65536) { throw new ArgumentOutOfRangeException(nameof(height), "Must be between 1 and 65536"); } var desc = new d3d.Texture2DDescription { Width = width, Height = height, MipLevels = 1, ArraySize = 1, Format = dxgi.Format.B8G8R8A8_UNorm, CpuAccessFlags = d3d.CpuAccessFlags.None, OptionFlags = d3d.ResourceOptionFlags.None, SampleDescription = new dxgi.SampleDescription(1, 0) }; switch (type) { case SurfaceType.Input: desc.Usage = d3d.ResourceUsage.Immutable; desc.BindFlags = d3d.BindFlags.ShaderResource; break; case SurfaceType.Output: desc.Usage = d3d.ResourceUsage.Default; desc.BindFlags = d3d.BindFlags.ShaderResource | d3d.BindFlags.RenderTarget; break; case SurfaceType.InputOutput: desc.Usage = d3d.ResourceUsage.Default; desc.BindFlags = d3d.BindFlags.ShaderResource | d3d.BindFlags.RenderTarget; break; } d3d.Texture2D texture; if (dataResource != null) { var srcDataPtr = Marshal.UnsafeAddrOfPinnedArrayElement(dataResource.Data, 0); var dataSource = new SharpDX.DataRectangle(srcDataPtr, dataResource.Stride); texture = new d3d.Texture2D(Device, desc, new[] { dataSource }); } else { texture = new d3d.Texture2D(Device, desc); } var shaderResourceView = new d3d.ShaderResourceView(Device, texture); return(new CSurface(texture, shaderResourceView)); }
public ISurface CreateSurface(int width, int height, PixelFormat pixelFormat, SurfaceType type = SurfaceType.Input, DataResource dataResource = null) { throw new System.NotImplementedException(); }