我需要同时将Texture2D和TextureCube传递到我的像素着色器。
我以前发送的是纹理数组,但发现我还不能发送TextureCube。
This question提到了一种称为绑定(bind)的东西,但是我无法找到更多有关此的信息,并且想知道是否有人可以为我指出解决该问题的方向。
谢谢。
编辑 - -
尝试实现凯撒的建议后,以下代码导致错误。
尝试读取着色器时的一次机会异常,问题行很简单
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);
重新编辑----
重写了确切的代码...这次工作了,不知道为什么。非常感谢你。
最佳答案
您可以在着色器文件中注册多个纹理,如下所示
Texture2D texture04 : register( t0 );
TextureCube myCubeMap : register( t1 );
t0
和t1
指定注册表号,因此您使用该号码作为PSSetShaderResources
的第一个参数当您想在C++代码中设置
t0
时,您可以这样做pImmediateContext->PSSetShaderResources( 0, 1, &(texture) );
当您想要设置
t1
时,您可以像这样pImmediateContext->PSSetShaderResources( 1, 1, &(texture) );