iOS の GLKView で glDrawArrays を使用して、同じ配列で再描画しようとしています。これらの呼び出しのいずれか 2 つをコメントアウトすると、もう一方の描画呼び出しが期待どおりに描画されます。私の最後の予感は、同じ深さで描画しようとしていたので、深さの均一性を導入し、次のように頂点シェーダーで深さを設定しています。
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);
glDrawArrays3 つの呼び出しすべてが期待どおりに描画されないのはなぜですか? 先に述べたように、それらのいずれかが単独で期待どおりに描画します。そのまま、3つすべてで、最初のglDrawArraysドローだけが期待どおりに描画されます。