1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public static Texture2D CreateCubemapFromFile(string filename, out ShaderResourceView view)
=> LoadTexture(filename, out view, 6, ResourceOptionFlags.TextureCube);
public static Texture2D CreateTexture(string filename, out ShaderResourceView resourceView)
=> LoadTexture(filename, out resourceView, 1, ResourceOptionFlags.GenerateMipMaps);
private static Texture2D LoadTexture(string filename, out ShaderResourceView resourceView,
int arraySize = 1, ResourceOptionFlags optFlags = ResourceOptionFlags.None)
{
var bitmap = new Bitmap(filename);
if (bitmap.PixelFormat != PixelFormat.Format32bppArgb)
bitmap = bitmap.Clone(new System.Drawing.Rectangle(0, 0, bitmap.Width,
bitmap.Height), PixelFormat.Format32bppArgb);
var data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0,
bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
var texture2D = new Texture2D(Video.GraphicDevice, new Texture2DDescription()
{
Width = bitmap.Width,
Height = bitmap.Height,
ArraySize = arraySize,
BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource,
Usage = SharpDX.Direct3D11.ResourceUsage.Default,
CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None,
Format = SharpDX.DXGI.Format.B8G8R8A8_UNorm,
MipLevels = 1,
OptionFlags = optFlags,
SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
}, new DataRectangle(data.Scan0, data.Stride));
bitmap.UnlockBits(data);
bitmap.Dispose();
resourceView = new ShaderResourceView(Video.GraphicDevice, texture2D);
return texture2D;
}
|