2011-09-29 8 views
5

私はGL10を使用している3Dゲームを書いていますが、GL11またはGL20が利用可能であれば、そのアプリケーションがサポートしてほしいです。 3つすべてをサポートするための最良のデザインは何ですか?それとも、これは愚かなことですか?私はちょうど1つのバージョンをサポートすることに集中すべきですか?LibgdxでOpenGL ES GL10、GL11、およびGL20をサポートするにはどうすればよいですか?

私の現在のアイデアは、render()関数をrenderGL10、renderGL11、renderGL20に分割し、使用可能なGLインスタンスに基づいて適切なレンダリング関数を呼び出すことです。各レンダリング機能の中にはGL版のレンダリング方法があります。 GL10とGL11の重複が考えられます。これは私の問題を処理する適切な方法ですか、それとも良い方法がありますか?

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

EDIT: ソリューション: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 
    } 
} 

答えて

10

あなたが実際にあなたのOpenGL ES 2.0のパスにシェーダを使用していますか、SpriteBatchに依存しない、あなたのために汚い詳細を処理するCONSORTS:次のように、私のレンダリングコードは、一般的に構造化されなければなりませんか?後者の場合、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の別々のパスを持つ必要はありません。

+1

私はまだライブラリのアート部分をあまり使っていません。私は、gles2.0やlibgdxがgl1.xをどのように扱うかをあまり知らないうちに、どのように設計したいのかを探っています。私はこのゲームを使ってゲームプログラミングとGLESの知識を広げていますので、私は両方をサポートしたいので、私はGLSLを学ぼうとすることができます。 1.xに関するあなたの答えに基づいて、AndroidとJoglバックエンドのソースを簡単に見て、gl11が利用可能なときにGdx.gl10 = Gdx.gl11; gl11が設定されているとgl10がnullになることが予想されました(2.0が利用可能な場合、gl10とgl11はnullになります)。これとあなたの答えは本当に助けになりました。 – Doran

関連する問題