我尝试在运行app的设备上获得最大纹理大小:
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上出现同样的异常)
为什么呢?每个论坛或文档都说它是正确的。
答案 0 :(得分:1)
堆栈跟踪显示在Gdx.gl.glGetIntegerv
内没有发生NullPointerException,强烈表明Gdx.gl.glGetIntegerv
本身可能是一个NULL指针。
由于glGetIntegerv
是必须存在于GL和GLES的所有版本中的核心功能,因此最合理的解释是在正确初始化GL绑定之前调用此函数。
要使此函数返回有意义的值,在任何情况下都需要有效的GL上下文,因此必须在创建GL上下文后将其移动到某个点。