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

How to implement multiple features in one opengl program?

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

(1)。 YUV->RGB

(2)。图片过滤器

(3)。 RGB->YUV

那么只要一个顶点着色器和三个片元着色器就可以了。我已经一个一个地实现了这 3 个着色器,并且函数对每个着色器都有效,但我不知道如何 link 将它们像一个管道一样放在一起?有人可以帮忙吗,谢谢

我用谷歌搜索了 2 种可能适用于我的情况的方法:

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.

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

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