È consentito creare il contesto egl da main() e il rendering da un altro thread, dato che gli handle di contesto sono passati da main() alla funzione del thread?egl - È possibile condividere il contesto tra i thread
9
A
risposta
16
Sì, lo è.
In primo luogo è necessario creare un contesto in in un thread:
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;
}
Poi in altro thread si crea un contesto condiviso come questo:
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);
Avrete ovviamente avere alcuni mutex/semafori per sincronizzare tutti gli aggiornamenti che vuoi fare con GLES. Per esempio è necessario fare un
eglMakeCurrent(m_Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
all'interno del filo prima che l'altro thread può chiamare
if (!eglMakeCurrent(m_Display, m_Surface, m_Surface, m_Context))
{
LOG_ERROR("eglMakeCurrent() returned error %d", eglGetError());
}
Quindi è possibile creare texture, shader di carico, ecc sia da filo
Problemi correlati
- 1. È possibile condividere una cache tra WKWebViews?
- 2. È possibile condividere i dati tra due app angularjs?
- 3. È possibile condividere un intero tra i thread in modo sicuro?
- 4. EGL/OpenGL ES/contesto di commutazione lento
- 5. È possibile condividere dati con thread senza clonazione?
- 6. C++, come condividere i dati tra processi o thread
- 7. È possibile condividere HttpRuntime.Cache tra più server Web?
- 8. È possibile condividere una masterpage tra MVC e webform?
- 9. È possibile condividere un cookie tra "alcuni" sottodomini?
- 10. È possibile condividere un file ResourceDictionary tra più progetti?
- 11. È possibile condividere le preferenze condivise tra diverse applicazioni Android?
- 12. È possibile condividere una classe Singleton in una DLL tra i processi?
- 13. Che cosa è esattamente il contesto del thread in C#?
- 14. Condividere i dati tra i taccuini IPython
- 15. System.nanoTime() è coerente tra i thread?
- 16. È possibile condividere lo stesso MVC tra jar esterni e War in ambiente Servlet 3.0?
- 17. È possibile condividere proprietà e commenti tra i cmdlet di PowerShell in C#?
- 18. Riduci contesto Commuta tra thread con la stessa priorità
- 19. condividere i valori di dichiarazione enum tra i modelli
- 20. È possibile eliminare il thread di BackgroundWorker?
- 21. Condividere i modelli sqlalchemy tra il pallone e altre app
- 22. Inizializzazione Android openGL2.0 con EGL
- 23. Come condividere i dati tra file javascript?
- 24. Come condividere il codice tra i modelli? (Rails 2.3)
- 25. log4j e il contestloader del contesto thread
- 26. Come condividere lo stesso contesto con thread diversi in Pattern multi-comando in C#?
- 27. Come condividere i dati tra diversi thread In C# utilizzando AOP?
- 28. E 'possibile condividere i dati dell'applicazione su google drive
- 29. come condividere le variabili globali attraverso i thread in python?
- 30. Come condividere il codice tra due progetti?
Ciao, Sono affetto dalla sincronizzazione di 2 thread opengl. Oltre al makeCurrent, di quali altri dovrei occuparmi? Ci sono alcuni articoli che introducono questo punto? – dragonfly
Per un esempio completo è possibile consultare questo codice sorgente: https://github.com/klhurley/EffectsManager/blob/master/src/Android/Renderer.cpp –