OpenVG および OpenGL | ES の実装を Go 、どちらも Khronos EGL API に依存し、おそらく容易になる移植性と思います。
私は、面白くて教育的な理由でOpenGL ESの上にOpenVGの実装を書いています-レンダリング作業をあまり行っていません。オープンAPIの詳細を学び、明確に定義された標準の実装を練習したいと思います(簡単に私が正しい結果を得たかどうかを確認してください)。
私が理解しているように、EGLは、複数のOS提供のAPI(GLX、WGLなど)の1つを使用する代わりに、描画コンテキスト(またはそれが正しく呼び出されるもの)を取得するための標準APIを提供します
私は、Khronosがそのような努力を払い、標準のOpenGLをループから除外することを信じるのに苦労しますが、問題は、OpenGL(実際の取引)がEGLとどのようにインターフェースするか、またはそれがOpenGL ESのみであるかどうかを見つけられなかったことです。 OpenGL ESがEGLの描画コンテキストを使用できる場合、標準のOpenGLも機能しますか?
私はこれすべてに本当に慣れているので興奮していますが、実際に行っているプロジェクトは、描画操作にOpenVGを利用し、可能な限りハードウェアアクセラレーションを使用するGoウィジェットツールキットです。
OpenVG、OpenGL、OpenGL ESがEGLに依存している場合、私の質問には「はい」または「いいえ」で答えられると思います。昨夜、私はこの問題を頭から始めます。
OpenGLはEGLを使用または依存しますか?
トピック外ですが、EGLタグがありません。あるべきですか?
OpenGLとEGLの間に関係はありません。 EGLは通常、デスクトップで実行されず、EGLを介してデスクトップOpenGLコンテキストを作成することはできません。
代わりに、OpenGLコンテキストは、プラットフォーム固有のAPIによって作成および管理されます。 Windowsでは、WGL APIが使用されます。 X11ベースのプラットフォームでは、GLXが使用されます。などなど。
昨年クロノスから、デスクトップで動作してOpenGLコンテキストを作成できるバージョンのEGLを作成することについていくつかの騒ぎがありましたが、これまでのところ、何も起こりませんでした。
eglBindAPI(EGLenum api)
を使用して、EGL_OPENGL_API
をスレッドの現在のAPIとしてバインドできます。後続のeglCreateContextは、OpenGLレンダリングコンテキストを作成します。
EGL仕様 から、p42:
このセクションで説明する関数の一部は、現在のレンダリングAPIを利用します。これは、次の呼び出しによってスレッドごとに設定されます
EGLBoolean eglBindAPI(EGLenum api);
apiは、EGL_OPENGL_API、EGL_OPENGL_ES_API、またはEGL_OPENVG_APIのいずれかのサポートされているクライアントAPIを指定する必要があります
警告は、EGL実装がEGL_OPENGL_API
をサポートしない権利内にあり、バインドしようとするとEGL_BAD_PARAMETER
エラーを生成することです。
また、AGL/WGL/GLXの残骸を拾わずにlibGLにリンクすることは困難です。これらのプラットフォームのABIでは、libGLがこれらのエントリポイントを提供する必要があります。これで遊んでいるプラットフォームに応じて、問題になる場合と問題にならない場合があります。
OpenGLはEGLを使用または依存しますか?
いいえ。OpenGLはEGLなしで実行できます。
しかし、デスクトップOpenGLコンテキストを作成できるEGL実装を持つことは可能です。これは、EGLの eglBindAPI(int api) がEGL_OPENGL_API、EGL_OPENGL_ES_API、またはEGL_OPENVG_APIを許可するためです。
しかし、あなたが尋ねれば:
OpenGL-ESはEGLを使用または依存しますか?
答えはイエスですが、例外があります。
現在(2015)、グラフィックコンテキストを作成するために[〜#〜] egl [〜#〜]に依存するOpenGL-ESのいくつかの実装があります。 Google ANGLE、PowerVR、ARM MALI、Adreno、AMD、Mesaなど。
しかし、最近のリリースの [〜#〜] nvidia [〜#〜] およびIntelドライバーでは、OpenGL-ESコンテキストを直接要求することもできます。ここで、拡張子WGL_EXT_create_context_es_profileおよびWGL_EXT_create_context_es2_profileが利用可能です(Windows)。 GLX_EXT_create_context_es_profileおよびGLX_EXT_create_context_es2_profile拡張が利用可能です。
EGLの目的は、WGL、GLXなどのプラットフォーム固有の問題を心配することなく、サポートされているグラフィックAPIのコンテキストを初期化および取得するポータブルで標準的な方法を作成することにより、開発者の生活を容易にすることです。これは、EGL実装者の問題であり、最終的なプログラマー。