我必须在一个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.
答案 0 :(得分:1)
使用FBOs(帧缓冲区对象)进行乒乓绘制调用。例如,在应用某些图像过滤器时。使用第一个图像滤镜着色器将纹理绘制到FBO。然后你可以使用第二个着色器(另一个滤镜)将FBO(纹理)的内容绘制到帧缓冲区。
如果您需要两个以上的处理着色器,请在后台使用两个FBO和乒乓之间的绘制调用,直到处理完成为止。