web-dev-qa-db-ja.com

EGLとOpenGLの関係は何ですか?

OpenVG および OpenGL | ES の実装を Go 、どちらも Khronos EGL API に依存し、おそらく容易になる移植性と思います。

私は、面白くて教育的な理由でOpenGL ESの上にOpenVGの実装を書いています-レンダリング作業をあまり行っていません。オープンAPIの詳細を学び、明確に定義された標準の実装を練習したいと思います(簡単に私が正しい結果を得たかどうかを確認してください)。

私が理解しているように、EGLは、複数のOS提供のAPI(GLX、WGLなど)の1つを使用する代わりに、描画コンテキスト(またはそれが正しく呼び出されるもの)を取得するための標準APIを提供します

enter image description here

私は、Khronosがそのような努力を払い、標準のOpenGLをループから除外することを信じるのに苦労しますが、問題は、OpenGL(実際の取引)がEGLとどのようにインターフェースするか、またはそれがOpenGL ESのみであるかどうかを見つけられなかったことです。 OpenGL ESがEGLの描画コンテキストを使用できる場合、標準のOpenGLも機能しますか?

私はこれすべてに本当に慣れているので興奮していますが、実際に行っているプロジェクトは、描画操作にOpenVGを利用し、可能な限りハードウェアアクセラレーションを使用するGoウィジェットツールキットです。

OpenVG、OpenGL、OpenGL ESがEGLに依存している場合、私の質問には「はい」または「いいえ」で答えられると思います。昨夜、私はこの問題を頭から始めます。

OpenGLはEGLを使用または依存しますか?


トピック外ですが、EGLタグがありません。あるべきですか?

25
hannson

OpenGLとEGLの間に関係はありません。 EGLは通常、デスクトップで実行されず、EGLを介してデスクトップOpenGLコンテキストを作成することはできません。

代わりに、OpenGLコンテキストは、プラットフォーム固有のAPIによって作成および管理されます。 Windowsでは、WGL APIが使用されます。 X11ベースのプラットフォームでは、GLXが使用されます。などなど。

昨年クロノスから、デスクトップで動作してOpenGLコンテキストを作成できるバージョンのEGLを作成することについていくつかの騒ぎがありましたが、これまでのところ、何も起こりませんでした。

12
Nicol Bolas

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がこれらのエントリポイントを提供する必要があります。これで遊んでいるプラットフォームに応じて、問題になる場合と問題にならない場合があります。

14
RAOF

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実装者の問題であり、最終的なプログラマー。

9
Alex Byrth