0

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ドローだけが期待どおりに描画されます。

4

0 に答える 0