Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android glsl texture2d是否禁用混合?_Android_Opengl Es_Glsl - Fatal编程技术网

Android glsl texture2d是否禁用混合?

Android glsl texture2d是否禁用混合?,android,opengl-es,glsl,Android,Opengl Es,Glsl,我尝试混合一个纹理的几个变形,每次都是不同的颜色,但颜色没有混合 当我在片段着色器中只更改一行时:使用vec4而不是texture2D,颜色会完全混合 我的代码: // set color mask to red only glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); // draw glDrawElements(GL_TRIANGLES, deformation_grid->mesh().triangles().size(),

我尝试混合一个纹理的几个变形,每次都是不同的颜色,但颜色没有混合

当我在片段着色器中只更改一行时:使用vec4而不是texture2D,颜色会完全混合

我的代码:

// set color mask to red only
glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE);
// draw
glDrawElements(GL_TRIANGLES, deformation_grid->mesh().triangles().size(),
        GL_UNSIGNED_SHORT, deformation_grid->mesh().triangles().data());

// set color mask to green only
glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE);
// draw
glDrawElements(GL_TRIANGLES, deformation_grid->mesh().triangles().size(),
        GL_UNSIGNED_SHORT, deformation_grid->mesh().triangles().data());
我的片段着色器:

const char fragment_shader[] = "precision highp float;\n"
    "uniform sampler2D u_texture;\n"
    "varying vec2 v_uv;\n"
    "void main() {\n"
    "  vec4 texColor = vec4(texture2D(u_texture, v_uv).rgb, 0.5);\n"
    "  vec4 oneColor = vec4(1.0, 1.0, 1.0, 0.5);\n"
    "  gl_FragColor = texColor;\n"
    "}\n";
我希望我总是会变黄,但实际上当我设置时我会变黄

gl_FragColor = oneColor
当我开始的时候是绿色的

gl_FragColor = texColor
更改glColorMask和片段着色器中的alpha值没有任何效果

texture2D是否禁用glColorMask设置的混合?
如果是这样,我怎么能避免呢?

不应该。但考虑到你目前告诉我们的情况,你所看到的毫无意义。如果gl_FragColor=单色;显示黄色,则其他设置不正确。我希望你在50%的透明度下得到白色,或者,考虑到你的彩色面具,在50%的透明度下得到红色。似乎还有其他一些状态集,但是如果没有看到更多的代码,就不可能知道是什么。纹理的内容是什么?除非纹理中的R和G分量的值相同,否则不一定会出现黄色。此外,您还谈到了混合。您是否启用了混合?你使用的混合函数是什么?我使用glEnableGL_混合;和glBlendFuncGL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA;以启用混合。我认为当我使用单色时,黄色是有意义的,因为红色+绿色应该创造黄色。我使用棋盘格图案作为纹理,所以当我使用texColor时,我希望白色方块中也会出现黄色。