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