有谁知道如何使用 YUV 颜色空间创建纹理,以便我们可以在无需使用片段着色器的情况下进行基于硬件的 YUV 到 RGB 颜色空间转换?我使用的是 NVidia 9400,但没有看到明显的 GL 扩展似乎可以解决问题。我找到了如何使用片段着色器的示例,但我目前正在处理的项目仅支持 OpenGL 1.1,我没有时间将其转换为 2.0 并执行所有必要的回归测试。这也是针对 Linux 的。在其他平台上,我一直在使用 MESA 扩展,但它在 Nvidia 卡上不起作用。
问问题
2625 次
2 回答
1
由于您可以使用扩展,但是您担心全力以赴地使用 OpenGL 2.0,请考虑提供一个带有老式ARB_fragment_program扩展的简单片段着色器。
或者,您可以使用 DevIL、ImageMagick 或 FreeImage 等库为您执行转换。
于 2009-10-27T17:43:49.967 回答
0
您提到的 MESA 扩展是针对 YCrCb 的?如果您的 nvidia 卡没有公开它,则意味着他们没有公开对该纹理格式的支持(这是说卡支持它的方式)。
您唯一的选择是在纹理过滤块之外进行颜色转换。(在将纹理数据提交给 GL 之前,或者在从纹理过滤块中获取值之后)
GL 仍然可以提供帮助,因为在 GL1.1 中可以进行线性变换,前提是您有正确的扩展(dot3 纹理组合器扩展)。也就是说,它离灵丹妙药还很远。
就其价值而言,BINK 实现似乎正在使用 MMX 与 CPU 进行转换(尽管这是在行间读取)。我可能会这样做,在加载到 OpenGL 之前使用 SSE 进行转换。CPU足够快,可以每帧执行此操作。
于 2009-11-11T13:33:23.997 回答