• Advertisement
Sign in to follow this  

Using Texture2DArray and ShaderResourceView?

This topic is 2190 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm working on a shader that utilizes a Texture2DArray<float4> variable, but am having trouble setting it up in the C# code. I have a list of textures I want to load into the array, but am not sure how to proceed with actually putting them in the resource. Right now I have the following.


[CODE]
Log.BeginSection("Level.LoadTextureArray");

int mipLevels = tilesets[0].Texture.Description.MipLevels;
SlimDX.DXGI.Format format = tilesets[0].Texture.Description.Format;

Log.WriteLine("Mip Levels: {0}", mipLevels);
Log.WriteLine("Format: {0}", format);

Texture2DDescription stagingDescription = new Texture2DDescription
{
ArraySize = tilesets.Count,
Width = 512,
Height = 512,
BindFlags = BindFlags.None,
CpuAccessFlags = CpuAccessFlags.Write,
Format = format,
Usage = ResourceUsage.Staging,
MipLevels = mipLevels,
SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0)
};

//TextureCache = new Texture2D(App.Device, desc);
var stagingTexture = new Texture2D(App.Device, stagingDescription);

Log.BeginSection("Tileset Loop");
for (int i = 0; i < tilesets.Count; i++)
{
Tileset tileset = tilesets[i];

Log.WriteLine("Loading tileset {1} ({0})", tileset.Filename, i);

tileset.EnsureAssets();

var box = App.Device.ImmediateContext.MapSubresource(stagingTexture, 0, i, MapMode.Write, MapFlags.None);
App.Device.ImmediateContext.UpdateSubresource(box, tileset.Texture, 0);
App.Device.ImmediateContext.UnmapSubresource(stagingTexture, 0);


tileset.DisposeAssets();
}
Log.EndSection("Tileset Loop");

var destinationDescription = new Texture2DDescription
{
ArraySize = tilesets.Count,
MipLevels = mipLevels,
Format = format,
Width = 512,
Height = 512,
Usage = ResourceUsage.Default,
BindFlags = SlimDX.Direct3D11.BindFlags.ShaderResource,
CpuAccessFlags = CpuAccessFlags.None,
SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0)
};

TextureCache = new Texture2D(App.Device, destinationDescription);

App.Device.ImmediateContext.CopyResource(stagingTexture, TextureCache);

TextureCacheView = new ShaderResourceView(App.Device, TextureCache);

Log.EndSection("Level.LoadTextureArray");[/CODE]

This returns a "A first chance exception of type 'SlimDX.Direct3D11.Direct3D11Exception' occurred in SlimDX.dll" when I create the ShaderResourceView. Am I missing something, or doing something very wrong? TIA.

Share this post


Link to post
Share on other sites
Advertisement
I updated the code - something with how I am trying to copy the textures is not working...

[code]
var box = App.Device.ImmediateContext.MapSubresource(stagingTexture, 0, i, MapMode.Write, MapFlags.None);
App.Device.ImmediateContext.UpdateSubresource(box, tileset.Texture, 0);
App.Device.ImmediateContext.UnmapSubresource(stagingTexture, 0);
[/code]

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement