如何在一个opengl程序中实现多个功能?

时间:2015-08-10 07:14:54

标签: opengl-es fragment-shader

我必须在一个opengl程序中实现多个功能。例如,要处理一个完整的图像文件,我们有3个功能:

(1)。 YUV-> RGB

(2)。图像过滤器

(3)。 RGB-> YUV

然后只有一个顶点着色器和3个片段着色器就可以了。我已经逐一实现了这三个着色器,并且每个功能都有效,但我不知道如何将它们像管道一样连接起来?有人可以帮忙,谢谢。

我用Google搜索了两种可能适用于我的情况:

1. Use glUseProgram() to switch between shaders, but it will only make effect for the last fragment shader. 

2. Write a complicated fragment shader to embody all these features. But I don't know how, seems impossible.

1 个答案:

答案 0 :(得分:1)

使用FBOs(帧缓冲区对象)进行乒乓绘制调用。例如,在应用某些图像过滤器时。使用第一个图像滤镜着色器将纹理绘制到FBO。然后你可以使用第二个着色器(另一个滤镜)将FBO(纹理)的内容绘制到帧缓冲区。

如果您需要两个以上的处理着色器,请在后台使用两个FBO和乒乓之间的绘制调用,直到处理完成为止。

相关问题