OpenGL色彩空间转换

时间:2009-10-27 17:03:42

标签: opengl yuv color-space glx

有谁知道如何使用YUV颜色空间创建纹理,以便我们可以在不使用片段着色器的情况下获得基于硬件的YUV到RGB颜色空间转换?我正在使用NVidia 9400而且我没有看到明显的GL扩展似乎可以解决这个问题。我已经找到了如何使用片段着色器的示例,但我正在处理的项目目前仅支持OpenGL 1.1,我没有时间将其转换为2.0并执行所有必要的回归测试。这也是针对Linux的。在其他平台上,我一直在使用MESA扩展,但它不能在Nvidia卡上运行。

2 个答案:

答案 0 :(得分:1)

由于您可以使用扩展程序,但是您担心使用OpenGL 2.0全力以赴,请考虑使用旧式 ARB_fragment_program 扩展程序提供一个简单的片段着色器。

或者,您可以使用DevIL,ImageMagick或FreeImage等库来为您执行转换。

答案 1 :(得分:0)

你提到的MESA扩展是针对YCrCb的吗?如果您的nvidia卡没有暴露它,则意味着它们没有公开对该纹理格式的支持(它是 表示该卡支持它的方式)。

您唯一的选择是在纹理过滤块之外进行颜色转换。 (在将纹理数据提交给GL之前,或者在从纹理过滤块中获取值之后)

GL仍然可以提供帮助,因为如果你有正确的扩展(dot3纹理组合器扩展),那么在GL1.1中进行线性变换是可行的。也就是说,它远不是灵丹妙药。

对于它的价值,BINK implementation似乎正在使用MMX进行转换,使用MMX(尽管在行之间读取)。我可能会这样做,在加载到OpenGL之前使用SSE进行转换。 CPU 足够快,每帧都可以执行此操作。