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); }
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); }
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); }