Sign in to follow this  
wlastas

DeviceContext.UpdateSubresource to create Texture2dArray

Recommended Posts

wlastas    104
Hello!
While I waited for an answer I'll figured out with your question and now I hasten to share the code - maybe he needed someone

have a vertex shader, which use a second texture in the array:
[CODE]Texture2DArray tiles : register( t0 );
SamplerState tstate: register( s0 );
float4 SectorPS(Out_pos4_normal4_uv input) : SV_Target
{
return tiles.Sample(tstate, float3(input.uv, 1));
}[/CODE]

blank textures for the transfer to the shader
[CODE]Texture2D t2d_tiles = new Texture2D(device, new Texture2DDescription()
{
BindFlags = BindFlags.ShaderResource,
ArraySize = tiles_names.Count, // << is the number of textures that will be written into an array
Width = 256,
Height = 256,
Usage = ResourceUsage.Default,
CpuAccessFlags = CpuAccessFlags.None,
Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm,
SampleDescription = new SlimDX.DXGI.SampleDescription(1, 0),
MipLevels =1, //with any other value does not work - I do not know this is a bug or a feature
OptionFlags = ResourceOptionFlags.None
});[/CODE]

Read the texture from disk and write it into an array with index id:
[CODE]
t2d_tmp = Texture2D.FromFile(device, full_name, new ImageLoadInformation()
{
Format = Format.R8G8B8A8_UNorm,
CpuAccessFlags = CpuAccessFlags.Read,
MipLevels = 1, //with any other value does not work - I do not know this is a bug or a feature
Usage = ResourceUsage.Staging
});

DataBox tmp_db = context.MapSubresource(t2d_tmp, 0, MapMode.Read, MapFlags.None); // << 0 this t2d_tmp mip lvl
context.UpdateSubresource(tmp_db, t2d_tiles, id);
context.UnmapSubresource(t2d_tmp, 0);
if (id == tiles_names.Count - 1) //if last textur in array
ShaderResourceView tiles = new ShaderResourceView(device, t2d_tiles);
[/CODE]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this