アプリケーションでさまざまなopenGL環境を使用したい。
私はゲームアプリを開発していますが、実行が簡単なため、すべてWindowsでテストしています。WindowsにはGL2、AndroidにはGLESを使用しています。私の考えは、「インターフェース」として機能する特定のファイルへのプラットフォームの依存関係を制限することです。残りのコードから、これらのクラスを使用します。両方のライブラリに存在するGL2とGLESの関数のみを使用します。
GL2はそれ自体がインターフェースであり、さまざまなクラスで実装できることに注意してください。
私の最初の推測は、GL2と等しいインターフェース(PlatformGL)を作成し、それにGL2をキャストすることでした。PlatformGLの定義は、プラットフォームごとに1つのバージョンで存在するファイルに含まれますが、受信したGL2をPlatformGLにキャストしません。
public interface PlatformGL extends GL2{
}
または、GL2の実装に直接基づいています(推奨されません):
public class PlatformGL extends jogamp.opengl.gl4.GL4bcImpl{
public PlatformGL(GLProfile prof, GLContextImpl cont){
super(prof, cont);
}
}
どちらの場合も、次のようになります。
java.lang.ClassCastException: jogamp.opengl.gl4.GL4bcImpl cannot be cast to [...].PlatformGL
1つのオプションは、基礎となるGLにすべての関数呼び出しを渡す新しいクラスを作成することですが、GLには多くの関数と変数があり、それらすべてを書き留めたくありません。名前の規則が異なる一部の関数を適切な関数に渡すことができるため、おそらく最もクリーンなバージョンになります。
プリプロセッサを使用してクラス名を置き換える以外に何かアイデアはありますか?
クラスを格納するクラスがJavaにありますか?何かのようなもの
<class> mygl = GLES;
[...]
mygl gl = (mygl) getGL();
gl.glEnable(mygl.GL_DEPTH_BUFFER_BIT);
私はあなたがこれを行う方法についての考えを持っていることを望みます。