【问题标题】:How to create texture using DirectX-11 with DXGI_FORMAT_420_OPAQUE format?如何使用具有 DXGI_FORMAT_420_OPAQUE 格式的 DirectX-11 创建纹理?
【发布时间】:2014-06-04 18:16:27
【问题描述】:

我在从 I420 数据创建 DirectX 纹理时遇到问题。当我尝试添加纹理时,我的程序崩溃了。我正在 WinRT Metro 应用程序上使用 Windows 8.0。你能帮我吗?我的代码如下:

D3D11_TEXTURE2D_DESC texDesc = {};
texDesc.Width = 352;
texDesc.Height = 288;
texDesc.MipLevels = 1;

byte *bitmapData;
int datasize = read_whole_file_into_array(&bitmapData , "1.i420"); //bitmapData contains the I420 frame

D3D11_SUBRESOURCE_DATA frameData;
frameData.pSysMem = bitmapData;
frameData.SysMemSlicePitch = 0;
//frameData.SysMemPitch = texDesc.Width; //Unsure about it

texDesc.ArraySize = 1;
texDesc.Format = DXGI_FORMAT_420_OPAQUE;
texDesc.SampleDesc.Count = 1;
texDesc.SampleDesc.Quality = 0;
texDesc.BindFlags =  D3D11_BIND_DECODER;
texDesc.MiscFlags = 0;
texDesc.Usage = D3D11_USAGE_DEFAULT;
texDesc.CPUAccessFlags = 0;

m_d3dDevice->CreateTexture2D (&texDesc, &frameData, &m_background);

m_spriteBatch->AddTexture(m_background.Get());

请帮忙。提前致谢。

附加信息:这个 MSDN link 包含类似的问题,但是在我的情况下,我已经有一个包含帧的字节数组。我已经在那个论坛上问过类似的问题。

【问题讨论】:

    标签: c++ windows-runtime textures video-processing directx-11


    【解决方案1】:

    根据文档here

    应用程序不能使用 CPU 来映射资源,然后访问资源中的数据。您不能使用这种格式的着色器。

    创建纹理时,如果需要在着色器中访问它,还需要设置标志:

    texDesc.BindFlags =  D3D11_BIND_DECODER | D3D11_BIND_SHADER_RESOURCE;
    

    然后,当你创建纹理时,请确保检查结果以查看是否创建了纹理:

    HRESULT hr = m_d3dDevice->CreateTexture2D (&texDesc, &frameData, &m_background);
    

    在这种情况下,它会警告您无法创建纹理(并且在您使用调试层时会收到此消息):

    D3D11 错误:ID3D11Device::CreateTexture2D:格式 (0x6a, 420_OPAQUE) 无法绑定为 ShaderResource 或转换为可绑定为 ShaderResource 的格式。因此这种格式不能支持 D3D11_BIND_SHADER_RESOURCE。 [STATE_CREATION 错误 #92:CREATETEXTURE2D_UNSUPPORTEDFORMAT]

    D3D11 错误:ID3D11Device::CreateTexture2D:返回 E_INVALIDARG,表示传递了无效参数。 [STATE_CREATION 错误 #104:CREATETEXTURE2D_INVALIDARG_RETURN]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      相关资源
      最近更新 更多