diff --git a/src/glcontext_egl.cpp b/src/glcontext_egl.cpp index 52d7f2198..479cbcda7 100644 --- a/src/glcontext_egl.cpp +++ b/src/glcontext_egl.cpp @@ -1177,6 +1177,14 @@ WL_EGL_IMPORT { if (m_current != _swapChain) { + GLsync sync = NULL; + + if (NULL != m_display + && NULL != glFenceSync) + { + sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + } + m_current = _swapChain; if (NULL == _swapChain) @@ -1190,6 +1198,12 @@ WL_EGL_IMPORT { _swapChain->makeCurrent(); } + + if (NULL != sync) + { + GL_CHECK(glWaitSync(sync, 0, GL_TIMEOUT_IGNORED) ); + GL_CHECK(glDeleteSync(sync) ); + } } } diff --git a/src/glimports.h b/src/glimports.h index 131e6bb29..bd8bbe797 100644 --- a/src/glimports.h +++ b/src/glimports.h @@ -305,6 +305,7 @@ GL_IMPORT______(true, PFNGLDELETEQUERIESPROC, glDeleteQueri GL_IMPORT______(true, PFNGLDELETERENDERBUFFERSPROC, glDeleteRenderbuffers); GL_IMPORT______(true, PFNGLDELETESAMPLERSPROC, glDeleteSamplers); GL_IMPORT______(false, PFNGLDELETESHADERPROC, glDeleteShader); +GL_IMPORT______(true, PFNGLDELETESYNCPROC, glDeleteSync); GL_IMPORT______(false, PFNGLDELETETEXTURESPROC, glDeleteTextures); GL_IMPORT______(true, PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays); GL_IMPORT______(false, PFNGLDEPTHFUNCPROC, glDepthFunc); @@ -327,6 +328,7 @@ GL_IMPORT______(false, PFNGLENABLEPROC, glEnable); GL_IMPORT______(true, PFNGLENABLEIPROC, glEnablei); GL_IMPORT______(false, PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray); GL_IMPORT______(true, PFNGLENDQUERYPROC, glEndQuery); +GL_IMPORT______(true, PFNGLFENCESYNCPROC, glFenceSync); GL_IMPORT______(false, PFNGLFINISHPROC, glFinish); GL_IMPORT______(false, PFNGLFLUSHPROC, glFlush); GL_IMPORT______(true, PFNGLFRAMEBUFFERRENDERBUFFERPROC, glFramebufferRenderbuffer); @@ -453,6 +455,7 @@ GL_IMPORT______(false, PFNGLVERTEXATTRIB2FPROC, glVertexAttri GL_IMPORT______(false, PFNGLVERTEXATTRIB3FPROC, glVertexAttrib3f); GL_IMPORT______(false, PFNGLVERTEXATTRIB4FPROC, glVertexAttrib4f); GL_IMPORT______(false, PFNGLVIEWPORTPROC, glViewport); +GL_IMPORT______(true, PFNGLWAITSYNCPROC, glWaitSync); # if BGFX_CONFIG_RENDERER_OPENGL GL_IMPORT______(false, PFNGLCLEARDEPTHPROC, glClearDepth); @@ -661,6 +664,10 @@ GL_IMPORT______(true, PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC, glMultiDrawEl GL_IMPORT______(true, PFNGLINVALIDATEFRAMEBUFFERPROC, glInvalidateFramebuffer); +GL_IMPORT______(true, PFNGLFENCESYNCPROC, glFenceSync); +GL_IMPORT______(true, PFNGLDELETESYNCPROC, glDeleteSync); +GL_IMPORT______(true, PFNGLWAITSYNCPROC, glWaitSync); + # endif // !BGFX_USE_GL_DYNAMIC_LIB #endif // !BGFX_CONFIG_RENDERER_OPENGL