我有一个使用OpenGL ES2.0的应用,在Android各个版本中运行正常,从2.2到4.1。然而,我被告知在运行Android 4.2的Nexus 7上,应用程序中的3D图形全部是黑色的。但ActionBar和对话框正常工作。我已经在模拟的带有Intel Atom处理器、启用HAX和GPU的Nexus 7上尝试了4.2.2版本,并且可以正常运行。虽然我更喜欢运行ARM映像,但似乎那个版本不包含Open GL ES2.0。
有没有人了解什么可能导致Nexus 7上的问题,以及如何解决呢?
一个可能性是当前应用程序版本的目标API级别设置为15,而4.2.2是级别17。这可能是个问题吗?但在模拟器上它能正常工作。
以下是我在onSurfaceCreated()中用于设置渲染器纹理的代码,希望能提供一些帮助。
有没有人了解什么可能导致Nexus 7上的问题,以及如何解决呢?
一个可能性是当前应用程序版本的目标API级别设置为15,而4.2.2是级别17。这可能是个问题吗?但在模拟器上它能正常工作。
以下是我在onSurfaceCreated()中用于设置渲染器纹理的代码,希望能提供一些帮助。
/**
* Sets up texturing for the object
*/
private void setupTextures(String[] texFiles) {
// create new texture ids if object has them
// number of textures
mTextureIDs = new int[texFiles.length];
GLES20.glGenTextures(texFiles.length, mTextureIDs, 0);
for(int i = 0; i < texFiles.length; i++) {
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureIDs[i]);
// parameters
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
GLES20.GL_NEAREST);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
GLES20.GL_TEXTURE_MAG_FILTER,
GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
GLES20.GL_REPEAT);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
GLES20.GL_REPEAT);
int ID = mContext.getResources().getIdentifier( texFiles[i], "raw", "com.antonymsoft.slidixcube" );
InputStream is = mContext.getResources().openRawResource(ID);
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch(IOException e) {
// Ignore.
}
}
// create it
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
}
}
// 设置 Renderer 以在 GLSurfaceView 上绘制 mCubeSize = 2; mCubeRenderer = new CubeRenderer( context ); setRenderer(mCubeRenderer); // 当绘图数据发生变化时,只有在需要时才渲染视图。 setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
` - tonyw