我在Open GL ES 2.0中使用这个简单的Shader进行纹理映射 我需要为叠加混合模式添加代码。 算法我理解一切。 但是如何获得屏幕上像素的颜色进行混合。
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" //
+ "}";
答案 0 :(得分:2)
简短的回答是:你做不到。有glBlendFunc()控制的经典GL混合,glBlendEquation& Co,但这是在片段着色器之后执行的完全不同的管道阶段 - 混合将使用您可以设置的各种模式和方程式将当前像素颜色(目标)与片段着色器计算的颜色(源)混合。如果这足以达到你想要达到的效果,那就去吧。
如果您需要更多地控制着色器中的混合,可以将要混合的图像渲染到纹理中,并在绘制要混合的内容时将其用作附加输入纹理,但这会导致巨大的过分,应该避免。