如何创建交换链格式 DXGI_FORMAT_420_OPAQUE?
how to create swapchain format DXGI_FORMAT_420_OPAQUE?
以前,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
创建后台缓冲区。
你知道我错了吗?
支持的交换链格式是那些在 DXGI hardware feature levels 格式表中列为 'display out' 的格式。没有 Direct3D 硬件功能级别支持用于显示的 YUV 格式。您必须在某处的着色器中执行 YUV 到 RGB 色彩空间转换。
以前,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
创建后台缓冲区。
你知道我错了吗?
支持的交换链格式是那些在 DXGI hardware feature levels 格式表中列为 'display out' 的格式。没有 Direct3D 硬件功能级别支持用于显示的 YUV 格式。您必须在某处的着色器中执行 YUV 到 RGB 色彩空间转换。