public static T[,] MapReadTexture <T>(SlimDX.Direct3D10.Texture2D texture, int level) where T : struct { var d = texture.Map(level, SlimDX.Direct3D10.MapMode.Read, SlimDX.Direct3D10.MapFlags.None); var sd = texture.Description; var data = ReadTexture <T>(d, sd.Width, sd.Height); texture.Unmap(level); return(data); }
// SlimDX.Direct3D10 private SlimDX.Direct3D10.ShaderResourceView GetTexture(SlimDX.Direct3D10.Device device, int width, int height, SlimDX.Color4 color) { //create the texture SlimDX.Direct3D10.Texture2D texture = null; SlimDX.Direct3D10.Texture2DDescription desc2 = new SlimDX.Direct3D10.Texture2DDescription(); desc2.SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0); desc2.Width = width; desc2.Height = height; desc2.MipLevels = 1; desc2.ArraySize = 1; desc2.Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm; desc2.Usage = SlimDX.Direct3D10.ResourceUsage.Dynamic; desc2.BindFlags = SlimDX.Direct3D10.BindFlags.ShaderResource; desc2.CpuAccessFlags = SlimDX.Direct3D10.CpuAccessFlags.Write; texture = new SlimDX.Direct3D10.Texture2D(device, desc2); // fill the texture with rgba values SlimDX.DataRectangle rect = texture.Map(0, SlimDX.Direct3D10.MapMode.WriteDiscard, SlimDX.Direct3D10.MapFlags.None); if (rect.Data.CanWrite) { for (int row = 0; row < texture.Description.Height; row++) { int rowStart = row * rect.Pitch; rect.Data.Seek(rowStart, System.IO.SeekOrigin.Begin); for (int col = 0; col < texture.Description.Width; col++) { rect.Data.WriteByte((byte)color.Red); rect.Data.WriteByte((byte)color.Green); rect.Data.WriteByte((byte)color.Blue); rect.Data.WriteByte((byte)color.Alpha); } } } texture.Unmap(0); // create shader resource that is what the renderer needs SlimDX.Direct3D10.ShaderResourceViewDescription desc = new SlimDX.Direct3D10.ShaderResourceViewDescription(); desc.Format = texture.Description.Format; desc.Dimension = SlimDX.Direct3D10.ShaderResourceViewDimension.Texture2D; desc.MostDetailedMip = 0; desc.MipLevels = 1; SlimDX.Direct3D10.ShaderResourceView srv = new SlimDX.Direct3D10.ShaderResourceView(device, texture, desc); return(srv); }
public static void WriteTexture <T>(SlimDX.Direct3D10.Texture2D texture, T[,] data, int TSize) where T : struct { var dr = texture.Map(0, SlimDX.Direct3D10.MapMode.WriteDiscard, SlimDX.Direct3D10.MapFlags.None); int width = data.GetLength(1); if (dr.Pitch == data.GetLength(1) * TSize) { dr.Data.WriteRange(Common.Utils.Flatten(data)); } else { for (int y = 0; y < texture.Description.Height; y++) { dr.Data.WriteRange(Common.Utils.GetRow(data, y)); dr.Data.Seek(dr.Pitch - width * TSize, System.IO.SeekOrigin.Current); } } texture.Unmap(0); }
public static T[,] CopyReadTexture <T>(SlimDX.Direct3D10.Texture2D texture, int level) where T : struct { var copy = new SlimDX.Direct3D10.Texture2D(texture.Device, new SlimDX.Direct3D10.Texture2DDescription { ArraySize = texture.Description.ArraySize, BindFlags = SlimDX.Direct3D10.BindFlags.None, CpuAccessFlags = SlimDX.Direct3D10.CpuAccessFlags.Read, Format = texture.Description.Format, Width = texture.Description.Width, Height = texture.Description.Height, MipLevels = texture.Description.MipLevels, Usage = SlimDX.Direct3D10.ResourceUsage.Staging, SampleDescription = texture.Description.SampleDescription, OptionFlags = SlimDX.Direct3D10.ResourceOptionFlags.None }); texture.Device.CopyResource(texture, copy); var d = copy.Map(level, SlimDX.Direct3D10.MapMode.Read, SlimDX.Direct3D10.MapFlags.None); var sd = copy.Description; var data = ReadTexture <T>(d, sd.Width, sd.Height); copy.Unmap(level); copy.Dispose(); return(data); }