C++ 无法在DirectX11上创建1D纹理

C++ 无法在DirectX11上创建1D纹理,c++,directx-11,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.Bind

由于某种原因,当我尝试创建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是一个ID3D11设备。我可以创建3d和2d纹理,但制作1d纹理会导致程序崩溃。有人能解释一下原因吗?

由于不能在图形上下文中设置用作SRV、UAV或RTV,因此使用情况分级纹理不能有任何BindFlags。如果需要暂存纹理,请将BindFlags设置为0;如果只需要可以绑定到上下文的“正常”纹理,请将用法设置为D3D11_用法_默认值

USAGE_STAGING resources是CPU在复制到USAGE_默认资源之前填充数据的地方,或者是GPU拷贝将数据从GPU返回CPU的目的地


该错误的确切原因将在由打印的消息中解释;将来使用它来查找这些错误的原因。

不要使用断言来检查HRESULT,也绝对不要使用相等性测试。使用
成功
失败
宏。正如在另一个答案中所指出的,如果启用了,则会报告此失败的原因。将BindFlags设置为0并不能解决此问题。此外,我还需要使用转移,因为我正在以编程方式从CPU填充数据。我尝试设置调试层,但得到的只是信息消息(没有错误或警告)。因为我的环境不是Visual Studio,所以我使用DebugView获取日志消息。不过,我发现了问题。我在代码的前面尝试遵从一个空ptr!我想我会把你的作为答案,因为这是唯一的答案哈哈。