我有一个随时可用的Texture2D;我有一个明显工作的着色器纹理采样器和着色器纹理变量,我可以将Texture2D放入其中。
唯一的问题是,我不知道如何在DirectX11中将纹理加载到着色器中 - 而且谷歌没有任何帮助,或者只是我无法构建好的搜索词。
我需要的是:将采用Texture2D并将其加载到着色器中的代码。例如,关于如何操作的链接。
无论如何,这是我的着色器代码:
cbuffer CameraSet : register(b0)
{
float4x4 ViewProj ;
} ;
cbuffer MeshSet : register(b1)
{
float4x4 World ;
texture2D Texture ;
SamplerState MeshTextureSampler
{
Filter = MIN_MAG_MIP_LINEAR ;
AddressU = WRAP ;
AddressV = WRAP ;
} ;
} ;
struct VShaderOutput
{
float4 WorldPosition : POSITION ;
float4 ScreenPosition : SV_POSITION ;
float2 UV : TEXCOORD;
} ;
VShaderOutput VShader( float4 position : POSITION, float2 uv : TEXCOORD )
{
VShaderOutput r ;
r.WorldPosition = mul( position, World ) ;
r.ScreenPosition = mul( r.WorldPosition, ViewProj ) ;
r.UV.x = abs( uv.x ) ;
r.UV.y = abs( uv.y ) ;
return r ;
}
struct PShaderOutput
{
float4 SV_Target : SV_TARGET ;
float SV_Depth : SV_DEPTH ;
};
PShaderOutput PShader( VShaderOutput input )
{
PShaderOutput r ;
r.SV_Depth = input.ScreenPosition.z;
r.SV_Target = Texture.Sample( MeshTextureSampler, input.UV ) ;
return r ;
}
感谢。
答案 0 :(得分:2)
......如果是
context.PixelShader.SetShaderResource(TextureShaderResourceView,0);
我想我刚回答了自己的问题。但为什么数组值'0'有效?
答案 1 :(得分:0)
我使用2个着色器资源:
HLSL:
Texture2D<float4> Self : register(t0);
Texture2D<float4> Other : register(t1);
CS:
device.ImmediateContext.ComputeShader.SetShaderResource(resourceViewSelf, 0);
device.ImmediateContext.ComputeShader.SetShaderResource(resourceViewOther, 1);
不知怎的,它有效......