2016-12-05 8 views
1

私はOpenGL ESを使用してネイティブレンダリングを行うUnityでAndroidプラグインを使用しています。FBOにレンダリングすると予期しない結果が発生する

私はこれにコードを単純化しており、それが成功し、問題を再現:

 GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId); 

    //Draw texture to framebuffer 
    GLES20.glViewport(0, 0, width, height); 
    GLES20.glUseProgram(program); 

    GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
    GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT); 

    GLES20.glUniformMatrix4fv(u_MVPMatrix, 1, false, matrix, 0); 

    GLES20.glEnableVertexAttribArray(a_Position); 
    GLES20.glVertexAttribPointer(a_Position, 3, GLES20.GL_FLOAT, false, 0, verticesBuffer); 

    GLES20.glEnableVertexAttribArray(a_texCoord); 
    GLES20.glVertexAttribPointer(a_texCoord, 2, GLES20.GL_FLOAT, false, 0, uvBuffer); 

    GLES20.glDrawElements(GLES20.GL_TRIANGLES, indices.length, GLES20.GL_UNSIGNED_SHORT, indicesBuffer); 

    GLES20.glFinish(); 
    GLES20.glFlush(); 
    GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); 

私は唯一のOpenGL ES20を使用するユニティを強制していますが、OpenGLのES30を使用している場合、私は予想外の取得時にそれが正常に動作しています結果と入力配列は次のとおりです。

GLES20.glVertexAttribPointer(a_Position, 3, GLES20.GL_FLOAT, false, 0, verticesBuffer); 

無視され、指定されたクワッドは別の形で描画されます。入力座標をどのように変更しても、私はまだ同じ奇妙な形をしています。

私はOpenGLコーダーではないので、問題は見つかりません。私はここにいくつかの州を設定するために行方不明ですか?

+0

'verticesBuffer'とは何ですか? OpenGLバッファ、またはJavaバッファオブジェクトの名前?クライアントサイドの頂点配列は、ES 3.0では廃止予定とマークされています。彼らはまだ動作するはずです。 –

+0

verticesBufferはFloatBuffer型であり、クワッド内の頂点の座標を含みます。 – sinsro

+0

前述したように、これはES 3.0の非推奨機能ですが、ES 2.0との下位互換性のためにサポートされるべきです。しかし、とにかくVBOを使う方が良いでしょう。 –

答えて

0

コメントにReto Koradiが示唆しているように、クライアントサイドの頂点配列はES 3.0では非推奨です。また、VBOに切り替えると動作します。理由はわかりませんが、Unityの後に残っているいくつかの未知のOpenGL状態に関係していると仮定します。

関連する問題