Exemple #1
0
        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));
        }
Exemple #2
0
 public ISurface CreateSurface(int width, int height, PixelFormat pixelFormat, SurfaceType type = SurfaceType.Input, DataResource dataResource = null)
 {
     throw new System.NotImplementedException();
 }