Jump to content

  • Log In with Google      Sign In   
  • Create Account

Awesome job so far everyone! Please give us your feedback on how our article efforts are going. We still need more finished articles for our May contest theme: Remake the Classics

#Actualwlastas

Posted 05 April 2012 - 06:31 AM

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

blank textures for the transfer to the shader
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
			});

Read the texture from disk and write it into an array with index id:
  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);

#8wlastas

Posted 04 April 2012 - 06:52 PM

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

blank textures for the transfer to the shader
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 =0, //auto
				OptionFlags = ResourceOptionFlags.None
			});

Read the texture from disk and write it into an array with index id:
  t2d_tmp = Texture2D.FromFile(device, full_name, new ImageLoadInformation()
			{
				Format = Format.R8G8B8A8_UNorm,
				CpuAccessFlags = CpuAccessFlags.Read,
				MipLevels = 0, //auto
				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);

#7wlastas

Posted 04 April 2012 - 06:50 PM

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

blank textures for the transfer to the shader
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 =0, //auto
				OptionFlags = ResourceOptionFlags.None
			});

Read the texture from disk and write it into an array with index id:
  t2d_tmp = Texture2D.FromFile(device, full_name, new ImageLoadInformation()
			{
				Format = Format.R8G8B8A8_UNorm,
				CpuAccessFlags = CpuAccessFlags.Read,
				MipLevels = 0, //auto
				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);
	 if (id == tiles_names.Count - 1)
				   ShaderResourceView  tiles = new ShaderResourceView(device, t2d_tiles);

#6wlastas

Posted 04 April 2012 - 06:50 PM

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

blank textures for the transfer to the shader
Attention is important! here strongly indicate 1 as MipLevels :
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 =0, //auto
				OptionFlags = ResourceOptionFlags.None
			});

Read the texture from disk and write it into an array with index id:
  t2d_tmp = Texture2D.FromFile(device, full_name, new ImageLoadInformation()
			{
				Format = Format.R8G8B8A8_UNorm,
				CpuAccessFlags = CpuAccessFlags.Read,
				MipLevels = 0, //auto
				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);
	 if (id == tiles_names.Count - 1)
				   ShaderResourceView  tiles = new ShaderResourceView(device, t2d_tiles);

#5wlastas

Posted 04 April 2012 - 06:49 PM

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

blank textures for the transfer to the shader
Attention is important! here strongly indicate 1 as MipLevels :
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 =0, //auto
				OptionFlags = ResourceOptionFlags.None
			});

Read the texture from disk and write it into an array with index id:
  t2d_tmp = Texture2D.FromFile(device, full_name, new ImageLoadInformation()
			{
				Format = Format.R8G8B8A8_UNorm,
				CpuAccessFlags = CpuAccessFlags.Read,
				MipLevels = 0, //auto
				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);
	 if (id == tiles_names.Count - 1)
			{
			   ShaderResourceView  tiles = new ShaderResourceView(device, t2d_tiles);
				context.GenerateMips(tiles); //
			}

#4wlastas

Posted 04 April 2012 - 06:55 AM

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

blank textures for the transfer to the shader
Attention is important! here strongly indicate 1 as MipLevels :
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, // << This method only works with this value - I do not know this is a bug or a feature
				OptionFlags = ResourceOptionFlags.None
			});

Read the texture from disk and write it into an array with index id:
  t2d_tmp = Texture2D.FromFile(device, full_name, new ImageLoadInformation()
			{
				Format = Format.R8G8B8A8_UNorm,
				CpuAccessFlags = CpuAccessFlags.Read,
				MipLevels = 1, //
				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);
     if (id == tiles_names.Count - 1)
		    {
			   ShaderResourceView  tiles = new ShaderResourceView(device, t2d_tiles);
			    context.GenerateMips(tiles); //
		    }

PARTNERS