Ist es erlaubt, egl Kontext von main() zu erzeugen und von einem anderen Thread zu rendern, wenn die Kontext-Handles von main() an die Thread-Funktion übergeben werden?egl - Kann Kontext zwischen Threads geteilt werden
9
A
Antwort
16
Ja, sicher ist.
Zuerst müssen Sie in einem Thread einen Kontext, in erstellen:
EGLint contextAttrs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
LOG_INFO("creating context");
if (!(m_Context = eglCreateContext(m_Display, m_Config, 0, contextAttrs)))
{
LOG_ERROR("eglCreateContext() returned error %d", eglGetError());
return false;
}
Dann in dem anderen Thread Sie einen gemeinsamen Kontext wie folgt erstellen:
EGLint contextAttrs[] =
{
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
if (m_Context == 0)
{
LOG_ERROR("m_Context wasn't initialized for some reason");
}
// create a shared context for this thread
m_LocalThreadContext = eglCreateContext(m_Display, m_Config, m_Context, contextAttrs);
Sie werden natürlich müssen haben einige Mutex/Semaphore, um alle Updates mit GLES zu synchronisieren. Zum Beispiel benötigen Sie einen
eglMakeCurrent(m_Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
im Thread vor dem anderen Thread aufrufen tun
if (!eglMakeCurrent(m_Display, m_Surface, m_Surface, m_Context))
{
LOG_ERROR("eglMakeCurrent() returned error %d", eglGetError());
}
Dann können Sie Texturen, Last-Shadern erstellen usw. entweder Thread
Verwandte Themen
- 1. Welche Ressourcen werden zwischen Threads geteilt?
- 2. Wie werden Register unter Threads geteilt?
- 3. Kann keine Struktur über den Kanal senden: mpsc :: Sender kann nicht sicher zwischen Threads geteilt werden
- 4. Wie kann Spark RDD zwischen zwei Spark-Kontexten geteilt werden?
- 5. Android initialisieren OpenGL2.0-Kontext mit EGL
- 6. Wie kann ich garantieren, dass ein Typ, der keine Synchronisation implementiert, tatsächlich sicher zwischen Threads geteilt werden kann?
- 7. C global static - unter Threads geteilt?
- 8. BoxLayout kann nicht geteilt werden Fehler
- 9. alle Integer ausdrucken kann geteilt werden durch
- 10. Werden Threads zwischen Anforderungen in ASP.Net wiederverwendet?
- 11. Android: Eine Textur zwischen GLSurfaceViews in separaten EGL-Kontexten freigeben
- 12. Wie kann der In-App Billing-Client den EGL-Kontext verlieren?
- 13. Wie können Werte zwischen zwei View Controller-Instanzen geteilt werden?
- 14. ZF2-Modelle, die zwischen den Modulen geteilt werden
- 15. Wie ermittelt man, welche Spalten zwischen zwei Tabellen geteilt werden?
- 16. Javascript-Vererbung - im Konstruktor deklarierte Objekte werden zwischen Instanzen geteilt?
- 17. JPA @TableGenerator zwischen mehreren Entitäten geteilt
- 18. Warum können Mitgliedsvariablen nicht geteilt werden?
- 19. Unterscheiden zwischen Java-Threads und OS-Threads?
- 20. C# -Threads - Nachrichten zwischen Threads posten
- 21. EGL/OpenGL ES/Switching Context ist langsam
- 22. Modell, das zwischen zwei Objekten geteilt wird
- 23. Ember-Daten: Wie kann ein Objekt in einer Transaktion zwischen Controller-Aktionen geteilt und aktualisiert werden?
- 24. Wie kann eine einzelne Konfiguration zwischen Projekten in einer Lösung geteilt werden?
- 25. Wie kann die Sitzung zwischen NodeJs und PHP mit Redis geteilt werden?
- 26. Was ist EGL und wie kann ich es verwenden?
- 27. Wie überprüft man, ob der EGL-Kontext erhalten wurde oder nicht?
- 28. Android-Menü zwischen den Aktivitäten geteilt (unerwünscht)
- 29. Spring MVC: @SessionAttributes zwischen den Controllern geteilt?
- 30. Sharing Threads zwischen Prozessen?
Hallo, ich Ich litt unter der Synchronisation von 2 OpenGL-Thread. Was soll ich neben dem makeCurrent erledigen? Gibt es Artikel, die diesen Punkt vorstellen? – dragonfly
Für eine vollständige Probe können Sie diesen Quellcode betrachten: https://github.com/klhurley/EffectsManager/blob/master/src/Android/Renderer.cpp –