GLES2.0 - glDrawElements不起作用

时间:2013-08-09 19:29:27

标签: android opengl-es-2.0

我目前正在开发第一个在Android上使用OpenGL ES 2.0的项目。

我正在解析一个目标文件(.obj)并希望渲染生成的网格物体。 问题是它在我的“Galaxy Nexus”上运行得非常好,但是当我尝试在“Samsung Galaxy Note 10.1”上运行应用程序时,屏幕上没有任何内容。

由于它在Nexus上正确呈现,我认为.obj被正确解析 - 但如果不是,我认为我应该在平板电脑上看到任何内容 - 即使它不正确。

这是我用于渲染的代码。

    GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, triangleBuffer);
    GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, indexBuffer);       
    //System.out.println(("MESH: " +  GLES20.glGetAttribLocation(shaderProgram, "vertex") + " " + GLES20.glGetAttribLocation(shaderProgram, "vertex")));
    GLES20.glVertexAttribPointer(GLES20.glGetAttribLocation(shaderProgram, "vertex"), 3, GLES20.GL_FLOAT, false, floatPerVertex*mBytesPerFloat, 0);
    GLES20.glEnableVertexAttribArray(GLES20.glGetAttribLocation(shaderProgram, "vertex"));
    GLES20.glVertexAttribPointer(GLES20.glGetAttribLocation(shaderProgram, "normal"), 3, GLES20.GL_FLOAT, false, floatPerVertex*mBytesPerFloat, 3*mBytesPerFloat);
    GLES20.glEnableVertexAttribArray(GLES20.glGetAttribLocation(shaderProgram, "normal"));  
    GLES20.glDrawElements(GLES20.GL_TRIANGLE_STRIP, faceCount , GLES20.GL_UNSIGNED_INT, 0);

Nexus设备和其他设备上的GLES 2.0之间是否存在不匹配?

编辑: LogCat

中没有错误

2 个答案:

答案 0 :(得分:12)

我敢打赌问题是使用GL_UNSIGNED_INT 有些GPU只支持GL_UNSIGNED_SHORT

此页面可能有助于您确定设备支持的确切功能 Android Developer: OpenGL Compatibility

答案 1 :(得分:1)

OpenGL ES和EGL驱动程序在Android上经常出现问题。我注意到很多人特别关注三星驱动程序。我建议您尝试使用Nvidia Tegra,PowerVR或Adreno GPU的设备并尝试AVD仿真。如果这些工作,那么你的问题可能是三星的驱动程序。

您是否在每次通话后检查OpenGL ES错误?这可以帮助缩小问题的范围。编译和链接着色器和glUseProgram()时的错误特别常见。