c++ - 绑定(bind) Texture2D 和 TextureCube

标签 c++ directx shader hlsl directx-11

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

我之前发送了一个纹理数组,但发现我无法像这样发送一个 textureCube。

This question提到了一种叫做绑定(bind)的东西,但我找不到更多关于这方面的信息,想知道是否有人可以指出我解决这个问题的方向。

谢谢。

编辑---- 在尝试实现 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);

重新编辑---- 重写了确切的代码……这次成功了,不知道为什么。非常感谢。

最佳答案

您可以像这样在着色器文件中注册多个纹理

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

t0t1 指定注册表编号,因此您使用该编号作为 PSSetShaderResources

的第一个参数

当你想在你的 C++ 代码中设置 t0 时,你可以这样做

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

当你想设置t1时,你可以这样做

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

关于c++ - 绑定(bind) Texture2D 和 TextureCube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914812/

相关文章:

c++ - 在堆上初始化的指针数据成员

c++ - Qt5:QPushButon大小设置

C++ 模板、虚函数、空基

javascript - 更新数据纹理统一时,所有点都变为 0,0

three.js - 如何在 Threejs 中组合着色器效果

c++ - visual c++,没有编译器优化的数字代码给出错误的结果

c++ - direct3d 初始化失败/c++

c++ - 写一个 AI : screen capture and input

c++ - 从 HDC 读取像素

silverlight - 在 XNA 中用于简单 2D SpriteBatch 绘图的像素着色器应该使用什么顶点着色器代码?