コード例 #1
0
 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);
 }
コード例 #2
0
        // 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);
        }
コード例 #3
0
        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);
        }
コード例 #4
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);
 }