【问题标题】:How to copy a 32 bit red texture data to a texture of DXGI format DXGI_FORMAT_R32_FLOAT如何将 32 位红色纹理数据复制到 DXGI 格式的纹理 DXGI_FORMAT_R32_FLOAT
【发布时间】:2019-01-06 13:24:21
【问题描述】:

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

【问题讨论】:

    标签: directx-11 texture2d dxgi dds-format


    【解决方案1】:

    如果你想要一个带有红色像素的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。您使用了错误类型的纹理和贴图标志。

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2016-09-13
      • 1970-01-01
      • 2012-09-17
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多