app,app/internal/wm: release OpenGL context after use

Otherwise, making a context current on another thread may result in
an EGL_BAD_ACCESS error.

Fixes gio#248

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-07-26 21:35:19 +02:00
parent 152a30f468
commit 7da315eb2b
6 changed files with 14 additions and 0 deletions
+2
View File
@@ -117,6 +117,8 @@ func (c *d3d11Context) MakeCurrent() error {
return nil return nil
} }
func (c *d3d11Context) ReleaseCurrent() {}
func (c *d3d11Context) Lock() {} func (c *d3d11Context) Lock() {}
func (c *d3d11Context) Unlock() {} func (c *d3d11Context) Unlock() {}
+4
View File
@@ -139,6 +139,10 @@ func (c *context) MakeCurrent() error {
return nil return nil
} }
func (c *context) ReleaseCurrent() {
C.gio_makeCurrent(0)
}
func (w *window) NewContext() (Context, error) { func (w *window) NewContext() (Context, error) {
return newContext(w) return newContext(w)
} }
+2
View File
@@ -62,6 +62,8 @@ func (c *context) MakeCurrent() error {
return nil return nil
} }
func (c *context) ReleaseCurrent() {}
func (w *window) NewContext() (Context, error) { func (w *window) NewContext() (Context, error) {
return newContext(w) return newContext(w)
} }
+4
View File
@@ -90,6 +90,10 @@ func (c *context) MakeCurrent() error {
return nil return nil
} }
func (c *context) ReleaseCurrent() {
C.gio_clearCurrentContext()
}
func (w *window) NewContext() (Context, error) { func (w *window) NewContext() (Context, error) {
return newContext(w) return newContext(w)
} }
+1
View File
@@ -70,6 +70,7 @@ type Context interface {
API() gpu.API API() gpu.API
Present() error Present() error
MakeCurrent() error MakeCurrent() error
ReleaseCurrent()
Refresh() error Refresh() error
Release() Release()
Lock() Lock()
+1
View File
@@ -69,6 +69,7 @@ func (l *renderLoop) renderLoop(ctx wm.Context) error {
initErr <- err initErr <- err
return return
} }
defer ctx.ReleaseCurrent()
g, err := gpu.New(ctx.API()) g, err := gpu.New(ctx.API())
if err != nil { if err != nil {
initErr <- err initErr <- err