代码之家  ›  专栏  ›  技术社区  ›  Questioning

绑定Texture2D和TextureCube

  •  3
  • Questioning  · 技术社区  · 11 年前

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

    我之前发送了一个纹理数组,但发现我无法发送像这样的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 回复  |  直到 7 年前
        1
  •  7
  •   Caesar    11 年前

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

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

    这个 t0 t1 指定注册表编号,然后使用该编号作为 PSSetShaderResources

    当您想要设置 t0时间 在你的C++代码中,你是这样做的

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

    当你想设置 时间t1 你这样做

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