如何创建swapchain格式DXGI_FORMAT_420_OPAQUE?

时间:2017-09-21 08:12:05

标签: directx-11

以前,swapchain设置为RGB32格式,效果很好。

我想接收yv12数据并进行渲染。

所以我将swapChain格式更改为DXGI_FORMAT_420_OPAQUE

DXGI_SWAP_CHAIN_DESC1 swapChainDesc = { 0 };

swapChainDesc.Width = 0; 
swapChainDesc.Height = 0;
swapChainDesc.Format = DXGI_FORMAT_420_OPAQUE;// DXGI_FORMAT_B8G8R8A8_UNORM
swapChainDesc.Stereo = false;
swapChainDesc.SampleDesc.Count = 1;
swapChainDesc.SampleDesc.Quality = 0; 
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.BufferCount = 2; 
swapChainDesc.Scaling = DXGI_SCALING_STRETCH;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
swapChainDesc.Flags = 0;


dxgiFactory->CreateSwapChainForHwnd(_direct3DDevice, _hwnd, &swapChainDesc, nullptr, nullptr, &_DXGISwapChain);


IDXGISurface *dxgiBackBuffer;
_DXGISwapChain->GetBuffer(0, IID_PPV_ARGS(&dxgiBackBuffer));

然后在dxgiBackBuffer我得到NullReferenceException

我认为您无法根据yv12 format创建后台缓冲区。

你知道我错了吗?

1 个答案:

答案 0 :(得分:2)

支持的交换链格式列为'显示'在DXGI hardware feature levels格式表中。没有Direct3D硬件功能级别支持YUV格式显示输出。您必须在某个着色器中执行YUV到RGB颜色空间转换。