diff --git a/app/loop.go b/app/loop.go index e9d46349..e0da75a0 100644 --- a/app/loop.go +++ b/app/loop.go @@ -77,7 +77,6 @@ func (l *renderLoop) renderLoop(ctx window.Context) error { return } defer g.Release() - defer ctx.Release() initErr <- nil loop: for { diff --git a/app/window.go b/app/window.go index 87a70cce..ed469583 100644 --- a/app/window.go +++ b/app/window.go @@ -25,6 +25,7 @@ type Option func(opts *window.Options) // Window represents an operating system window. type Window struct { driver window.Driver + ctx window.Context loop *renderLoop // driverFuncs is a channel of functions to run when @@ -132,14 +133,14 @@ func (w *Window) validateAndProcess(frameStart time.Time, size image.Point, sync } } if w.loop == nil { - var ctx window.Context - ctx, err := w.driver.NewContext() + var err error + w.ctx, err = w.driver.NewContext() if err != nil { return err } - w.loop, err = newLoop(ctx) + w.loop, err = newLoop(w.ctx) if err != nil { - ctx.Release() + w.ctx.Release() return err } } @@ -295,6 +296,10 @@ func (w *Window) destroyGPU() { w.loop.Release() w.loop = nil } + if w.ctx != nil { + w.ctx.Release() + w.ctx = nil + } } // waitFrame waits for the client to either call FrameEvent.Frame