绑定Texture2D和TextureCube

时间:2013-04-10 00:16:52

标签: c++ directx shader hlsl directx-11

我需要同时将Texture2D和TextureCube传递给我的像素着色器。

我之前发送了一系列纹理,但发现我无法发送纹理数据块。

This question提到了一些叫做绑定的内容,但我无法找到更多有关此内容的信息,并且想知道是否有人可以指出我解决此问题的方法。

谢谢。

编辑---- 在尝试实施Caesar的建议后,以下代码会导致错误。 尝试读取着色器时的第一次机会异常,问题行只是

Texture2D texture04 : register( t0 );

之后会导致崩溃:

D3DX11CompileFromFile("Data/Shaders/Effects.fx", 0, 0, "VS", "vs_4_0", 0, 0, 0, &VS_Buffer, 0, 0);
D3DX11CompileFromFile("Data/Shaders/Effects.fx", 0, 0, "PS", "ps_4_0", 0, 0, 0, &PS_Buffer, 0, 0);
d3dDevice_->CreateVertexShader(VS_Buffer->GetBufferPointer(), VS_Buffer->GetBufferSize(), NULL, &VS);

重新编辑---- 重写了确切的代码...这次工作,不明白为什么。非常感谢你。

1 个答案:

答案 0 :(得分:6)

您可以在着色器文件中注册多个纹理,如此

Texture2D texture04 : register( t0 );    
TextureCube myCubeMap : register( t1 );

t0t1指定注册号,因此您使用该号码作为PSSetShaderResources的第一个参数

如果要在C ++代码中设置t0,可以这样做

pImmediateContext->PSSetShaderResources( 0, 1, &(texture) );

当你想设置t1时,你会这样做

pImmediateContext->PSSetShaderResources( 1, 1, &(texture) );