Как мне поддерживать OpenGL ES GL10, GL11 и GL20 в Libgdx? - PullRequest
5 голосов
/ 30 сентября 2011

Я пишу 3d-игру, в которой используется GL10, но я бы хотел, чтобы приложение поддерживало GL11 или GL20, если таковые имеются.Каков наилучший дизайн для поддержки всех 3?Или это глупое поручение, и я должен просто сосредоточиться на поддержке одной версии?

Моя текущая идея состоит в том, чтобы разделить мою функцию render () на renderGL10, renderGL11, renderGL20 и вызвать соответствующую функцию рендеринга на основе доступного GLпример.Внутри каждой функции рендеринга есть правильный способ рендеринга для версии GL;скорее всего, будет совпадение для GL10 и GL11.Это подходящий способ решить мою проблему или есть лучший способ?

public render(){
  if (Gdx.graphics.isGL20Available()){
    renderGL20();
  } else if (Gdx.graphics.isGL11Available()){
    renderGL11();
  } else { 
    renderGL10();
  }
}

РЕДАКТИРОВАТЬ: Решение: Если доступен gl1.x, также доступен gl10 (и Gdx.gl10 не является нулевым).Итак, мой код рендеринга обычно должен быть структурирован следующим образом:

public render(){
  // Use Gdx.gl for any gl calls common to all versions
  if (Gdx.graphics.isGL20Available()){
    // Use Gdx.GL20 for all gl calls
  } else {
    if (Gdx.graphics.isGL11Available()){
      // Use Gdx.gl11 for any gl11 call not supported by gl10
    } 
    // Use Gdx.gl10 for all gl calls
  }
}

1 Ответ

10 голосов
/ 16 октября 2011

Вы на самом деле используете шейдеры в своем пути OpenGL ES 2.0 или вы полагаетесь на SpriteBatch и консорты, чтобы обрабатывать грязные детали для вас?В последнем случае нет никакой реальной выгоды в использовании GLES 2.0 (кроме не мощных двух текстур, которые могут быть медленнее на некоторых устройствах)

Обычно вы выбираете между GLES 1.x или 2.0.Если вы используете 1.x, вам не нужно ничего делать.Если вы хотите использовать 2.0, вам нужно создать AndroidApplicationConfig и установить для флага useGL20 значение true.Если GLES 2.0 не поддерживается на устройстве, на котором вы запускаете приложение, libgdx вернется к 1.x.Затем вы можете использовать вышеприведенный цикл рендеринга, который будет использовать GLES 2.0, если он доступен, и в противном случае вернуться к 1.x.Однако вряд ли вам понадобятся отдельные пути для 1.0 и 1.x, если только вы не используете вызовы GLES напрямую.

...