5

GL10 を使用する 3D ゲームを作成していますが、可能であればアプリケーションで GL11 または GL20 をサポートしたいと考えています。3 つすべてをサポートするための最適な設計は何ですか? それとも、これはばかげた用事であり、1 つのバージョンのサポートに集中する必要がありますか?

私の現在の考えは、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 は null ではありません)。したがって、レンダリング コードは通常、次のように構成する必要があります。

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
  }
}
4

1 に答える 1

10

実際に OpenGL ES 2.0 パスでシェーダーを使用していますか、それとも SpriteBatch とコンソートに依存して汚れた詳細を処理していますか? 後者の場合、GLES 2.0 に移行しても実際の利点はありません (一部のデバイスでは遅くなる可能性がある 2 のべき乗でないテクスチャを除いて)。

通常、GLES 1.x または 2.0 のいずれかを選択します。1.x を使用する場合は、何もする必要はありません。2.0 を使用する場合は、AndroidApplicationConfig を作成し、useGL20 フラグを true に設定する必要があります。アプリを実行するデバイスで GLES 2.0 がサポートされていない場合、libgdx は 1.x にフォールバックします。次に、利用可能な場合は GLES 2.0 を使用し、そうでない場合は 1.x にフォールバックする上記のレンダリング ループを使用できます。ただし、GLES 呼び出しを直接使用しない限り、1.0 と 1.x で別々のパスを用意する必要はほとんどありません。

于 2011-10-16T10:19:03.890 に答える