30

EGLに入りたいです。ただし、私が見つけた「唯一の」ものは API リファレンスです。「egl ガイド」、「egl チュートリアル」、または「egl 初心者向け」の検索は成功しませんでした。良いリソースを知っている人はいますか?

EGL は「初心者向けのライブラリ」ではないかもしれません。だったら最初からやり直せばいいんだけど、最初って何?EGL はシステムに依存する描画 API の抽象化レイヤーであるため、「正しい」方法であると読みました。Wayland はそれを使用し、kmscon も使用します。しかし、彼らのソース コードを調べてみると、頭が痛くなるだけでした。

PS: 余談ですが、私は C++ の方が快適だと思います (ただし、C で動作する場合は、C++ でも動作するはずです)。また、最新の Mesa リリースで最新のカーネルを使用しているため、EGL のサポートが利用できると思います。

4

5 に答える 5

13

eglIntroがまだ言及されていないことに少し驚いています。
これはチュートリアルに最も近いものであり、EGL を学習する際に非常に役立つリソースでした。

于 2014-09-13T08:31:29.153 に答える
2

iOS 用のこのチュートリアルとWindows 用のthis を見つけました。

ディスプレイを取得して 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);
于 2014-05-11T00:24:07.733 に答える
0

役立つチュートリアルはわかりませんが、この例はAndroidに役立つことがわかりました

于 2013-10-08T12:36:50.440 に答える