c++ - Direct3D11 是否包含色彩空间转换?

标签 c++ directx direct3d

我正在研究 Direct3D11 用于显示视频输出;特别是,我试图弄清楚是否有一种方法可以将 YUV 表面提供给 Direct3D11 并让它自动(即在硬件中)将其转换为 RGB 并按原样呈现。 DXGI_MODE_DESC的文档状态:

Because of the relaxed render target creation rules that Direct3D 11 has for back buffers, applications can create a DXGI_FORMAT_B8G8R8A8_UNORM_SRGB render target view from a DXGI_FORMAT_B8G8R8A8_UNORM swap chain so they can use automatic color space conversion when they render the swap chain.

这个“自动色彩空间转换”指的是什么? Direct3D11 中是否有任何内容可以满足我的要求,或者必须通过预渲染或通过着色器执行此操作?

最佳答案

在 DX11 中创建纹理时,您可以选择多种格式来告知着色器有关数据结构的信息。这些格式属于 DXGI_FORMAT 枚举。它们基本上是 ARGB 颜色格式的各种配置,因此它们允许您指定 B8G8R8A8 或 R16G16B16A16 等。但是没有 YUV 格式的选项。

您能做的最好的事情是将 YUV 数据传递到着色器管道,“假装”它们是 RGB。然后在像素着色器中执行到真实 RGB 格式的转换。该解决方案应该足够高效,因为转换将在 GPU 上针对纹理的每个可见像素并行执行。

关于c++ - Direct3D11 是否包含色彩空间转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24071360/

相关文章:

c++ - 改变三角形的颜色

c++ - 如何在 DirectX 11 中获取当前显示模式,包括刷新率?

c++ - 顶点开关 DX

c++ - Direct3D11 在哪里分配资源对象?

directx - 使用结构化缓冲区的 Direct3D 10 硬件实例

c++ - 纹理不会在 OpenGL 和 Xcode 上显示

c++ - 无法将指针向上转换为指针参数

C++ 从文本文件数据类型中读取结构并将数据存储在列表 vector 中

c++ - 日历运行无限循环

像素着色器问题中的 c++ DirectX 照明