我在Unity中有一个Android插件,可以使用OpenGL ES进行一些原生渲染。
我已将代码简化为此,并成功重现了该问题:
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);
当我强制Unity仅使用OpenGL ES20时工作正常,但如果使用OpenGL ES30,我会得到意想不到的结果和输入数组:
GLES20.glVertexAttribPointer(a_Position, 3, GLES20.GL_FLOAT, false, 0, verticesBuffer);
被忽略,给定的四边形以不同的形状绘制。无论我改变输入坐标是什么,我仍然得到相同的奇怪形状。
我不是OpenGL编码器,所以我找不到问题。我错过了在这里设置一些州吗?
答案 0 :(得分:0)
正如Reto Koradi在评论中所建议的那样,客户端顶点数组在ES 3.0中已弃用。当切换到VBO时,它可以工作。不确定原因,但假设它与Unity之后留下的一些未知的OpenGL状态有关。