2015-12-14 46 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上下文创建后将其移动到某个点。