Opengl es OpenGL ES 2.0中的多过程着色器

Opengl es OpenGL ES 2.0中的多过程着色器,opengl-es,opengl-es-2.0,glsl,Opengl Es,Opengl Es 2.0,Glsl,第一个-子例程是否需要GLSL 4.0+?那么它在OpenGL ES 2.0的GLSL版本中不可用 我非常了解什么是多重过程着色器。 我的照片是什么 使用某些着色器将一组对象(例如精灵)绘制到FBO 将FBO视为大屏幕大小四边形的大纹理,并使用另一个着色器,例如,将纹理颜色转换为灰度 使用灰度颜色将FBO纹理四边形绘制到屏幕 或者这叫别的 所以multi-pass=使用另一个着色器输出到另一个着色器输入?所以我们渲染一个对象两次或多次?着色器输出如何到达另一个着色器输入 例如 glUseProg

第一个-子例程是否需要GLSL 4.0+?那么它在OpenGL ES 2.0的GLSL版本中不可用

我非常了解什么是多重过程着色器。
我的照片是什么

  • 使用某些着色器将一组对象(例如精灵)绘制到FBO
  • 将FBO视为大屏幕大小四边形的大纹理,并使用另一个着色器,例如,将纹理颜色转换为灰度
  • 使用灰度颜色将FBO纹理四边形绘制到屏幕
  • 或者这叫别的

    所以multi-pass=使用另一个着色器输出到另一个着色器输入?所以我们渲染一个对象两次或多次?着色器输出如何到达另一个着色器输入

    例如

    glUseProgram(shader_prog_1);//Just plain sprite draw
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, /*some texture_id*/);
     //Setting input for shader_prog_1
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    //Disabling arrays, buffers
    glUseProgram(shader_prog_1);//Uses same vertex, but different fragment shader program
    //Setting input for shader_prog_2
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    
    有人能以基本方式提供这方面的简单示例吗?

    通常,术语“多次渲染”指使用不同的着色器多次渲染同一对象,并将结果累积到帧缓冲区中。累积通常通过混合完成,而不是使用着色器。也就是说,第二个着色器不接受第一个着色器的输出。它们各自执行部分计算,混合阶段将它们合并为最终值

    现在,这主要用于正向渲染场景中的照明。为每个灯光渲染每个对象一次,每次渲染灯光时传递不同的照明参数并可能使用不同的着色器。用于累积结果的混合模式是加法模式,因为光反射是加法属性

    子程序是否需要GLSL 4.0+?那么它在OpenGL ES 2.0的GLSL版本中不可用

    这是一个完全不同于你文章其余部分的问题,但答案是肯定和否定的

    不,从某种意义上说,ARB_shader_子例程是OpenGL的扩展,因此它可以由任何OpenGL实现实现。是的,在实际意义上,任何实际可以实现shader_子例程的硬件也可以实现GL4.x的其余部分,因此已经在宣传4.x功能

    实际上,您找不到非4.x OpenGL实现支持的shader_子例程

    它在GLSL ES 2.0中不可用,因为它是GLSLES。不要将桌面OpenGL与OpenGL ES混淆。它们是两种不同的东西,具有不同的GLSL版本和不同的功能集。它们甚至不共享扩展(除了最近的一些扩展)。

    作为旁注,您正在做的(或多或少)通用术语是“后处理”而不是“多通道渲染”,这意味着重复绘制同一场景,累积结果以合成最终渲染。