From 4323e83d49d8fad07bb95d07182a4366545dfa5c Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Tue, 6 Dec 2016 16:05:08 +0100
Subject: [PATCH] remove OpenGL error reporting

---
 pixelgl/doc.go     |  2 ++
 pixelgl/shader.go  | 11 ++-----
 pixelgl/texture.go | 11 ++-----
 pixelgl/thread.go  | 71 ----------------------------------------------
 pixelgl/vertex.go  | 30 ++------------------
 5 files changed, 8 insertions(+), 117 deletions(-)

diff --git a/pixelgl/doc.go b/pixelgl/doc.go
index e969552..87bccc4 100644
--- a/pixelgl/doc.go
+++ b/pixelgl/doc.go
@@ -1,2 +1,4 @@
 // Package pixelgl provides higher-level abstractions around the basic OpenGL primitives and operations.
+//
+// This package deliberately does not handle nor report OpenGL errors, it's up to you to cause none.
 package pixelgl
diff --git a/pixelgl/shader.go b/pixelgl/shader.go
index ddc5f97..533c564 100644
--- a/pixelgl/shader.go
+++ b/pixelgl/shader.go
@@ -5,7 +5,6 @@ import (
 
 	"github.com/go-gl/gl/v3.3-core/gl"
 	"github.com/go-gl/mathgl/mgl32"
-	"github.com/pkg/errors"
 )
 
 // UniformFormat defines names, purposes and types of uniform variables inside a shader.
@@ -36,9 +35,9 @@ func NewShader(parent Doer, vertexFormat VertexFormat, uniformFormat UniformForm
 		uniforms:      make(map[Attr]int32),
 	}
 
-	var err, glerr error
+	var err error
 	parent.Do(func(ctx Context) {
-		err, glerr = DoErrGLErr(func() error {
+		err = DoErr(func() error {
 			var vshader, fshader uint32
 
 			// vertex shader
@@ -120,15 +119,9 @@ func NewShader(parent Doer, vertexFormat VertexFormat, uniformFormat UniformForm
 			return nil
 		})
 	})
-	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
 }
diff --git a/pixelgl/texture.go b/pixelgl/texture.go
index 1c5c4be..708bc4e 100644
--- a/pixelgl/texture.go
+++ b/pixelgl/texture.go
@@ -1,9 +1,6 @@
 package pixelgl
 
-import (
-	"github.com/go-gl/gl/v3.3-core/gl"
-	"github.com/pkg/errors"
-)
+import "github.com/go-gl/gl/v3.3-core/gl"
 
 // Texture is an OpenGL texture.
 type Texture struct {
@@ -17,9 +14,8 @@ type Texture struct {
 func NewTexture(parent Doer, width, height int, pixels []uint8) (*Texture, error) {
 	texture := &Texture{parent: parent}
 
-	var err error
 	parent.Do(func(ctx Context) {
-		err = DoGLErr(func() {
+		Do(func() {
 			gl.GenTextures(1, &texture.tex)
 			gl.BindTexture(gl.TEXTURE_2D, texture.tex)
 
@@ -40,9 +36,6 @@ func NewTexture(parent Doer, width, height int, pixels []uint8) (*Texture, error
 			gl.BindTexture(gl.TEXTURE_2D, 0)
 		})
 	})
-	if err != nil {
-		return nil, errors.Wrap(err, "failed to create a texture")
-	}
 
 	return texture, nil
 }
diff --git a/pixelgl/thread.go b/pixelgl/thread.go
index 330309a..818e95b 100644
--- a/pixelgl/thread.go
+++ b/pixelgl/thread.go
@@ -1,7 +1,6 @@
 package pixelgl
 
 import (
-	"fmt"
 	"runtime"
 
 	"github.com/go-gl/gl/v3.3-core/gl"
@@ -97,73 +96,3 @@ func DoVal(f func() interface{}) interface{} {
 	}
 	return <-val
 }
-
-// DoGLErr is same as Do, but also return an error generated by OpenGL.
-func DoGLErr(f func()) (gl error) {
-	glerr := make(chan error)
-	callQueue <- func() {
-		getLastGLErr() // swallow
-		f()
-		glerr <- getLastGLErr()
-	}
-	return <-glerr
-}
-
-// DoErrGLErr is same as DoErr, but also returns an error generated by OpenGL.
-func DoErrGLErr(f func() error) (_, gl error) {
-	err := make(chan error)
-	glerr := make(chan error)
-	callQueue <- func() {
-		getLastGLErr() // swallow
-		err <- f()
-		glerr <- getLastGLErr()
-	}
-	return <-err, <-glerr
-}
-
-// DoValGLErr is same as DoVal, but also returns an error generated by OpenGL.
-func DoValGLErr(f func() interface{}) (_ interface{}, gl error) {
-	val := make(chan interface{})
-	glerr := make(chan error)
-	callQueue <- func() {
-		getLastGLErr() // swallow
-		val <- f()
-		glerr <- getLastGLErr()
-	}
-	return <-val, <-glerr
-}
-
-// GLError represents an error code generated by OpenGL.
-type GLError uint32
-
-// Error returns a human-readable textual representation of an OpenGL error.
-func (err GLError) Error() string {
-	if desc, ok := glErrors[uint32(err)]; ok {
-		return fmt.Sprintf("OpenGL error: %s", desc)
-	}
-	return fmt.Sprintf("OpenGL error: unknown error")
-}
-
-var glErrors = map[uint32]string{
-	gl.INVALID_ENUM:                  "invalid enum",
-	gl.INVALID_VALUE:                 "invalid value",
-	gl.INVALID_OPERATION:             "invalid operation",
-	gl.STACK_OVERFLOW:                "stack overflow",
-	gl.STACK_UNDERFLOW:               "stack underflow",
-	gl.OUT_OF_MEMORY:                 "out of memory",
-	gl.INVALID_FRAMEBUFFER_OPERATION: "invalid framebuffer operation",
-	gl.CONTEXT_LOST:                  "context lost",
-}
-
-// getLastGLErr returns (and consumes) the last error generated by OpenGL.
-// Don't use outside DoGLErr, DoErrGLErr and DoValGLErr.
-func getLastGLErr() error {
-	err := uint32(gl.NO_ERROR)
-	for e := gl.GetError(); e != gl.NO_ERROR; e = gl.GetError() {
-		err = e
-	}
-	if err != gl.NO_ERROR {
-		return GLError(err)
-	}
-	return nil
-}
diff --git a/pixelgl/vertex.go b/pixelgl/vertex.go
index e007d23..8a8f4ae 100644
--- a/pixelgl/vertex.go
+++ b/pixelgl/vertex.go
@@ -105,9 +105,9 @@ func NewVertexArray(parent Doer, format VertexFormat, mode VertexDrawMode, usage
 		offset += attr.Type.Size()
 	}
 
-	var err, glerr error
+	var err error
 	parent.Do(func(ctx Context) {
-		err, glerr = DoErrGLErr(func() error {
+		err = DoErr(func() error {
 			gl.GenVertexArrays(1, &va.vao)
 			gl.BindVertexArray(va.vao)
 
@@ -149,15 +149,9 @@ func NewVertexArray(parent Doer, format VertexFormat, mode VertexDrawMode, usage
 			return nil
 		})
 	})
-	if err != nil && glerr != nil {
-		return nil, errors.Wrap(errors.Wrap(glerr, err.Error()), "failed to create vertex array")
-	}
 	if err != nil {
 		return nil, errors.Wrap(err, "failed to create vertex array")
 	}
-	if glerr != nil {
-		return nil, errors.Wrap(glerr, "failed to create vertex array")
-	}
 
 	return va, nil
 }
@@ -222,10 +216,6 @@ func (va *VertexArray) SetVertex(vertex int, data interface{}) {
 		gl.BufferSubData(gl.ARRAY_BUFFER, offset, va.format.Size(), gl.Ptr(data))
 
 		gl.BindBuffer(gl.ARRAY_BUFFER, 0)
-
-		if err := getLastGLErr(); err != nil {
-			panic(errors.Wrap(err, "set vertex error"))
-		}
 	})
 }
 
@@ -253,10 +243,6 @@ func (va *VertexArray) SetVertexAttributeFloat(vertex int, purpose AttrPurpose,
 		gl.BufferSubData(gl.ARRAY_BUFFER, offset, attr.Type.Size(), unsafe.Pointer(&value))
 
 		gl.BindBuffer(gl.ARRAY_BUFFER, 0)
-
-		if err := getLastGLErr(); err != nil {
-			panic(errors.Wrap(err, "set attribute vertex"))
-		}
 	})
 	return true
 }
@@ -279,10 +265,6 @@ func (va *VertexArray) SetVertexAttributeVec2(vertex int, purpose AttrPurpose, v
 		gl.BufferSubData(gl.ARRAY_BUFFER, offset, attr.Type.Size(), unsafe.Pointer(&value))
 
 		gl.BindBuffer(gl.ARRAY_BUFFER, 0)
-
-		if err := getLastGLErr(); err != nil {
-			panic(errors.Wrap(err, "set attribute vertex"))
-		}
 	})
 	return true
 }
@@ -305,10 +287,6 @@ func (va *VertexArray) SetVertexAttributeVec3(vertex int, purpose AttrPurpose, v
 		gl.BufferSubData(gl.ARRAY_BUFFER, offset, attr.Type.Size(), unsafe.Pointer(&value))
 
 		gl.BindBuffer(gl.ARRAY_BUFFER, 0)
-
-		if err := getLastGLErr(); err != nil {
-			panic(errors.Wrap(err, "set attribute vertex"))
-		}
 	})
 	return true
 }
@@ -331,10 +309,6 @@ func (va *VertexArray) SetVertexAttributeVec4(vertex int, purpose AttrPurpose, v
 		gl.BufferSubData(gl.ARRAY_BUFFER, offset, attr.Type.Size(), unsafe.Pointer(&value))
 
 		gl.BindBuffer(gl.ARRAY_BUFFER, 0)
-
-		if err := getLastGLErr(); err != nil {
-			panic(errors.Wrap(err, "set attribute vertex"))
-		}
 	})
 	return true
 }
-- 
GitLab