我正在研究用于显示视频输出的Direct3D11;特别是,我试图弄清楚是否有一种方法可以将YUV表面赋予Direct3D11,并让它自动(即在硬件中)转换为RGB并将其表示为RGB。描述的文档声明:
由于Direct3D 11为后台缓冲区提供了轻松的呈现目标创建规则,应用程序可以从DXGI_FORMAT_B8G8R8A8_UNORM交换链创建DXGI_FORMAT_B8G8R8A8_UNORM_SRGB呈现目标视图,以便在呈现交换链时使用自动颜色空间转换。
这个“自动颜色空间转换”指的是什么?在Direct3D11中有什么东西可以做我想要做的事情,还是必须通过预渲染或者通过着色器来执行呢?
发布于 2014-06-08 12:06:21
在DX11中创建纹理时,可以选择许多格式,这些格式将通知着色器有关数据结构的信息。这些格式属于DXGI_FORMAT枚举。它们基本上是ARGB颜色格式的各种配置,因此允许您指定例如B8G8R8A8或R16G16B16A16。然而,没有选择的YUV格式。
你能做的最好的事情就是把你的YUV数据传递给着色管道,“假装”它们是RGB。然后在像素着色器中执行对真实RGB格式的转换。这个解决方案应该是足够有效的,因为转换将在GPU上执行,对纹理中的每个可见像素并行执行。
https://stackoverflow.com/questions/24071360
复制相似问题