私はどこでも使えるいくつかのOpenGLコードを書こうとしてきましたが、自分自身をあまり制限することはありませんでした。
opengles2をサポートしているデバイスではopengles2を使用し、サポートされている場合はopenglコアを使用したいと考えました。OpenGLとOpenGLES2の互換性
また、実行時に使用するものを選択できるようにしたいと考えています(利用可能な場合はもちろん)。
私の質問は以下のとおりです。
私はOpenGLライブラリとそれが利用可能であるたびに、私のコードをリンクして、GLES2またはGLコアコンテキストを作成するいずれかの場合、GLES2コンテキストがGLESv2ライブラリとまったく同じように動作しますか?ヘッダーワイズの影響はどうなりますか? たとえば、GLESv2はBGRAテクスチャフォーマットを定義していないので、すべてをRGBAに変換する必要があります。それはあまり面倒ではありませんが、私は代替案を知ることに興味があります。
私は、ライブラリを動的にロードし、使用されているすべての関数ポインタをロードすることを考えましたが、それは多分簡単な答えがあるもののための膨大な量の作業です。 この場合、glext.hをインクルードして、使用された関数のすべての関数ポインタを宣言してそれらを生成します。 ここで問題になるのは、glextはデータ型(glenumなど)を定義しないため、常にgl.hを含める必要があるということです。 両方を含めることで、gl.h関数宣言と私自身の関数ポインタ宣言が得られるので、関数ポインタの汎用名前空間を使うことはできませんでした...そして、それでもglGetErrorのようないくつかの関数は見えませんそれらの関数ポインタに関連するtypedefを持つこと。
私はGLEWについて知っていますが、残念ながら、ほとんどのLinuxディストリビューションはまだGLES2と互換性のないGLEWのバージョンを配布しています(debian、私はあなたを見ています)。それはちょうどsegfaults。
あなたはどうしますか? OpenGL関数をリンクするための他の方法はありますか?