directx-11 - D3D11 - 如何在没有 Windows 10 的情况下在显示器上启用 HDR
问题描述
我正在尝试在我正在使用的视频播放器上使用 HDR 渲染,但我似乎无法在我的显示器上激活 HDR(是的,我的显示器支持 HDR),在我看到的所有代码示例中,一切都指向将颜色格式设置为 R10G10B10A2_UNorm(我使用的是 SharpDX)并引用了本文中的所有文章https://www.asawicki.info/news_1703_programming_hdr_monitor_support_in_direct3d,但我仍然无法在我的显示器上启用 HDR。
例如,如果您知道 madVR 实际上可以做到这一点(它可以强制您的显示器在不通过 Windows 10 的情况下启用 HDR)。我认为这称为 HDR 直通。这是怎么做到的?
这是我正在运行的代码,它实际上可以绘制一个白屏。
this.d3dDevice = new D3D11.Device(DriverType.Hardware, DeviceCreationFlags.None, new[] { FeatureLevel.Level_11_1, FeatureLevel.Level_11_0, });
SharpDX.DXGI.SwapChainDescription1 swapChainDescription_ = new SharpDX.DXGI.SwapChainDescription1()
{
AlphaMode = SharpDX.DXGI.AlphaMode.Ignore,
Width = Proc2.Width,
Height = Proc2.Height,
Format = Format.R10G10B10A2_UNorm,
Scaling = SharpDX.DXGI.Scaling.None,
BufferCount = 3,
SwapEffect = SharpDX.DXGI.SwapEffect.FlipDiscard,
Flags = SharpDX.DXGI.SwapChainFlags.AllowModeSwitch,
Usage = SharpDX.DXGI.Usage.BackBuffer | SharpDX.DXGI.Usage.RenderTargetOutput,
SampleDescription = new SharpDX.DXGI.SampleDescription() { Count = 1, Quality = 0 },
Stereo = false,
};
parentSwapchain = new SharpDX.DXGI.SwapChain1(factory2, d3dDevice, this.renderForm.Handle, ref swapChainDescription_, new SharpDX.DXGI.SwapChainFullScreenDescription()
{
RefreshRate = new Rational(144, 1),
Scaling = SharpDX.DXGI.DisplayModeScaling.Unspecified,
Windowed = true,
ScanlineOrdering = SharpDX.DXGI.DisplayModeScanlineOrder.Unspecified,
}
);
谁能指出我错过了哪一部分?我只想强制我的显示器使用我的 Direct3D 代码启用 HDR。
解决方案
深入研究...我发现 Kodi 的 HDR 版本实际上可以做到这一点:https ://forum.kodi.tv/showthread.php?tid=349861 。看起来有一个 Windows API(我认为是从 1903 年开始)使您能够通过DisplayConfigGetDeviceInfo
和 DisplayConfigSetDeviceInfo
. 这并不简单,因为您需要先查询显示器的功能并进行设置。我能够用 C++ 编写测试代码来做到这一点。我只需要做一些 pInvoke 让它在 C# 上运行。
推荐阅读
- jupyter-notebook - 使用 Jupyter Notebook 时,有没有办法从最后一个关机点继续工作
- java - 如何通过处理 XML 文件来更改 Modelica MultiBody 组件参数?
- sql-server - SQL Server 表连接
- r - 在 R arcgisbinding 中定义字段类型
- scala - 在 Chisel 中实现 Verilog $onehot 任务
- php - 搜索大量字符串php和mysql
- swift - IOS如何取自定义可调整大小的SKVideoNode来引用自定义可调整大小的ARImageAnchor SCNPlane的位置和大小
- angular - url 中的“%2b”不适用于 url 重写
- python - 是否可以在 str.format() 中使用循环?
- java - Perl 的 require 命令的 java 等效项是什么?