如何在一个 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 和它们之间的乒乓绘制调用,直到处理完成。
我必须在一个 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 和它们之间的乒乓绘制调用,直到处理完成。