有谁知道如何创建一个YUV色彩空间的纹理,这样我们就可以在不使用片段着色器的情况下进行基于硬件的YUV到RGB色彩空间的转换?我使用的是NVidia 9400,但我没有看到一个明显的GL扩展,似乎可以做到这一点。我已经找到了如何使用片段着色器的示例,但我正在处理的项目目前只支持OpenGL 1.1,并且我没有时间将其转换为2.0并执行所有必要的回归测试。这也是针对Linux的。在其他平台上,我一直在使用MESA扩展,但它在Nvidia卡上不起作用。
发布于 2009-10-28 01:43:50
既然您可以使用扩展,但是担心在OpenGL 2.0中全力以赴,那么可以考虑为老式的ARB_fragment_program扩展提供一个简单的片段着色器。
或者,您可以使用DevIL、ImageMagick或FreeImage等库来为您执行转换。
发布于 2009-11-11 21:33:24
你提到的MESA扩展是针对YCrCb的吗?如果你的Nvidia卡没有公开它,那就意味着他们没有公开对该纹理格式的支持(这就是说该卡支持它)。
唯一的选择是在纹理过滤块之外进行颜色转换。(在将纹理数据提交到GL之前,或在从纹理过滤块中获取值之后)
如果你有正确的扩展(dot3纹理组合器扩展),GL仍然可以帮助你,因为在GL1.1中做线性变换是可行的。话虽如此,但它远不是万能的。
无论如何,BINK implementation似乎正在使用MMX进行转换(这是字里行间的读数)。我可能也会做同样的事情,在加载到OpenGL之前使用SSE进行转换。CPU的速度足够快,可以在每一帧中执行此操作。
https://stackoverflow.com/questions/1632266
复制相似问题