Opengl es 如何为着色器获取屏幕上像素的颜色(Open GL ES 2,0)

Opengl es 如何为着色器获取屏幕上像素的颜色(Open GL ES 2,0),opengl-es,opengl-es-2.0,shader,textures,Opengl Es,Opengl Es 2.0,Shader,Textures,我在OpenGL ES 2.0中使用这个简单的着色器进行纹理映射 我需要添加叠加混合模式的代码。 算法我什么都懂。 但是如何获得屏幕上像素的颜色进行混合 p、 s我只使用一个纹理作为源 String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" // + "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n"

我在OpenGL ES 2.0中使用这个简单的着色器进行纹理映射 我需要添加叠加混合模式的代码。 算法我什么都懂。 但是如何获得屏幕上像素的颜色进行混合

p、 s我只使用一个纹理作为源

String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
        + "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
        + "uniform mat4 u_projTrans;\n" //
        + "varying vec4 v_color;\n" //
        + "varying vec2 v_texCoords;\n" //
        + "\n" //
        + "void main()\n" //
        + "{\n" //
        + "   v_color = vec4(1, 1, 1, 1);\n" //
        + "   v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
        + "   gl_Position =  u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
        + "}\n";
    String fragmentShader = "#ifdef GL_ES\n" //
        + "#define LOWP lowp\n" //
        + "precision mediump float;\n" //
        + "#else\n" //
        + "#define LOWP \n" //
        + "#endif\n" //
        + "varying LOWP vec4 v_color;\n" //
        + "varying vec2 v_texCoords;\n" //
        + "uniform sampler2D u_texture;\n" //
        + "void main()\n"//
        + "{\n" //
        + "  gl_FragColor = texture2D(u_texture, v_texCoords);\n" //
        + "}";

简单的回答是:你不能。有由glBlendFunc()、glBlendEquation&Co控制的经典GL混合,但这是在片段着色器之后执行的完全不同的管道阶段-混合将使用您可以设置的各种模式和方程式,将当前像素颜色(目标)与片段着色器计算的颜色(源)混合。如果这足以达到你想要达到的效果,那就去做吧

如果需要对着色器中的混合进行更多控制,可以将要混合到的图像渲染到纹理中,并在绘制要混合的对象时将其用作附加输入纹理,但这会导致巨大的悬垂,应避免

另见问题