c++ - 无法在 DirectX11 上创建一维纹理

标签 c++ directx-11

出于某种原因,当我尝试创建 1d 纹理时,下面的代码崩溃了。

D3D11_TEXTURE1D_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_TEXTURE1D_DESC));
desc.Width = 64;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_SNORM;
desc.Usage = D3D11_USAGE_STAGING;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;

HRESULT hr = D3DDev_0001->CreateTexture1D(&desc, NULL, &texture); //crashes here
assert(hr == S_OK);

其中 D3DDev_0001 是一个 ID3D11Device。我能够创建 3d 和 2d 纹理,但是创建 1d 纹理会导致程序崩溃。谁能解释一下为什么?

最佳答案

USAGE_STAGING 纹理不能有任何 BindFlags,因为它不能在图形上下文中设置以用作 SRV、UAV 或 RTV。如果您想要一个 STAGING 纹理,请将 BindFlags 设置为 0,或者如果您只想要一个可以绑定(bind)到上下文的“正常”纹理,则将 Usage 设置为 D3D11_USAGE_DEFAULT。

USAGE_STAGING 资源要么是供 CPU 在复制到 USAGE_DEFAULT 资源之前填充数据,要么是 GPU 拷贝将数据从 GPU 返回到 CPU 的目的地。

此错误的确切原因已在 "D3D11's Debug Layer" 打印的消息中进行了解释;将来用它来查找这些错误的原因。

关于c++ - 无法在 DirectX11 上创建一维纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33624063/

相关文章:

c++ - 如何在 Visual Studio 中为现有文件设置默认编码?

c++ - 传递隐式函数指针

c++ - 无法打开包含文件 : 'dxgi1_2.h' : No such file or directory

c++ - 在 directX 11.1 中加载纹理

c++ - 静态初始化 C++

c++ - 在 C++ 中将对象数组设置为 null

c++ - 为 GCC 创建正确的 D3D11 库文件

c++ - DirectX11 发布 VS 2010 C++

c++ - 像素着色器中的 SamplerState 问题

c++ - 构造函数和析构函数调用