我正在调查Direct3D11以显示视频输出;特别是,我试图找出是否有办法给Direct3D11提供YUV表面并自动(即在硬件中)将其转换为RGB并将其呈现为原样。 DXGI_MODE_DESC州的文件:
由于Direct3D 11具有宽松的渲染目标创建规则 对于后台缓冲区,应用程序可以创建一个 DXGI_FORMAT_B8G8R8A8_UNORM_SRGB从a渲染目标视图 DXGI_FORMAT_B8G8R8A8_UNORM交换链因此可以使用自动颜色 渲染交换链时的空间转换。
这种“自动色彩空间转换”是指什么? Direct3D11中有什么能够满足我的要求,还是必须通过预渲染或着色器执行?
答案 0 :(得分:2)
在DX11中创建纹理时,您可以选择多种格式来通知着色器有关数据结构的信息。这些格式属于DXGI_FORMAT枚举。它们基本上是ARGB颜色格式的各种配置,因此它们允许您指定例如B8G8R8A8或R16G16B16A16。但是没有YUV格式的选项。
您可以做的最好的事情是将YUV数据传递到着色器管道,"假装"他们是RGB。然后在像素着色器中执行到真实RGB格式的转换。此解决方案应该足够高效,因为转换将在GPU上执行,并且对纹理的每个可见像素并行执行。