【问题标题】:How to create 2D texture using DXGI format DXGI_FORMAT_R1_UNORM?如何使用 DXGI 格式 DXGI_FORMAT_R1_UNORM 创建 2D 纹理?
【发布时间】:2020-01-30 11:45:24
【问题描述】:

我想使用 dxgi 格式 DXGI_FORMAT_R1_UNORM 在 DirectX 11 中创建每像素 1 位单色纹理 2D 我已尝试以下方法,但显示以下错误:

D3D11 错误:ID3D11Device::CreateTexture2D:设备不支持格式 R1_UNORM。 [状态创建错误#92:CREATETEXTURE2D_UNSUPPORTEDFORMAT] D3D11:BREAK 为上一条消息启用,即:[ERROR STATE_CREATION #92: CREATETEXTURE2D_UNSUPPORTEDFORMAT]

我试图创建一个用于渲染的纹理,但正如您在上面看到的那样,设备不支持“R1_UNORM”。那么,应该使用哪种格式来创建纹理 2D?

bitmapPixels 是 BYTE 中 1 位颜色数组的动态内存,由正在审查中的算法编写而成 Code Review: Bit Packing algorithm of 1-Bit monochrome image

D3D11_TEXTURE2D_DESC desc;
ZeroMemory(&desc, sizeof(desc));
desc.Width = 32;
desc.Height = 32;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R1_UNORM;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.MipLevels = 1;
desc.SampleDesc.Count = 1;
desc.MiscFlags = 0;

const D3D11_SUBRESOURCE_DATA subResourceData = {bitmapPixels, 4, 4 * desc.Height};
device->CreateTexture2D(&desc, &subResourceData, &texture2D);

【问题讨论】:

    标签: c++ directx-11 texture2d dxgi


    【解决方案1】:

    ID3D11Device::CheckFormatSupport

    在已安装的视频设备上获得给定格式的支持。

    ...

    D3D11_FORMAT_SUPPORT 枚举值的位域,描述已安装设备如何支持指定格式。这些值是 ORed 在一起的。

    ...

    D3D11_FORMAT_SUPPORT_TEXTURE2D 支持二维纹理资源。

    例如,这些是 Intel(R) HD Graphics 620 支持的格式(只是随机选择了一个 GPU;那里没有 DXGI_FORMAT_R1_UNORM):

    DXGI_FORMAT_R32G32B32A32_TYPELESS
    DXGI_FORMAT_R32G32B32A32_FLOAT
    DXGI_FORMAT_R32G32B32A32_UINT
    DXGI_FORMAT_R32G32B32A32_SINT
    DXGI_FORMAT_R32G32B32_TYPELESS
    DXGI_FORMAT_R32G32B32_FLOAT
    DXGI_FORMAT_R32G32B32_UINT
    DXGI_FORMAT_R32G32B32_SINT
    DXGI_FORMAT_R16G16B16A16_TYPELESS
    DXGI_FORMAT_R16G16B16A16_FLOAT
    DXGI_FORMAT_R16G16B16A16_UNORM
    DXGI_FORMAT_R16G16B16A16_UINT
    DXGI_FORMAT_R16G16B16A16_SNORM
    DXGI_FORMAT_R16G16B16A16_SINT
    DXGI_FORMAT_R32G32_TYPELESS
    DXGI_FORMAT_R32G32_FLOAT
    DXGI_FORMAT_R32G32_UINT
    DXGI_FORMAT_R32G32_SINT
    DXGI_FORMAT_R32G8X24_TYPELESS
    DXGI_FORMAT_D32_FLOAT_S8X24_UINT
    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS
    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT
    DXGI_FORMAT_R10G10B10A2_TYPELESS
    DXGI_FORMAT_R10G10B10A2_UNORM
    DXGI_FORMAT_R10G10B10A2_UINT
    DXGI_FORMAT_R11G11B10_FLOAT
    DXGI_FORMAT_R8G8B8A8_TYPELESS
    DXGI_FORMAT_R8G8B8A8_UNORM
    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
    DXGI_FORMAT_R8G8B8A8_UINT
    DXGI_FORMAT_R8G8B8A8_SNORM
    DXGI_FORMAT_R8G8B8A8_SINT
    DXGI_FORMAT_R16G16_TYPELESS
    DXGI_FORMAT_R16G16_FLOAT
    DXGI_FORMAT_R16G16_UNORM
    DXGI_FORMAT_R16G16_UINT
    DXGI_FORMAT_R16G16_SNORM
    DXGI_FORMAT_R16G16_SINT
    DXGI_FORMAT_R32_TYPELESS
    DXGI_FORMAT_D32_FLOAT
    DXGI_FORMAT_R32_FLOAT
    DXGI_FORMAT_R32_UINT
    DXGI_FORMAT_R32_SINT
    DXGI_FORMAT_R24G8_TYPELESS
    DXGI_FORMAT_D24_UNORM_S8_UINT
    DXGI_FORMAT_R24_UNORM_X8_TYPELESS
    DXGI_FORMAT_X24_TYPELESS_G8_UINT
    DXGI_FORMAT_R8G8_TYPELESS
    DXGI_FORMAT_R8G8_UNORM
    DXGI_FORMAT_R8G8_UINT
    DXGI_FORMAT_R8G8_SNORM
    DXGI_FORMAT_R8G8_SINT
    DXGI_FORMAT_R16_TYPELESS
    DXGI_FORMAT_R16_FLOAT
    DXGI_FORMAT_D16_UNORM
    DXGI_FORMAT_R16_UNORM
    DXGI_FORMAT_R16_UINT
    DXGI_FORMAT_R16_SNORM
    DXGI_FORMAT_R16_SINT
    DXGI_FORMAT_R8_TYPELESS
    DXGI_FORMAT_R8_UNORM
    DXGI_FORMAT_R8_UINT
    DXGI_FORMAT_R8_SNORM
    DXGI_FORMAT_R8_SINT
    DXGI_FORMAT_A8_UNORM
    DXGI_FORMAT_R9G9B9E5_SHAREDEXP
    DXGI_FORMAT_R8G8_B8G8_UNORM
    DXGI_FORMAT_G8R8_G8B8_UNORM
    DXGI_FORMAT_BC1_TYPELESS
    DXGI_FORMAT_BC1_UNORM
    DXGI_FORMAT_BC1_UNORM_SRGB
    DXGI_FORMAT_BC2_TYPELESS
    DXGI_FORMAT_BC2_UNORM
    DXGI_FORMAT_BC2_UNORM_SRGB
    DXGI_FORMAT_BC3_TYPELESS
    DXGI_FORMAT_BC3_UNORM
    DXGI_FORMAT_BC3_UNORM_SRGB
    DXGI_FORMAT_BC4_TYPELESS
    DXGI_FORMAT_BC4_UNORM
    DXGI_FORMAT_BC4_SNORM
    DXGI_FORMAT_BC5_TYPELESS
    DXGI_FORMAT_BC5_UNORM
    DXGI_FORMAT_BC5_SNORM
    DXGI_FORMAT_B5G6R5_UNORM
    DXGI_FORMAT_B5G5R5A1_UNORM
    DXGI_FORMAT_B8G8R8A8_UNORM
    DXGI_FORMAT_B8G8R8X8_UNORM
    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM
    DXGI_FORMAT_B8G8R8A8_TYPELESS
    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
    DXGI_FORMAT_B8G8R8X8_TYPELESS
    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
    DXGI_FORMAT_BC6H_TYPELESS
    DXGI_FORMAT_BC6H_UF16
    DXGI_FORMAT_BC6H_SF16
    DXGI_FORMAT_BC7_TYPELESS
    DXGI_FORMAT_BC7_UNORM
    DXGI_FORMAT_BC7_UNORM_SRGB
    DXGI_FORMAT_AYUV
    DXGI_FORMAT_Y416
    DXGI_FORMAT_NV12
    DXGI_FORMAT_P010
    DXGI_FORMAT_P016
    DXGI_FORMAT_420_OPAQUE
    DXGI_FORMAT_YUY2
    DXGI_FORMAT_Y216
    DXGI_FORMAT_AI44
    DXGI_FORMAT_IA44
    DXGI_FORMAT_P8
    DXGI_FORMAT_A8P8
    DXGI_FORMAT_B4G4R4A4_UNORM
    

    【讨论】:

    • 那么,是否可以渲染 1 bpp 或者我必须为其他格式准备缓冲区?
    【解决方案2】:

    DXGI_FORMAT_R1_UNORM 不受任何 Direct3D 设备支持。它仅存在于一些旧的 Direct3D 10.0 时代的 Windows 10 GDI 字体互操作,并且自 Direct3D 10.1 以来基本上未使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2017-05-28
      • 2018-03-31
      • 1970-01-01
      • 2012-08-31
      相关资源
      最近更新 更多