diff --git a/internal/driver/gomobile/driver.go b/internal/driver/gomobile/driver.go index 58b6d4dd13..d7db3816ff 100644 --- a/internal/driver/gomobile/driver.go +++ b/internal/driver/gomobile/driver.go @@ -136,9 +136,12 @@ func (d *mobileDriver) Run() { canvas.painter.Init() // we cannot init until the context is set above } - d.freeDirtyTextures(canvas) - d.paintWindow(current, currentSize) - a.Publish() + if d.freeDirtyTextures(canvas) { + d.paintWindow(current, currentSize) + a.Publish() + } + + time.Sleep(time.Millisecond * 10) a.Send(paint.Event{}) case touch.Event: switch e.Type { @@ -165,9 +168,6 @@ func (d *mobileDriver) Run() { } func (d *mobileDriver) onStart() { - for _, win := range d.AllWindows() { - win.Canvas().(*mobileCanvas).painter.Init() // we cannot init until the context is set above - } } func (d *mobileDriver) onStop() { @@ -422,17 +422,19 @@ func (d *mobileDriver) typeUpCanvas(canvas *mobileCanvas, r rune, code key.Code) } -func (d *mobileDriver) freeDirtyTextures(canvas *mobileCanvas) { +func (d *mobileDriver) freeDirtyTextures(canvas *mobileCanvas) bool { + freed := false for { select { case object := <-canvas.refreshQueue: + freed = true freeWalked := func(obj fyne.CanvasObject, _ fyne.Position, _ fyne.Position, _ fyne.Size) bool { canvas.painter.Free(obj) return false } driver.WalkCompleteObjectTree(object, freeWalked, nil) default: - return + return freed } } } @@ -448,7 +450,5 @@ func (d *mobileDriver) Device() fyne.Device { // NewGoMobileDriver sets up a new Driver instance implemented using the Go // Mobile extension and OpenGL bindings. func NewGoMobileDriver() fyne.Driver { - driver := new(mobileDriver) - - return driver + return new(mobileDriver) } diff --git a/internal/painter/gl/gl_gomobile.go b/internal/painter/gl/gl_gomobile.go index 5aadcbbed2..a0be48ac14 100644 --- a/internal/painter/gl/gl_gomobile.go +++ b/internal/painter/gl/gl_gomobile.go @@ -179,6 +179,10 @@ func (p *glPainter) glCreateBuffer(points []float32) Buffer { return Buffer(sharedBuffer) } +func (p *glPainter) glFreeBuffer(_ Buffer) { + // we don't free a shared buffer! +} + func (p *glPainter) glDrawTexture(texture Texture, alpha float32) { ctx := p.glctx() ctx.Enable(gl.BLEND) diff --git a/internal/painter/gl/gl_gomobile_ios.go b/internal/painter/gl/gl_gomobile_ios.go deleted file mode 100644 index 8c42e88a0c..0000000000 --- a/internal/painter/gl/gl_gomobile_ios.go +++ /dev/null @@ -1,12 +0,0 @@ -// +build ios - -package gl - -import "golang.org/x/mobile/gl" - -func (p *glPainter) glFreeBuffer(vbo Buffer) { - ctx := p.glctx() - - ctx.BindBuffer(gl.ARRAY_BUFFER, gl.Buffer(vbo)) - ctx.DeleteBuffer(gl.Buffer(vbo)) -} diff --git a/internal/painter/gl/gl_gomobile_other.go b/internal/painter/gl/gl_gomobile_other.go deleted file mode 100644 index bf44738359..0000000000 --- a/internal/painter/gl/gl_gomobile_other.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build android mobile - -package gl - -func (p *glPainter) glFreeBuffer(_ Buffer) { - // we don't free a shared buffer! -}