代码之家  ›  专栏  ›  技术社区  ›  BonderWu

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

  •  0
  • BonderWu  · 技术社区  · 9 年前

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

    (1). YUV->RGB公司

    (2). 图像滤波器

    (3). RGB->是的

    那么只有一个顶点着色器和3个片段着色器就可以了。我已经一个接一个地实现了这3个着色器,每个着色器的函数都可以,但我不知道如何像管道一样将它们链接在一起?有人能帮忙吗,谢谢。

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

    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 回复  |  直到 9 年前
        1
  •  1
  •   plastique    9 年前

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

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