diff --git a/app/internal/gpu/gpu.go b/app/internal/gpu/gpu.go index 6bc66b01..61349f42 100644 --- a/app/internal/gpu/gpu.go +++ b/app/internal/gpu/gpu.go @@ -267,7 +267,6 @@ func (g *GPU) renderLoop(glctx gl.Context) error { runtime.LockOSThread() // Don't UnlockOSThread to avoid reuse by the Go runtime. defer close(g.stopped) - defer glctx.Release() if err := glctx.MakeCurrent(); err != nil { initErr <- err @@ -278,13 +277,14 @@ func (g *GPU) renderLoop(glctx gl.Context) error { initErr <- err return } + initErr <- nil + defer glctx.Release() defer g.cache.release(ctx) defer g.pathCache.release(ctx) r := newRenderer(ctx) defer r.release() var timers *timers var zopsTimer, stencilTimer, coverTimer, cleanupTimer *timer - initErr <- nil var drawOps drawOps loop: for { diff --git a/app/window.go b/app/window.go index bd4fa2a7..1d30dc6d 100644 --- a/app/window.go +++ b/app/window.go @@ -290,6 +290,9 @@ func (w *Window) run(opts *window.Options) { ctx, err = w.driver.NewContext() if err == nil { w.gpu, err = gpu.New(ctx) + if err != nil { + ctx.Release() + } } } var frame *op.Ops