如何在没有GL_LUMINANCE的情况下将YUV数据传递到片段着色器

时间:2013-09-07 22:50:31

标签: opengl fragment-shader glteximage2d

在Android中,为了将YUV420sp传递到片段着色器,我将传递数据的信息分成Y-U-V,并以GL_LUMINANCE格式传递每个sugin glTexImage2D

但是现在我需要做我需要FBO的Offscren-Rendering,问题是FBO不支持GL_LUMINANCE。

那么在不使用GL_LUMINANCE的情况下传递YUV数据的最佳方法是什么?

顺便说一句,我无法处理CPU中的YUV并将其转换为RGB或其他东西,因为整个过程就是将YUV原样传递到GPU中。

编辑: 由于这是针对Android的,因此单通道GL_RED将无法正常工作。

1 个答案:

答案 0 :(得分:1)

GL_LUMINANCE在可编程管道中完全没有必要。

在最基本的层面上,它是一个黑客,它允许在固定功能管道的日子里进行纹理调配。现在,您使用GL_RED作为单通道纹理,您可以在片段着色器中以任何方式调整它。

您要复制GL_LUMINANCE的内容是:vec4 (texture (...).rrr, 1.0)。您甚至可以使用ARB_texture_swizzle在最近的OpenGL实现中在固定功能管道中执行此操作。