我正在尝试在 iOS 上的 GLKView 中使用 glDrawArrays 重新绘制相同的数组。当我注释掉其中任何两个调用时,另一个绘制调用会按我的预期绘制。我最后的预感是我试图在相同的深度上绘制,所以我引入了一个深度均匀,并在顶点着色器中设置深度,如下所示:
gl_Position = vec4(position.xy, 0.1*depth, 1.0);
进来的深度是一个值为0、1或2的lowp向量。这没有任何影响。
这是我的 drawRect: 方法
- (void)drawRect:(CGRect)rect
{
glClearColor(0., 0.0, 0.0, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Render the object again with ES2
glUseProgram(_program);
// the colors
glBindVertexArrayOES(_vertexArray);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _wheelMaskTexture);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glUniform1f(uniforms[UNIFORM_COLOR_DEPTH], COLOR_DRAW);
glUniform1f(uniforms[UNIFORM_COLOR_ANGLE], _angle);
glDrawArrays(GL_TRIANGLES, 0, 6);
// the sat
glBindVertexArrayOES(_vertexArray);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _satMaskTexture);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glUniform1i(uniforms[UNIFORM_COLOR_DEPTH], SATURATION_DRAW);
glUniform1f(uniforms[UNIFORM_COLOR_ANGLE], _satAngle);
glDrawArrays(GL_TRIANGLES, 0, 6);
// the bright
glBindVertexArrayOES(_vertexArray);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _brightMaskTexture);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glUniform1i(uniforms[UNIFORM_COLOR_DEPTH], BRIGHTNESS_DRAW);
glUniform1f(uniforms[UNIFORM_COLOR_ANGLE], _brightnessAngle);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
我的 GLKView 设置了drawableDepthFormat = GLKViewDrawableDepthFormat24
. 我没有设置任何变换,因为我正在绘制的基本上是一个简单的色轮。
没有世界或模型变换。我只是简单地在另一个之上绘制相同的正方形 3 次,而不进行转换。有 3 种不同的蒙版图像用于屏蔽我在片段着色器中关心的片段,如下所示:
gl_FragColor = vec4(rgb, texture2D(wheelMask, texCoord).a);
为什么所有三个glDrawArrays
调用都没有按预期绘制?正如我早些时候提到的,他们中的任何一个都可以按预期绘制。事实上,对于所有三个,只有第一个glDrawArrays
按预期绘制。