sprite: Use gl.Context instead of package-level OpenGL calls.

The package-level OpenGL calls in golang.org/x/mobile/gl were removed.
This change fixes the example sprite app to use their replacement.

Change-Id: I1884e9292133375194c963e71540acaef0908d66
Reviewed-on: https://go-review.googlesource.com/15051
Reviewed-by: David Crawshaw <crawshaw@golang.org>
diff --git a/example/sprite/main.go b/example/sprite/main.go
index 17db6e1..38a6043 100644
--- a/example/sprite/main.go
+++ b/example/sprite/main.go
@@ -60,6 +60,7 @@
 
 func main() {
 	app.Main(func(a app.App) {
+		var glctx gl.Context
 		visible, sz := false, size.Event{}
 		for e := range a.Events() {
 			switch e := a.Filter(e).(type) {
@@ -67,15 +68,18 @@
 				switch e.Crosses(lifecycle.StageVisible) {
 				case lifecycle.CrossOn:
 					visible = true
+					glctx, _ = e.DrawContext.(gl.Context)
+					onStart(glctx)
 				case lifecycle.CrossOff:
 					visible = false
+					onStop()
 				}
 			case size.Event:
 				sz = e
 			case paint.Event:
-				onPaint(sz)
-				a.Publish()
 				if visible {
+					onPaint(glctx, sz)
+					a.Publish()
 					// Keep animating.
 					a.Send(paint.Event{})
 				}
@@ -84,15 +88,22 @@
 	})
 }
 
-func onPaint(sz size.Event) {
-	if scene == nil {
-		images = glutil.NewImages()
-		fps = debug.NewFPS(images)
-		eng = glsprite.Engine(images)
-		loadScene()
-	}
-	gl.ClearColor(1, 1, 1, 1)
-	gl.Clear(gl.COLOR_BUFFER_BIT)
+func onStart(glctx gl.Context) {
+	images = glutil.NewImages(glctx)
+	fps = debug.NewFPS(images)
+	eng = glsprite.Engine(images)
+	loadScene()
+}
+
+func onStop() {
+	eng.Release()
+	fps.Release()
+	images.Release()
+}
+
+func onPaint(glctx gl.Context, sz size.Event) {
+	glctx.ClearColor(1, 1, 1, 1)
+	glctx.Clear(gl.COLOR_BUFFER_BIT)
 	now := clock.Time(time.Since(startTime) * 60 / time.Second)
 	eng.Render(scene, now, sz)
 	fps.Draw(sz)