Как скопировать 32-битные данные красной текстуры в текстуру формата DXGI DXGI_FORMAT_R32_FLOAT - PullRequest
0 голосов
/ 06 января 2019

У меня есть БАЙТ-буфер 32-битной простой текстуры красного цвета. Я хочу создать текстуру в DirectX 11, где целевой формат текстуры - DXGI_FORMAT_R32_FLOAT. Я пытался с функцией контекста устройства Map (), но при сохранении ресурса в файл dds он показывает черный. Кто-нибудь даст мне руководство, как я могу написать простую 32-битную красную текстуру в DirectX 11?

1 Ответ

0 голосов
/ 06 января 2019

Если вам нужна текстура 1x1 в формате DXGI_FORMAT_R32_FLOAT с красным пикселем, вы можете просто создать ее в коде:

    using Microsoft::WRL::ComPtr;

    static const float s_pixel = 1.f;

    D3D11_SUBRESOURCE_DATA initData = { &s_pixel, sizeof(float), 0 };

    D3D11_TEXTURE2D_DESC desc = {};
    desc.Width = desc.Height = desc.MipLevels = desc.ArraySize = 1;
    desc.Format = DXGI_FORMAT_R32_FLOAT;
    desc.SampleDesc.Count = 1;
    desc.Usage = D3D11_USAGE_IMMUTABLE;
    desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;

    ComPtr<ID3D11Texture2D> tex;
    HRESULT hr = mDevice->CreateTexture2D(&desc, &initData, tex.GetAddressOf());

    if (SUCCEEDED(hr))
    {
        D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc = {};
        SRVDesc.Format = desc.Format;
        SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
        SRVDesc.Texture2D.MipLevels = 1;

        hr = mDevice->CreateShaderResourceView(tex.Get(), &SRVDesc, pResult);
    }

    return hr;

Причина «черной текстуры» уже рассмотрена здесь . Вы используете неправильный вид текстур и флагов карты.

...