2

我正在尝试加载一个基本纹理(1024x1024)并用纯色填充它:

unsigned char *texArray = (unsigned char *)malloc(4 * 1024 * 1024 * sizeof(unsigned char));

for (int i = 0; i < 1024 * 1024 * 4; i++) {
    texArray[i] = (unsigned char)125;
}

D3D11_TEXTURE2D_DESC desc;
desc.Width = 1024;
desc.Height = 1024;
desc.MipLevels = desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.MiscFlags = 0;

ID3D11Texture2D *pTexture = NULL;

D3D11_SUBRESOURCE_DATA TexInitData;
ZeroMemory(&TexInitData, sizeof(D3D11_SUBRESOURCE_DATA));
TexInitData.pSysMem = texArray;
TexInitData.SysMemPitch = static_cast<UINT>( 1024*4 );
TexInitData.SysMemSlicePitch = static_cast<UINT>( 4 * 1024 * 1024 * sizeof(unsigned char) );

GraphicsBase.DXDevice->CreateTexture2D( &desc, &TexInitData, &pTexture );
GraphicsBase.DXDevice->CreateShaderResourceView(pTexture, NULL, &DXTextureContent);

当我使用 时DXTextureContent,我的纹理看起来都是白色的。我用 125/125/125/125 为 RGBA 填充纹理。我在这里错过了什么吗?

4

2 回答 2

3

D3D11_CREATE_DEVICE_DEBUG您应该始终使用在设备创建时设置的标志来开发 DX11 应用程序。

有了它,每个 D3D 调用都尽可能详细,并且您的 CreateTexture2D 将在此处失败,并显示无效参数错误代码。

D3D11 引入了一些类助手来初始化资源描述,使用CD3D11_TEXTURE2D_DESC,你保证没有未初始化的成员。

于 2013-08-24T11:44:40.377 回答
1

一开始您还没有设置 TexInitData 的 SysMemPitch。间距为 0 可能不是您所追求的,并且可能会影响它填充纹理的方式。您可能希望将此成员设置为 (1024 * 4)。

于 2013-07-26T19:34:27.317 回答