有谁知道如何使用YUV颜色空间创建纹理,以便我们可以在不使用片段着色器的情况下获得基于硬件的YUV到RGB颜色空间转换?我正在使用NVidia 9400而且我没有看到明显的GL扩展似乎可以解决这个问题。我已经找到了如何使用片段着色器的示例,但我正在处理的项目目前仅支持OpenGL 1.1,我没有时间将其转换为2.0并执行所有必要的回归测试。这也是针对Linux的。在其他平台上,我一直在使用MESA扩展,但它不能在Nvidia卡上运行。
答案 0 :(得分:1)
由于您可以使用扩展程序,但是您担心使用OpenGL 2.0全力以赴,请考虑使用旧式 ARB_fragment_program 扩展程序提供一个简单的片段着色器。
或者,您可以使用DevIL,ImageMagick或FreeImage等库来为您执行转换。
答案 1 :(得分:0)
您唯一的选择是在纹理过滤块之外进行颜色转换。 (在将纹理数据提交给GL之前,或者在从纹理过滤块中获取值之后)
GL仍然可以提供帮助,因为如果你有正确的扩展(dot3纹理组合器扩展),那么在GL1.1中进行线性变换是可行的。也就是说,它远不是灵丹妙药。
对于它的价值,BINK implementation似乎正在使用MMX进行转换,使用MMX(尽管在行之间读取)。我可能会这样做,在加载到OpenGL之前使用SSE进行转换。 CPU 足够快,每帧都可以执行此操作。