2015-12-14 62 views
2

我嘗試在設備上獲得最大的紋理尺寸,其中應用程序正在運行:LibGDX獲得最大紋理大小 - 空指針異常

protected int getMaxTextureSize() { 
    IntBuffer buf = BufferUtils.newIntBuffer(16); 
    Gdx.gl.glGetIntegerv(GL20.GL_MAX_TEXTURE_SIZE, buf); //here is null pointer exception 
    return buf.get(); 
} 

和應用程序崩潰,當我使用它:

Exception in thread "main" java.lang.NullPointerException 
    at com.example.ResourceManager.getMaxTextureSize(ResourceManager.java:32) 
    at com.example.ResourceManager.<init>(ResourceManager.java:23) 
    at com.example.Game.<init>(Game.java:17) 
    at com.example.desktop.DesktopLauncher.main(DesktopLauncher.java:15) 

(上Android同樣出現異常)

爲什麼?每個論壇或文檔都說它是正確的。

+1

你確定在GL上下文被正確初始化後調用了這個。棧stace看起來像'dx.gl.glGetIntegerv'本身可以是NULL。 – derhass

+1

@derhass:謝謝。就是這樣:)請做出回答,我會接受它。 – ElSajko

回答

1

堆棧跟蹤顯示在Gdx.gl.glGetIntegerv內部不會發生NullPointerException,強烈指示Gdx.gl.glGetIntegerv本身可能是NULL指針。

由於glGetIntegerv是一個核心函數,它必須存在於所有版本的GL和GLES中,所以最合理的解釋是在GL綁定正確初始化之前調用該函數。

對於此函數返回有意義的值,無論如何您總是需要一個有效的GL上下文,所以您必須在GL上下文創建後將其移動到某個點。