DirectX 11: Почему происходит ошибка, когда я пытаюсь использовать текстуру, написанную вручную?
Моя программа представляла собой текстурированный «куб». Текстура эта бралась из файла формата PNG, используя метод D3DX11CreateShaderResourceViewFromFile
. Всё отлично работало, пока я не попробовал вручную «написать» простую 2x2 текстуру и использовать её.
void InitTextures()
{
//D3DX11CreateShaderResourceViewFromFile(dev, L"texture.png", NULL, NULL, &pTexture, NULL);
ID3D11Texture2D* theTexture;
D3D11_TEXTURE2D_DESC texDesc;
ZeroMemory(&texDesc, sizeof(texDesc));
texDesc.Width = 2;
texDesc.Height = 2;
texDesc.MipLevels = 1;
texDesc.ArraySize = 1;
texDesc.Format = DXGI_FORMAT_R8G8B8A8_UINT;
texDesc.SampleDesc.Count = 1;
texDesc.SampleDesc.Quality = 0;
texDesc.Usage = D3D11_USAGE_DEFAULT;
texDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
texDesc.CPUAccessFlags = 0;
texDesc.MiscFlags = 0;
int texData[4][4] = {
{ 0, 255, 0, 0 },
{ 0, 0, 255, 0 },
{ 0, 0, 255, 0 },
{ 0, 255, 0, 0 },
};
D3D11_SUBRESOURCE_DATA theData;
theData.pSysMem = &texData;
theData.SysMemPitch = sizeof(int) * 4;
theData.SysMemSlicePitch = 0;
dev->CreateTexture2D(&texDesc, &theData, &theTexture);
dev->CreateShaderResourceView(theTexture, NULL, &pTexture);
// ...
}
Показываться стало лишь цвет фона (куб исчез). Подскажите, пожалуйста, что не так.
ИЗМЕНЕНО Я установил texDesc.Format на DXGI_FORMAT_R8G8B8A8_UNORM, а также изменил тип массива с int на uint8_t и получил это. Куб отображается, но не так, как я ожидал: с четырьмя цветными пикселями со всех сторон.
Источник: Stack Overflow на русском