2015-12-14 3 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

Трассировка стека показывает, что исключение NullPointerException не происходит внутри Gdx.gl.glGetIntegerv, что указывает на то, что Gdx.gl.glGetIntegerv сам может быть указателем NULL.

С glGetIntegerv - основная функция, которая должна присутствовать во всех версиях GL и GLES, наиболее правдоподобным объяснением является то, что вы вызываете эту функцию до того, как привязка GL будет правильно инициализирована.

Для того чтобы эта функция возвращала значащие значения, в любом случае вам всегда понадобится действительный контекст GL, поэтому вы должны перенести его в какую-то точку после создания контекста GL.

Смежные вопросы