Jump to content
  • Advertisement
Sign in to follow this  
Guest jsedlak

Using Texture2DArray and ShaderResourceView?

This topic is 2522 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

Guest jsedlak
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.



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;

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


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
Guest jsedlak
I updated the code - something with how I am trying to copy the textures is not working...


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

Share this post


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

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!