2013-10-06 2 views
17

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

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

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

+2

Несмотря на «не по теме», я нашел этот вопрос очень полезным для решения других вопросов «в теме». –

+0

related: http://stackoverflow.com/questions/3127360/what-is-egl-and-how-can-i-use-it –

ответ

13

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

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

    Dan Ginsburg, Budirijanto Purnomo, Дейв Шрайнер, Aaftab Munshi. Руководство по программированию 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 Quick Reference Card.

  • (только 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).

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

+0

Ресурс, который вы предоставили, не для EGL, а для «opengl ES», который является gl для систем с расширенными возможностями –

+0

Очевидно, что основной задачей книги является OpenGL ES. В конце концов, «Руководство по программированию OpenGL ES 3.0» - это название книги. Но он также содержит ясное введение в EGL, так как два API тесно связаны между собой. – Chadversary

0

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

3

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

Мне неизвестны какие-либо руководства по EGL. Единственная документация, я знаю это:

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

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

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

+0

Спасибо, я уже понял EGL. Когда я смогу, я напишу какую-нибудь должность или отправлю документированный исходный код. – Kalrish

+0

Этот ответ больше не является правильным. Я нашел хороший учебник EGL, изданный Addison-Wesley. См. Мой новый ответ на вопрос Калриша. – Chadversary

2

Я нашел это tutorial для 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); 
7

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

+0

Я почти уверен, что его там не было, когда я искал. Благодаря :). – Kalrish