DirectX 11: Почему происходит ошибка, когда я пытаюсь использовать текстуру, написанную вручную?

Рейтинг: 0Ответов: 0Опубликовано: 06.02.2023

Моя программа представляла собой текстурированный «куб». Текстура эта бралась из файла формата 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 и получил это. Куб отображается, но не так, как я ожидал: с четырьмя цветными пикселями со всех сторон. введите сюда описание изображения

Ответы

Ответов пока нет.