2014-02-21 67 views
0

我收到一個錯誤我不明白當我嘗試在運行Android 4.4的手機上啓動我的應用程序時(這是一個Moto G,如果這有幫助):Android OpenGL錯誤:「剩餘()<需要」和Android 4.4

java.lang.IllegalArgumentException: remaining() < needed 

Exception thrown in Thread[GLThread 85832,5,main] java.lang.IllegalArgumentException: remaining < needed 
at android.opengl.GLES20.glGetInteger v(Native Method) 
at com.jme3.renderer.android.OGLESShaderRenderer.intialize(OGLESShaderRenderer.java:311) 
at com.jme3.system.android.OGLESContext.initInThread(OGLESContext.java:215) 
at com.jme3.system.android.OGLESContext.onSurfaceCreated(OGLESContext.java:187) 
at android.opengl.GLSurfaceView$GLTread.guardedRun(GLSurfaceView.java:1501) 
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

當我在運行Android 4.0的Xperia U上運行完全相同的代碼時,它運行良好。這裏發生了什麼,我可以採取哪些步驟來確保我的代碼可以在各種設備上運行?

回答

1

glGetIntegerv() Java綁定的一個變體需要參數IntBuffer來保存多個返回值。如果你的請求需要比緩衝區更多的空間,你將會得到這個錯誤。

老版本的jMonkeyEngine對固定大小的緩衝區請求了GL_COMPRESSED_TEXTURE_FORMATS。呼叫在支持太多格式的設備上失敗。 (您應該查詢GL_NUM_COMPRESSED_TEXTURE_FORMATS,並使用該值來調整緩衝區大小。)在舊版本的Android上,實際上會導致堆損壞,因爲Java語言綁定確實比較錯誤,並且允許數據寫入超過IntBufferfixed)。

您可以看到修復jMonkeyEngine applied here。通過例外的行號來判斷,您使用的是版本的jMonkeyEngine,該版本在修復前進行。

+0

我更新到最新版本的jMonkey SDK,並修復它。非常感謝你。 – tomsrobots