{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/groupchaining/node-modules/regl-point-wrapper.js"],"names":["createREGL","ReGL","constructor","canvasContext","regl","fragShader","vertShaderDraw","vertShaderAnimate","setUpShader","setBackgroundColor","r","g","b","color","backgroundColor","drawPointsShader","frag","vert","attributes","position","context","props","points","map","point","drawing","x","y","c","opacity","pointWidth","size","uniforms","stageWidth","stageHeight","count","length","primitive","animatePointsShader","s_position","reglContext","sx","sy","t_position","s_color","scolor","t_color","tcolor","s_pointWidth","ssize","t_pointWidth","tsize","t","tick","drawPoints","clear","animatePoints"],"mappings":"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","file":"regl-point-wrapper.js","sourcesContent":["import createREGL from \"src/external/regl.js\"\n\nexport class ReGL {\n  \n  constructor(canvasContext){\n    this.regl = createREGL(canvasContext)\n    this.fragShader = `\n      precision mediump float;\n      varying vec4 fragColor;\n      void main () {\n        float r = 0.0, delta = 0.0, alpha = 1.0;\n        vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n        r = dot(cxy, cxy);\n        if (r > 1.0) {\n            discard;\n        }\n        gl_FragColor = fragColor * alpha;\n      }`\n    this.vertShaderDraw = `\n      precision mediump float;\n      attribute vec2 position;\n      attribute float pointWidth;\n      attribute vec4 color;\n\n      varying vec4 fragColor;\n      uniform float stageWidth;\n      uniform float stageHeight;\n\n      // helper function to transform from pixel space to normalized\n      // device coordinates (NDC). In NDC (0,0) is the middle,\n      // (-1, 1) is the top left and (1, -1) is the bottom right.\n      // Stolen from Peter Beshai's great blog post:\n      // http://peterbeshai.com/beautifully-animate-points-with-webgl-and-regl.html\n      vec2 normalizeCoords(vec2 position) {\n        // read in the positions into x and y vars\n        float x = position[0];\n        float y = position[1];\n\n        return vec2(\n          2.0 * ((x / stageWidth) - 0.5),\n          // invert y to treat [0,0] as bottom left in pixel space\n          -(2.0 * ((y / stageHeight) - 0.5)));\n      }\n\n      void main () {\n        gl_PointSize = pointWidth;\n        gl_Position = vec4(normalizeCoords(position), 0, 1);\n        fragColor = color;\n      }`\n    this.vertShaderAnimate = `\n      precision mediump float;\n      attribute vec2 s_position;\n      attribute vec2 t_position;\n      attribute float s_pointWidth;\n      attribute float t_pointWidth;\n      attribute float pointWidth;\n      attribute vec4 color;\n      attribute vec4 s_color; \n      attribute vec4 t_color;\n\n      varying vec4 fragColor;\n      uniform float t;\n      uniform float stageWidth;\n      uniform float stageHeight;\n\n      vec2 normalizeCoords(vec2 position) {\n        // read in the positions into x and y vars\n        float x = position[0];\n        float y = position[1];\n\n        return vec2(\n          2.0 * ((x / stageWidth) - 0.5),\n          -(2.0 * ((y / stageHeight) - 0.5)));\n      }\n\n      void main () {\n        gl_PointSize = float(mix(s_pointWidth, t_pointWidth, t));\n        gl_Position = vec4(mix(normalizeCoords(s_position), normalizeCoords(t_position), t), 0, 1);\n        fragColor = vec4(mix(s_color[0], t_color[0], t), mix(s_color[1], t_color[1], t), mix(s_color[2], t_color[2], t), mix(s_color[3], t_color[3], t));\n      }\n      `\n    this.setUpShader()\n    this.setBackgroundColor({r: 255, g: 255, b: 255})\n  }\n  \n  setBackgroundColor(color){\n    this.backgroundColor = [color.r/255.0, color.g/255.0, color.b/255.0, 1.0];\n  }\n  \n  setUpShader() {\n    this.drawPointsShader = this.regl({\n      frag: this.fragShader,\n      \n      vert: this.vertShaderDraw,\n      \n      attributes: {\n        position: function(context, props) {\n          return props.points.map(function(point) {\n            return [point.drawing.x, point.drawing.y];\n          });\n        },\n        color: function(context, props) {\n          return props.points.map(function(point) {\n            let c = point.drawing.color\n            return [c.r/255.0, c.g/255.0, c.b/255.0, c.opacity];\n          });\n        },\n        pointWidth: function(context, props) {\n          return props.points.map(function(point) {\n            return point.drawing.size;\n          });\n        }\n      },\n\n      uniforms: {\n        stageWidth: this.regl.context(\"drawingBufferWidth\"),\n        stageHeight: this.regl.context(\"drawingBufferHeight\"),\n      },\n\n      count: function(context, props) {\n        return props.points.length;\n      },\n      primitive: \"points\"\n    });\n    \n    this.animatePointsShader = this.regl({\n      frag: this.fragShader,\n\n      vert: this.vertShaderAnimate,\n\n      attributes: {\n        s_position: function(reglContext, props) {\n          return props.points.map(function(point) {\n            return [point.drawing.sx, point.drawing.sy];\n          });\n        },\n        t_position: function(reglContext, props) {\n          return props.points.map(function(point) {\n            return [point.drawing.x, point.drawing.y];\n          });\n        },\n        color: function(reglContext, props) {\n          return props.points.map(function(point) {\n            let c = point.drawing.color\n            return [c.r/255.0, c.g/255.0, c.b/255.0, c.opacity];\n          });\n        },\n        s_color: function(reglContext, props) {\n          return props.points.map(function(point) {\n            let c = point.drawing.scolor\n            return [c.r/255.0, c.g/255.0, c.b/255.0, c.opacity];\n          });\n        },\n        t_color: function(reglContext, props) {\n          return props.points.map(function(point) {\n            let c = point.drawing.tcolor\n            return [c.r/255.0, c.g/255.0, c.b/255.0, c.opacity];\n          });\n        },\n        pointWidth: function(reglContext, props) {\n          return props.points.map(function(point) {\n            return point.drawing.size;\n          });\n        },\n        s_pointWidth: function(reglContext, props){\n          return props.points.map(function(point) {\n            return point.drawing.ssize;\n          });\n        },\n        t_pointWidth: function(reglContext, props){\n          return props.points.map(function(point) {\n            return point.drawing.tsize;\n          });\n        }\n      },\n\n      uniforms: {\n        t: function(context, props) {\n          return props.tick;\n        },\n        stageWidth: this.regl.context(\"drawingBufferWidth\"),\n        stageHeight: this.regl.context(\"drawingBufferHeight\")\n      },\n\n      count: function(context, props) {\n        return props.points.length;\n      },\n      primitive: \"points\"\n    });\n  }\n  \n  drawPoints(props) {\n    this.regl.clear({color: this.backgroundColor})\n    this.drawPointsShader(props)\n  }\n  \n  animatePoints(props){\n    this.animatePointsShader(props)\n  }\n}"]}