2015-10-10 92 views
1

我正在嘗試使用OpenGLES2.0爲Android開發一個小型遊戲,並且我遇到了阻止我實現設備之間兼容性的問題。我使用兩個設備(Xperia Z1和Galaxy S2)測試我的應用(因爲模擬器不支持OpenGLES2.0)。如果我打電話給GLUtils.texImage2D加載帶有來自分辨率低於或等於1024x1024的圖像的位圖的紋理,它在兩個設備中都能正常工作。在S2上使用2048x2048的紋理,但不再在Z1上(它返回GL_INVALID_VALUE)。加載比Z1更高的任何東西都不適用,也不適用於S2。不過,我已經選中GL_MAX_TEXTURE_SIZE,並在它被設置爲4096兩個設備,我不知道什麼是錯的,我稱之爲texImage2D如下:GL_INVALID_VALUE from GLUtils.texImage2D

GLES20.glGenTextures(1,texture,0); 
Bitmap bmp = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.test); 
GLES20.glActiveTexture(GLES20.GL_TEXTURE0); 
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture[0]); 
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); 
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); 
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0); 

提前感謝!

回答

1

好吧,我會回答我自己的問題,因爲我已經發現了什麼是錯的。由於我處於android開發的早期階段,因此我將所有紋理放在drawable文件夾中。 Android自動根據設備的dpi來縮放此圖像,Xperia Z1的屏幕爲441dpi,相對於Galaxy S2的217dpi,導致調整大小的更大因素,創建位圖時以較小的紋理達到GL_MAX_TEXTURE_SIZE限制。我現在使用drawable-nodpi文件夾,它可以工作,但我會更多地瞭解這一點。

相關問題