From c8dba6aaf127899ae9128a95bf63299c1404011c Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Fri, 25 Nov 2016 22:56:17 +0100
Subject: [PATCH] nicer code

---
 pixelgl/shader.go  | 29 ++++++++++++-----------------
 pixelgl/texture.go | 11 ++++++-----
 pixelgl/vertex.go  | 18 +++++++-----------
 3 files changed, 25 insertions(+), 33 deletions(-)

diff --git a/pixelgl/shader.go b/pixelgl/shader.go
index e3c9bc1..7c28f78 100644
--- a/pixelgl/shader.go
+++ b/pixelgl/shader.go
@@ -21,9 +21,9 @@ func NewShader(parent Doer, vertexShader, fragmentShader string) (*Shader, error
 		parent: parent,
 	}
 
-	errChan := make(chan error, 1)
+	var err, glerr error
 	parent.Do(func() {
-		err, glerr := DoErrGLErr(func() error {
+		err, glerr = DoErrGLErr(func() error {
 			var vshader, fshader uint32
 
 			// vertex shader
@@ -89,31 +89,26 @@ func NewShader(parent Doer, vertexShader, fragmentShader string) (*Shader, error
 
 			return nil
 		})
-		if err != nil {
-			if glerr != nil {
-				err = errors.Wrap(glerr, err.Error())
-			}
-			errChan <- err
-			return
-		}
-		if glerr != nil {
-			errChan <- err
-			return
-		}
-		errChan <- nil
 	})
-	err := <-errChan
+	if err != nil && glerr != nil {
+		return nil, errors.Wrap(glerr, err.Error())
+	}
 	if err != nil {
 		return nil, err
 	}
+	if glerr != nil {
+		return nil, glerr
+	}
 
 	return shader, nil
 }
 
 // Delete deletes a shader program. Don't use a shader after deletion.
 func (s *Shader) Delete() {
-	DoNoBlock(func() {
-		gl.DeleteProgram(s.program)
+	s.parent.Do(func() {
+		DoNoBlock(func() {
+			gl.DeleteProgram(s.program)
+		})
 	})
 }
 
diff --git a/pixelgl/texture.go b/pixelgl/texture.go
index 35ec841..29ff28e 100644
--- a/pixelgl/texture.go
+++ b/pixelgl/texture.go
@@ -16,9 +16,9 @@ type Texture struct {
 func NewTexture(parent Doer, width, height int, pixels []uint8) (*Texture, error) {
 	texture := &Texture{parent: parent}
 
-	errChan := make(chan error, 1)
+	var err error
 	parent.Do(func() {
-		errChan <- DoGLErr(func() {
+		err = DoGLErr(func() {
 			gl.GenTextures(1, &texture.tex)
 			gl.BindTexture(gl.TEXTURE_2D, texture.tex)
 
@@ -39,7 +39,6 @@ func NewTexture(parent Doer, width, height int, pixels []uint8) (*Texture, error
 			gl.BindTexture(gl.TEXTURE_2D, 0)
 		})
 	})
-	err := <-errChan
 	if err != nil {
 		return nil, errors.Wrap(err, "failed to create a texture")
 	}
@@ -49,8 +48,10 @@ func NewTexture(parent Doer, width, height int, pixels []uint8) (*Texture, error
 
 // Delete deletes a texture. Don't use a texture after deletion.
 func (t *Texture) Delete() {
-	DoNoBlock(func() {
-		gl.DeleteTextures(1, &t.tex)
+	t.parent.Do(func() {
+		DoNoBlock(func() {
+			gl.DeleteTextures(1, &t.tex)
+		})
 	})
 }
 
diff --git a/pixelgl/vertex.go b/pixelgl/vertex.go
index 8dde67b..a9a68e6 100644
--- a/pixelgl/vertex.go
+++ b/pixelgl/vertex.go
@@ -106,9 +106,9 @@ func NewVertexArray(parent Doer, format VertexFormat, mode VertexDrawMode, usage
 		mode:   mode,
 	}
 
-	errChan := make(chan error, 1)
+	var err error
 	parent.Do(func() {
-		err := DoGLErr(func() {
+		err = DoGLErr(func() {
 			gl.GenVertexArrays(1, &va.vao)
 			gl.BindVertexArray(va.vao)
 
@@ -136,13 +136,7 @@ func NewVertexArray(parent Doer, format VertexFormat, mode VertexDrawMode, usage
 			gl.BindBuffer(gl.ARRAY_BUFFER, 0)
 			gl.BindVertexArray(0)
 		})
-		if err != nil {
-			errChan <- err
-			return
-		}
-		errChan <- nil
 	})
-	err := <-errChan
 	if err != nil {
 		return nil, errors.Wrap(err, "failed to create a vertex array")
 	}
@@ -152,9 +146,11 @@ func NewVertexArray(parent Doer, format VertexFormat, mode VertexDrawMode, usage
 
 // Delete deletes a vertex array and it's associated vertex buffer. Don't use a vertex array after deletion.
 func (va *VertexArray) Delete() {
-	DoNoBlock(func() {
-		gl.DeleteVertexArrays(1, &va.vao)
-		gl.DeleteBuffers(1, &va.vbo)
+	va.parent.Do(func() {
+		DoNoBlock(func() {
+			gl.DeleteVertexArrays(1, &va.vao)
+			gl.DeleteBuffers(1, &va.vbo)
+		})
 	})
 }
 
-- 
GitLab