gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:35:25 26 4
gpt4 key购买 nike

出于某种原因,当我尝试创建 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com