EGLに入りたいのですが。ただし、私が見つけた「唯一の」ものはAPIリファレンスです。 「eglガイド」、「eglチュートリアル」、または「egl for beginners」の検索に失敗しました。誰かが良いリソースを知っていますか?
EGLは「初心者向けのライブラリ」ではない可能性があります。その場合、私は最初から始めるべきだと思います-しかし、最初は何ですか? EGLはシステム依存の描画APIの抽象化レイヤーであり、「正しい」方法であることを読んだばかりです。ウェイランドはそれを使用し、kmsconも使用します。彼らのソースコードを調べても、頭痛の種に過ぎませんでした。
追伸:補足として、C++の方が快適だと感じています(ただし、Cで動作する場合は、C++でも動作するはずです)。また、私は最新のMesaリリースの最新のカーネルを使用しているので、EGLのサポートが利用できると思います。
EGLの学習を開始するには、以下のリソースをお勧めします。
Addison-Wesleyの OpenGL ES 3.0プログラミングガイド は、OpenGL ESでのEGLの使用に関する優れたチュートリアルを提供し、 サンプルコード = Github。この本のテキストは、オペレーティングシステムに依存しないEGLの部分の紹介を提供します。オペレーティングシステム固有の部分をカバーするために、本のサンプルコードは、各主要なオペレーティングシステムで動作する完全なプログラムを提供します。 (Addison-Wesleyは、The Red BookやOpenGL SuperBibleなどの多くの有名なOpenGLブックの発行者です)。
ダンギンズバーグ、ブディリジャントプルノモ、デイブシュライナー、アーフタブムンシ。 OpenGL ES 3.0プログラミングガイド、2e、第3章:EGLの概要。 Addison-Wesley、2014。ISBN-13:978-0-321-93388-1、ISBN-13:978-0-13-344016-4。
学習している間、公式の EGL 1.4クイックリファレンスカード を脇に置いてください。
(Linuxのみ)EGL_EXT_platform_x11 拡張仕様のサンプルコードは、X11ウィンドウを作成してEGLSurface
そのウィンドウから。 (OpenGL ES 3.0プログラミングガイドのサンプルプログラムもこれを行う方法を示していますが、EGL_EXT_platform_x11仕様では、より焦点を絞った扱い方がわかりやすい場合があります)。
(Linuxのみ)同様に、 EGL_MESA_platform_gbm 拡張仕様は、同じ方法を示していますが、GBMの場合、ヘッドレスEGLバックエンドオープンソースLinuxドライバーでサポートされています(OpenGL ES 3.0プログラミングガイドはGBMに触れていません)。
目標によっては、Khronos EGLレジストリーにある以下の低レベルのリソースも役立つ場合があります。
eglIntro がまだ言及されていないことに少し驚いています。
これは、チュートリアルに最も近いものであり、EGLを学ぶときに非常に役立つリソースでした。
編集:私は最近、Addison-Wesleyによって公開された優れたEGLチュートリアルを発見しました。詳細については、私の 新しい答え を参照してください。この回答は古くなっていますが、有用な情報がまだ含まれているため、保存する必要があります。
EGLチュートリアルについては知りません。私が知っている唯一のドキュメントは:
EGL 1.5は、OpenGLおよびOpenGL ESコンテキストを作成するための低レベルシステムAPIです。これらのコンテキストをウィンドウシステムに接続する。アプリケーション、ウィンドウシステム、およびOpenCL、ビデオデコードエンジン、カメラハードウェアなどの他のシステムコンポーネント間でグラフィックバッファーとグラフィックスイベントを共有します。
EGLのターゲットユースケースと開発者を考慮して、チュートリアルが存在しないことは当然です。
EGLでいくつかのタスクを実行する方法を調査していて、オープンソースのOpenGLドライバーでLinuxを使用している場合は、Mesa開発者に連絡して回答を見つけることができます[ http://mesa3d.org/lists.html] 。
私はこれを tutorial for iOSと this for Windowsと見つけました。
表示を取得してEGLで構成するために後者から抽出したサンプルコードを以下に示します。
// Obtain an EGL display object.
EGLDisplay display = eglGetDisplay(GetDC(hWnd));
if (display == EGL_NO_DISPLAY)
{
return EGL_FALSE;
}
// Initialize the display
if (!eglInitialize(display, &majorVersion, &minorVersion))
{
return EGL_FALSE;
}
// Obtain the display configs
if (!eglGetConfigs(display, NULL, 0, &numConfigs))
{
return EGL_FALSE;
}
// Choose the display config
if (!eglChooseConfig(display, attribList, &config, 1, &numConfigs))
{
return EGL_FALSE;
}
// Create a surface
surface = eglCreateWindowSurface(display, config, (EGLNativeWindowType)hWnd, NULL);
if (surface == EGL_NO_SURFACE)
{
return EGL_FALSE;
}
// Create a drawing context from the EGLDisplay
context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
if (context == EGL_NO_CONTEXT)
{
return EGL_FALSE;
}
// Make the context current
if (!eglMakeCurrent(display, surface, surface, context))
{
return EGL_FALSE;
}
//to show your drawing you swap the buffers like this
eglSwapBuffers(drawContext->eglDisplay, drawContext->eglSurface);
//Terminating a display (release the window resources)
EGLBoolean eglTerminate(eglDisplay);
私はあなたを助けるためのチュートリアルを知りませんが、私は この例 Androidに役立ちました