Руководство 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. Смотрите мой ответ за подробностями. Этот ответ устарел, но его следует сохранить, поскольку он по-прежнему содержит полезную информацию.
Я не знаю ни ее учебники. Единственная документация, о которой я знаю, это:
- спецификация:http://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf
- человек страницы: http://www.khronos.org/registry/egl/sdk/docs/man/xhtml/
- реестр расширений:http://www.khronos.org/registry/egl/
- определение XML API:https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/egl.xml
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);