如何将32位红色纹理数据复制到DXGI格式DXGI_FORMAT_R32_FLOAT

时间:2019-01-06 13:24:22

标签: directx-11 texture2d dxgi dds-format

我有一个32位红色简单纹理的BYTE缓冲区。我想在DirectX 11中创建一个纹理,其中目标纹理格式为DXGI_FORMAT_R32_FLOAT。我尝试使用设备上下文Map()函数,但是在将资源保存到dds文件时却显示为黑色。有人会给我一个指导方针,如何在DirectX 11中编写简单的32位红色纹理?

1 个答案:

答案 0 :(得分:0)

如果您想要DXGI_FORMAT_R32_FLOAT格式的1x1纹理(带有红色像素),则可以在代码中创建它:

    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;
  

“黑色纹理”的原因已得到解决here。您使用了错误的纹理和贴图标记。