2013-10-06 14 views
17

Chciałbym dostać się do EGL. Jednak "jedyne", które udało mi się znaleźć, to referencja API. Wyszukiwanie "egl guide", "egl tutorial" lub "egl dla początkujących" nie powiodło się. Czy ktoś wie o dobrym zasobie?Przewodnik EGL dla początkujących

EGL może nie być "biblioteką dla początkujących". W takim razie, myślę, że powinienem zacząć od początku - ale jaki jest początek? Właśnie przeczytałem, że EGL jest warstwą abstrakcji ponad zależnymi od systemu interfejsami API rysowania, a zatem jest to "poprawna" droga. Wayland go używa, podobnie jak kmscon. Jednak przyjrzenie się ich kodowi źródłowemu sprawiło tylko ból głowy.

P.S .: Na marginesie, czuję się bardziej komfortowo z C++ (choć domyślam się, że jeśli działa na C, powinien działać również na C++). Używam też najnowszego jądra, z najnowszym wydaniem Mesy, więc domyślam się, że jest dostępne wsparcie dla EGL.

+2

Pomimo "braku tematu", stwierdziłem, że to pytanie jest bardzo przydatne w rozwiązywaniu innych pytań "na temat". –

+0

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

Odpowiedz

13

Aby rozpocząć naukę EGL, polecam następujące zasoby.

  • OpenGL ES 3.0 Programming Guide od Addison-Wesley stanowi dobre wprowadzenie do korzystania EGL z OpenGL ES, wraz z example code na Github. Tekst książki stanowi wprowadzenie do części EGL, które są niezależne od systemu operacyjnego.Aby objąć części specyficzne dla systemu operacyjnego, przykładowy kod książki zawiera pełny program działający na każdym głównym systemie operacyjnym. (Addison-Wesley jest wydawcą wielu znanych książek OpenGL, takich jak The Red Book i OpenGL SuperBible).

    Dan Ginsburg, Budirijanto Purnomo, Dave Shreiner, Aaftab Munshi. Przewodnik programowania OpenGL ES 3.0, 2e, Rozdział 3: Wprowadzenie do języka EGL. Addison-Wesley, 2014. ISBN-13: 978-0-321-93388-1, ISBN-13: 978-0-13-344016-4.

  • Podczas nauki trzymaj u swojego boku oficjalny EGL 1.4 Quick Reference Card.

  • (tylko Linux) Przykładowy kod w specyfikacji EGL_EXT_platform_x11 rozszerzenia pokazuje, jak utworzyć okna X11 i produkować EGLSurface z tego okna. (Przykładowe programy z OpenGL ES 3.0 Podręcznik programowania również pokazują, jak to zrobić, ale może się okazać, że łatwiej jest śledzić bardziej ukierunkowane traktowanie w specyfikacji EGL_EXT_platform_x11).

  • (tylko Linux) Podobnie, specyfikacja EGL_MESA_platform_gbm rozszerzenie pokazuje, jak zrobić to samo, ale dla GBM, bezgłowy EGL backend obsługiwane przez kierowców opensource Linux. (The OpenGL ES 3.0 Programming Guide nie dotykać GBM).

W zależności od celów, przydatne mogą być również następujące zasoby niskiego poziomu, wszystkie znalezione w Rejestrze Khronos EGL.

+0

Zasób, który podałeś nie jest dla EGL, jest dla "opengl ES", który jest dla systemów embended –

+0

Oczywiście książka skupia się głównie na OpenGL ES. W końcu tytuł książki to "Przewodnik programowania OpenGL ES 3.0". Ale zawiera również wyraźne wprowadzenie do EGL, ponieważ dwa interfejsy API są ze sobą ściśle powiązane. – Chadversary

0

Nie znam żadnego samouczka, aby pomóc, ale znalazłem this example przydatnych dla Androida

3

EDIT:Niedawno odkryto dobry samouczek EGL publikowanych przez Addison-Wesley. Zobacz mój numer new answer w celu uzyskania szczegółowych informacji. Ta odpowiedź jest nieaktualna, ale powinna zostać zachowana, ponieważ wciąż zawiera przydatne informacje.

Nie znam żadnych tutoriali EGL. Jedyna dokumentacja wiem to:

EGL 1.5 jest niskopoziomowym systemem API do tworzenia kontekstów OpenGL i OpenGL ES; połączenie tych kontekstów z systemem okienkowym; oraz współużytkowanie buforów graficznych i zdarzeń grapics między aplikacjami, systemem okien i innymi komponentami systemowymi, takimi jak OpenCL, silniki dekodowania wideo i sprzęt fotograficzny.

Biorąc pod uwagę przypadki użycia docelowego EGL i odbiorców programistów, nie jestem zaskoczony, że nie istnieją żadne samouczki.

Jeśli zastanawiasz się, jak wykonać pewne zadanie za pomocą EGL i używasz systemu Linux z opensource'owymi sterownikami OpenGL, możesz znaleźć odpowiedzi, kontaktując się z programistami Mesa [http://mesa3d.org/lists.html].

+0

Dziękuję, zrozumiałem już EGL. Napiszę pewnego rodzaju post, lub przekażę udokumentowany kod źródłowy, kiedy będę mógł. – Kalrish

+0

Ta odpowiedź nie jest już poprawna. Znalazłem dobry tutorial EGL opublikowany przez Addison-Wesley. Zobacz moją nową odpowiedź na pytanie Kalbrisha. – Chadversary

2

Znalazłem ten tutorial dla systemu iOS i this dla systemu Windows.

Oto niektóre przykładowy kod pochodzących z tego ostatniego do uzyskania wyświetlanie i konfigurowanie go 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

Jestem nieco zaskoczony, że eglIntro nie zostały jeszcze wymienione.
Jest to najbliższy mojemu przewodnikowi i był bardzo przydatny podczas nauki EGL.

+0

Jestem prawie pewien, że nie było go z powrotem, kiedy szukałem. Dzięki :). – Kalrish

Powiązane problemy