Beispiel #1
0
        public TextureArray2D(ImageLoader.Image image)
        {
            Size = image.GetSize(0);
            Debug.Assert(Size.Depth == 1);
            NumMipmaps = image.NumMipmaps;
            NumLayers  = image.NumLayers;
            Format     = image.Format.DxgiFormat;

            var data = new DataRectangle[NumLayers * NumMipmaps];

            for (int curLayer = 0; curLayer < NumLayers; ++curLayer)
            {
                for (int curMipmap = 0; curMipmap < NumMipmaps; ++curMipmap)
                {
                    var mip = image.Layers[curLayer].Mipmaps[curMipmap];
                    var idx = GetSubresourceIndex(curLayer, curMipmap);
                    data[idx].DataPointer = mip.Bytes;
                    // The distance (in bytes) from the beginning of one line of a texture to the next line.
                    data[idx].Pitch = (int)(mip.Size / mip.Height);
                }
            }

            handle = new Texture2D(Device.Get().Handle, CreateTextureDescription(false), data);

            CreateTextureViews(false);
        }
Beispiel #2
0
        public Texture3D(ImageLoader.Image image, int layer = 0)
        {
            Size        = image.GetSize(0);
            LayerMipmap = image.LayerMipmap;
            Format      = image.Format.DxgiFormat;

            var data = new DataBox[LayerMipmap.Mipmaps];

            for (int curMipmap = 0; curMipmap < LayerMipmap.Mipmaps; ++curMipmap)
            {
                var mip = image.Layers[layer].Mipmaps[curMipmap];
                var idx = curMipmap;
                data[idx].DataPointer = mip.Bytes;
                data[idx].SlicePitch  = (int)(mip.Size / mip.Depth);
                data[idx].RowPitch    = data[idx].SlicePitch / mip.Height;
            }

            handle = new SharpDX.Direct3D11.Texture3D(Device.Get().Handle, CreateTextureDescription(false, true), data);
            CreateTextureViews(false, true);
        }
Beispiel #3
0
        public TextureArray2D(ImageLoader.Image image)
        {
            Size = image.GetSize(0);
            Debug.Assert(Size.Depth == 1);
            LayerMipmap = image.LayerMipmap;
            Format      = image.Format.DxgiFormat;

            var data = new DataRectangle[LayerMipmap.Layers * LayerMipmap.Mipmaps];

            foreach (var lm in LayerMipmap.Range)
            {
                var mip = image.Layers[lm.Layer].Mipmaps[lm.Mipmap];
                var idx = GetSubresourceIndex(lm);
                data[idx].DataPointer = mip.Bytes;
                // The distance (in bytes) from the beginning of one line of a texture to the next line.
                data[idx].Pitch = (int)(mip.Size / mip.Height);
            }

            handle = new Texture2D(Device.Get().Handle, CreateTextureDescription(false), data);

            CreateTextureViews(false);
        }