4

我目前正在开发我的第一个项目,在 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 中没有错误

4

2 回答 2

12

我敢打赌,问题是使用GL_UNSIGNED_INT.
某些 GPU 仅支持GL_UNSIGNED_SHORT.

此页面可能有助于帮助您准确确定设备支持的功能。
Android 开发者:OpenGL 兼容性

于 2013-08-09T19:37:34.297 回答
1

OpenGL ES 和 EGL 驱动程序在 Android 上经常出现错误。我注意到很多人尤其对三星驱动程序有问题。我建议您尝试使用 Nvidia Tegra、PowerVR 或 Adreno GPU 的设备并尝试 AVD 仿真。如果这些有效,那么您的问题可能与三星的驱动程序有关。

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

于 2013-08-09T19:46:06.063 回答