Руководство EGL для начинающих [закрыто]

Я хотел бы попасть в EGL. Тем не менее," единственный", который я смог найти, - это ссылка на API. Поиск "egl guide", "egl tutorial" или "egl для начинающих" не удался. Кто-нибудь знает о хорошем ресурсе?

EGL не может быть "библиотекой для начинающих". В таком случае, полагаю, мне следует начать с самого начала - но с чего же начать? Я только что прочитал, что EGL-это слой абстракции над системно-зависимыми API рисования, таким образом, это "правильный" способ. Вэйланд использует это, как и kmscon. Однако изучение их исходного кода только вызвало у меня головную боль.

P. S.: И как Примечание стороны, я чувствую себя более комфортно с C++ (хотя я думаю, что, если он работает на C, он также будет работать на C++). Кроме того, я использую последнее ядро с последним выпуском Mesa, поэтому я думаю, что для EGL доступна поддержка.

5 ответов


чтобы начать изучение EGL, я рекомендую следующие ресурсы.

  • на OpenGL ES 3.0 руководство по программированию из Addison-Wesley предоставляет хороший учебник по использованию EGL с OpenGL ES, в комплекте с пример кода на Github. Текст книги содержит введение в части EGL, которые не зависят от операционной системы. Чтобы охватить конкретные части операционной системы, пример кода книги предоставляет полный программа, которая работает на каждой основной операционной системе. (Аддисон-Уэсли является издателем многих известных книг OpenGL, таких как Красная Книга и OpenGL SuperBible).

    Дэн Гинзбург, Будириджанто Пурномо, Дэйв Шрайнер, Аафтаб Мунши. 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 с открытым исходным кодом.(The OpenGL ES 3.0 руководство по программированию не касается GBM).

в зависимости от ваших целей, вы также можете найти полезными следующие низкоуровневые ресурсы, все найденные в реестре Khronos EGL.


Я немного удивлен, что eglIntro еще не упоминались.
Это самое близкое, что я мог найти к учебнику и был действительно полезным ресурсом при изучении EGL.


изменить: недавно я обнаружил хороший учебник EGL, опубликованный Addison-Wesley. Смотрите мой ответ за подробностями. Этот ответ устарел, но его следует сохранить, поскольку он по-прежнему содержит полезную информацию.

Я не знаю ни ее учебники. Единственная документация, о которой я знаю, это:

EGL 1.5 - это низкоуровневый системный API для создания контекстов OpenGL и OpenGL ES; подключения этих контекстов к оконной системе; и совместного использования графики буферы и события grapics между приложениями, оконной системой и другими компонентами системы, такими как OpenCL, движки декодирования видео и аппаратное обеспечение камеры.

учитывая целевые случаи использования EGL и аудиторию разработчиков, я не удивлен, что никаких учебников не существует.

Если вы исследуете, как выполнить некоторую задачу с EGL, и вы используете Linux с драйверами opensource OpenGL, то вы можете найти свои ответы, связавшись с разработчиками Mesa [http://mesa3d.org/lists.html].


и учебник для iOS и этой для 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