app,gpu,internal/egl: lock OS thread when making OpenGL context current

OpenGL stores the current context in thread-local memory, but commit
4f5baa9a51 removed a runtime.LockOSThread from app.Window that ensured
the goroutine that drives the context stays on the operating thread that
has the context current. This change restores the thread lock.

As a bonus, this change makes the OpenGL contexts responsible for locking
the thread at MakeCurrent, thereby removing LockOSThread calls from GPU
backend-agnostic code.

Fixes: https://todo.sr.ht/~eliasnaur/gio/334
Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2022-01-05 11:42:31 +01:00
parent 7751d73740
commit 8d8aeef66b
5 changed files with 13 additions and 6 deletions
+3
View File
@@ -135,6 +135,9 @@ func (c *Context) ReleaseCurrent() {
}
func (c *Context) MakeCurrent() error {
// OpenGL contexts are implicit and thread-local. Lock the OS thread.
runtime.LockOSThread()
if c.eglSurf == nilEGLSurface && !c.eglCtx.surfaceless {
return errors.New("no surface created yet EGL_KHR_surfaceless_context is not supported")
}