package goglbackend var unifiedVS = ` attribute vec2 vertex, texCoord; uniform vec2 canvasSize; varying vec2 v_cp, v_tc; void main() { v_tc = texCoord; v_cp = vertex; vec2 glp = vertex * 2.0 / canvasSize - 1.0; gl_Position = vec4(glp.x, -glp.y, 0.0, 1.0); } ` var unifiedFS = ` #ifdef GL_ES precision mediump float; #endif varying vec2 v_cp, v_tc; uniform int func; uniform vec4 color; uniform float globalAlpha; uniform sampler2D gradient; uniform vec2 from, dir, to; uniform float len, radFrom, radTo; uniform vec2 imageSize; uniform sampler2D image; uniform mat3 imageTransform; uniform vec2 repeat; uniform bool useAlphaTex; uniform sampler2D alphaTex; uniform int boxSize; uniform bool boxVertical; uniform float boxScale; bool isNaN(float v) { return v < 0.0 || 0.0 < v || v == 0.0 ? false : true; } void main() { vec4 col = color; if (func == 5) { vec4 sum = vec4(0.0); if (boxVertical) { vec2 start = v_tc - vec2(0.0, (float)(boxSize) * boxScale); for (int i=0; i 1.0) { col *= repeat.x; } if (imgpt.y < 0.0 || imgpt.y > 1.0) { col *= repeat.y; } } else if (func == 4) { col = texture2D(image, v_tc); } if (useAlphaTex) { col.a *= texture2D(alphaTex, v_tc).a * globalAlpha; } else { col.a *= globalAlpha; } gl_FragColor = col; } ` const ( shdFuncSolid int32 = iota shdFuncLinearGradient shdFuncRadialGradient shdFuncImagePattern shdFuncImage shdFuncBoxBlur ) type unifiedShader struct { shaderProgram Vertex uint32 TexCoord uint32 CanvasSize int32 Color int32 GlobalAlpha int32 Func int32 UseAlphaTex int32 AlphaTex int32 Gradient int32 From, To, Dir int32 Len int32 RadFrom, RadTo int32 ImageSize int32 Image int32 ImageTransform int32 Repeat int32 BoxSize int32 BoxVertical int32 BoxScale int32 }