ID3D11Texture2D* pTexture = nullptr;
HRESULT hrGetBuffer = pSwapChain->GetBuffer(
0,
__uuidof(ID3D11Texture2D),
reinterpret_cast<void**>(&pTexture)
);
是否可以强制纹理采用特定格式?例如,
DXGI_FORMAT_B8G8R8A8_UNORM
。
或者有没有库可以做到这一点?
对于交换链,“后备缓冲区”的格式通过
CreateSwapChain
方法或旧的 D3D11CreateDeviceAndSwapChain
方法提供给 DXGI。
后缓冲区格式的有效格式是有限的,并且基于 Direct3D 硬件功能级别:
DXGI_FORMAT_B8G8R8A8_UNORM
始终支持(假设 DXGI 1.1 或更高版本)。
DXGI_FORMAT_R8G8B8A8_UNORM
、DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
。
DXGI_FORMAT_R10G10B10A2_UNORM
、DXGI_FORMAT_R16G16B16A16_FLOAT
。
DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM
在某些功能级别 10.0 或更高版本的硬件上可选择支持。
请参阅此博客系列了解更多信息。特别是 sRGB 格式的“旧”与“新”处理。