From fa10844351cb8bddc575b17aa917605a5d94ba98 Mon Sep 17 00:00:00 2001
From: Brandon <thegtproject@live.com>
Date: Sat, 6 Oct 2018 10:01:05 -0600
Subject: [PATCH] pr 141 review #2 changes, see
 https://github.com/faiface/pixel/pull/141#pullrequestreview-162259357

---
 pixelgl/canvas.go   | 30 +++---------------------------
 pixelgl/glshader.go | 24 ++++++++++++------------
 2 files changed, 15 insertions(+), 39 deletions(-)

diff --git a/pixelgl/canvas.go b/pixelgl/canvas.go
index 1e82fee..c66ab03 100644
--- a/pixelgl/canvas.go
+++ b/pixelgl/canvas.go
@@ -17,7 +17,7 @@ import (
 // It supports TrianglesPosition, TrianglesColor, TrianglesPicture and PictureColor.
 type Canvas struct {
 	gf     *GLFrame
-	shader *GLShader
+	shader *glShader
 
 	cmp    pixel.ComposeMethod
 	mat    mgl32.Mat3
@@ -47,19 +47,14 @@ func NewCanvas(bounds pixel.Rect) *Canvas {
 // attribute variable. If the uniform already exists, including defaults, they will be reassigned
 // to the new value. The value can be a pointer.
 func (c *Canvas) SetUniform(Name string, Value interface{}) {
-	c.shader.AddUniform(Name, Value)
-}
-
-// UpdateShader needs to be called after any changes to the underlying GLShader
-// are made, such as, SetUniform, SetFragmentShader...
-func (c *Canvas) UpdateShader() {
-	c.shader.update()
+	c.shader.SetUniform(Name, Value)
 }
 
 // SetFragmentShader allows you to set a new fragment shader on the underlying
 // framebuffer. Argument "fs" is the GLSL source, not a filename.
 func (c *Canvas) SetFragmentShader(fs string) {
 	c.shader.fs = fs
+	c.shader.update()
 }
 
 // MakeTriangles creates a specialized copy of the supplied Triangles that draws onto this Canvas.
@@ -189,25 +184,6 @@ func setBlendFunc(cmp pixel.ComposeMethod) {
 	}
 }
 
-// updates all uniform values for gl to consume
-func (c *Canvas) setUniforms(texbounds pixel.Rect) {
-	mat := c.mat
-	col := c.col
-	c.shader.uniformDefaults.transform = mat
-	c.shader.uniformDefaults.colormask = col
-	dstBounds := c.Bounds()
-	c.shader.uniformDefaults.bounds = mgl32.Vec4{
-		float32(dstBounds.Min.X),
-		float32(dstBounds.Min.Y),
-		float32(dstBounds.W()),
-		float32(dstBounds.H()),
-	}
-
-	for loc, u := range c.shader.uniforms {
-		c.shader.s.SetUniformAttr(loc, u.Value())
-	}
-}
-
 // Clear fills the whole Canvas with a single color.
 func (c *Canvas) Clear(color color.Color) {
 	c.gf.Dirty()
diff --git a/pixelgl/glshader.go b/pixelgl/glshader.go
index 865c6fd..2f7544c 100644
--- a/pixelgl/glshader.go
+++ b/pixelgl/glshader.go
@@ -7,10 +7,10 @@ import (
 	"github.com/pkg/errors"
 )
 
-// GLShader is a type to assist with managing a canvas's underlying
+// glShader is a type to assist with managing a canvas's underlying
 // shader configuration. This allows for customization of shaders on
 // a per canvas basis.
-type GLShader struct {
+type glShader struct {
 	s      *glhf.Shader
 	vf, uf glhf.AttrFormat
 	vs, fs string
@@ -33,7 +33,7 @@ type gsUniformAttr struct {
 }
 
 // reinitialize GLShader data and recompile the underlying gl shader object
-func (gs *GLShader) update() {
+func (gs *glShader) update() {
 	gs.uf = nil
 	for _, u := range gs.uniforms {
 		gs.uf = append(gs.uf, glhf.Attr{
@@ -59,7 +59,7 @@ func (gs *GLShader) update() {
 }
 
 // gets the uniform index from GLShader
-func (gs *GLShader) getUniform(Name string) int {
+func (gs *glShader) getUniform(Name string) int {
 	for i, u := range gs.uniforms {
 		if u.Name == Name {
 			return i
@@ -68,14 +68,14 @@ func (gs *GLShader) getUniform(Name string) int {
 	return -1
 }
 
-// AddUniform appends a custom uniform name and value to the shader.
+// SetUniform appends a custom uniform name and value to the shader.
 // if the uniform already exists, it will simply be overwritten.
 //
 // example:
 //
 //   utime := float32(time.Since(starttime)).Seconds())
 //   mycanvas.shader.AddUniform("u_time", &utime)
-func (gs *GLShader) AddUniform(Name string, Value interface{}) {
+func (gs *glShader) SetUniform(Name string, Value interface{}) {
 	t, p := getAttrType(Value)
 	if loc := gs.getUniform(Name); loc > -1 {
 		gs.uniforms[loc].Name = Name
@@ -94,18 +94,18 @@ func (gs *GLShader) AddUniform(Name string, Value interface{}) {
 
 // Sets up a base shader with everything needed for a Pixel
 // canvas to render correctly. The defaults can be overridden
-// by simply using the AddUniform function.
+// by simply using the SetUniform function.
 func baseShader(c *Canvas) {
-	gs := &GLShader{
+	gs := &glShader{
 		vf: defaultCanvasVertexFormat,
 		vs: defaultCanvasVertexShader,
 		fs: baseCanvasFragmentShader,
 	}
 
-	gs.AddUniform("u_transform", &gs.uniformDefaults.transform)
-	gs.AddUniform("u_colormask", &gs.uniformDefaults.colormask)
-	gs.AddUniform("u_bounds", &gs.uniformDefaults.bounds)
-	gs.AddUniform("u_texbounds", &gs.uniformDefaults.texbounds)
+	gs.SetUniform("u_transform", &gs.uniformDefaults.transform)
+	gs.SetUniform("u_colormask", &gs.uniformDefaults.colormask)
+	gs.SetUniform("u_bounds", &gs.uniformDefaults.bounds)
+	gs.SetUniform("u_texbounds", &gs.uniformDefaults.texbounds)
 
 	c.shader = gs
 }
-- 
GitLab