gpt4 book ai didi

c++ - 检测显示器上的 10 位颜色支持

转载 作者:行者123 更新时间:2023-11-30 05:13:23 29 4
gpt4 key购买 nike

我想在我的 DirectX C++ Windows 应用程序中添加对 10 位颜色的支持。我说的是使用 DXGI_FORMAT_R10G10B10A2_UNORM 的每个 RGB channel 10 位(RGB 总共 30 位)。

如何检测系统是否支持,我的意思是显示器是否真的支持这种模式?

因为例如,我正在枚举显示模式列表:

  IDXGIOutput *output=null; for(Int i=0; OK(adapter->EnumOutputs(i, &output)); i++)
{
DXGI_FORMAT mode=DXGI_FORMAT_R10G10B10A2_UNORM;
UInt descs_elms=0; output->GetDisplayModeList(mode, 0, &descs_elms, null); // get number of mode descs
RELEASE(output);
}

即使我的笔记本电脑显示器不支持 10 位,我仍然可以获得有效结果,包括分辨率列表。稍后我可以创建一个全屏交换链,具有 10 位,并且一切正常。

但是因为我不知道显示器是 10 位还是 8 位,所以我不知道是否需要手动应用一些抖动来模拟 10 位。

所以我想知道的是,如果显示实际上是 10 位 = 不需要抖动,或者它是 8 位 = 那么我将应用我的自定义抖动着色器。

我正在使用经典的 Win32/WinAPI 和新的通用 Windows 平台(因此我需要针对这两个平台的解决方案)。

最佳答案

您可能最好使用某种用户设置来打开/关闭抖动,并且只为您的交换链使用 DXGI_FORMAT_R10G10B10A2_UNORM

请注意,DXGI_FORMAT_R10G10B10A2_UNORM 也是一种有效的 HDR 格式,但需要手动应用 ST.2084 颜色曲线并适当设置颜色空间以指示使用广色域(即 HDR10 ).您可以使用 DXGI_FORMAT_R16G16B16A16_FLOAT 并在线性色彩空间中进行渲染,但是您将其留给系统去做“正确”的事情,这可能符合您的期望,也可能不符合您的期望。

For non-HDR/4kUHD scenarios, you can't really get anything more than 8-bit with windowed mode or UWP CoreWindows swapchains anyhow because DWM is converting you to 8-bit. 10-bit scan out for Win32 'classic' desktop apps is possible with exclusive full-screen mode but there are a lot of variables (DVI cables don't support it for example).

参见 High Dynamic Range and Wide Color Gamut ,以及 D3D12HDR 样本 Win32/UWP

关于c++ - 检测显示器上的 10 位颜色支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43971434/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com