Подтвердить что ты не робот

Руководство EGL для начинающих

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

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

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

4b9b3361

Ответ 1

Чтобы начать изучение 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 и произвести a EGLSurface из этого окна. (Примеры программ из Руководства по программированию OpenGL ES 3.0 также демонстрируют, как это сделать, но вы можете найти более целенаправленное лечение в спецификации EGL_EXT_platform_x11).

  • (только для Linux) Кроме того, спецификация расширения EGL_MESA_platform_gbm демонстрирует, как сделать то же самое, но для GBM, безгонный EGL-сервер, поддерживаемый драйверами с открытым исходным кодом Linux (руководство по программированию OpenGL ES 3.0 не касается GBM).

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

Ответ 2

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

Ответ 3

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

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

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

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

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

Ответ 4

Я нашел этот учебник для iOS и this для 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);

Ответ 5

Я не знаю никакого учебника, чтобы помочь вам, но я нашел этот пример, полезный для Android