我有一個OpenGL ES2.0應用程序,該應用程序正在運行各種Android版本從2.2到4.1的設備上工作。不過,有人告訴我,當使用Android 4.2在Nexus 7上運行它時,應用程序中的3D圖形都是黑色的。操作欄和對話框雖然工作正常。我已經在模擬的Nexus 7上使用了英特爾凌動處理器,HAX和GPU啓用運行4.2.2,並且工作正常。我本來希望運行ARM映像,但似乎沒有包含Open GL ES2.0GLSurfaceView在Android 4.2上顯示Nexus 7上的黑色
有沒有人有任何瞭解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();
}
}
如果表面完全是黑色的,我認爲這個問題比紋理加載更重要。你的渲染模式是什麼?你如何設置GL環境? –
@ReubenScratton感謝您的回覆!下面的代碼從我的類的構造函數中設置我的上下文和rendermode從GLSurfaceView派生。 '//創建一個OpenGL ES 2.0上下文。 setEGLContextClientVersion(2); //設置渲染器在GLSurfaceView上繪圖 mCubeSize = 2; mCubeRenderer = new CubeRenderer(context); setRenderer(mCubeRenderer); //僅在繪圖數據發生變化時渲染視圖 setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); ' – tonyw
哦,我忘了說我使用XML佈局創建了我的GLSurfaceView子類的實例,然後使用findViewById()來檢索引用。 – tonyw