glre 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/events.ts CHANGED
@@ -1,12 +1,18 @@
1
1
  import { event } from 'reev'
2
- import { createProgram, createShader, createTexture } from './utils'
2
+ import { createProgram, createShader, createTexture, joinHeaderShader } from './utils'
3
3
  import type { GL } from './types'
4
4
 
5
5
  export const glEvent = (self: GL) =>
6
6
  event({
7
7
  // run if canvas is mounted
8
8
  mount(e) {
9
- // @ts-ignore
9
+ if (self.int) self.frag = joinHeaderShader(`precision ${self.int} int;`, self.frag)
10
+ if (self.float) self.frag = joinHeaderShader(`precision ${self.float} float;`, self.frag)
11
+ if (self.sampler2D) self.frag = joinHeaderShader(`precision ${self.sampler2D} sampler2D;`, self.frag)
12
+ if (self.samplerCube) self.frag = joinHeaderShader(`precision ${self.samplerCube} samplerCube;`, self.frag)
13
+ // self.uniformHeader.map(([key, header]) => self.frag = joinHeaderShader(header, self.frag, key))
14
+ // self.uniformHeader.map(([key, header]) => self.frag = joinHeaderShader(header, self.vert, key))
15
+ // self.attributeHeader.map(([key, header]) => self.vert = joinHeaderShader(header, self.vert, key))
10
16
  const el = (self.el = document.getElementById(self.id)) // @ts-ignore
11
17
  const gl = (self.gl = el?.getContext('webgl'))
12
18
  const frag = createShader(gl, self.frag, gl?.FRAGMENT_SHADER)
@@ -45,9 +51,8 @@ export const glEvent = (self: GL) =>
45
51
  self.setUniform('iResolution', self.size)
46
52
  },
47
53
  // load image event
48
- load(_e, loadEvent) {
54
+ load(_e, _loadEvent, image) {
49
55
  self.setFrame(() => {
50
- const image = loadEvent.path[0]
51
56
  const activeUnit = self.activeUnit(image.alt)
52
57
  const location = self.location(image.alt)
53
58
  const texture = createTexture(self.gl, image)
package/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("refr"),n=require("reev");function r(e,n){for(var r=e[0],t=0,o=n.length;t<o;t+=1)r+=n[t]+e[t+1];return r}function t(e){return Array.isArray(e)&&"string"==typeof e[0]}function o(e,n,r){var t=e.createShader(r);if(e.shaderSource(t,n),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;console.warn(e.getShaderInfoLog(t))}function i(e,n){if(n){var r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(n),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r}}function a(e,n){if(n){var r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(n),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r}}var u=function(e){return n.event({mount:function(n){var r=e.el=document.getElementById(e.id),t=e.gl=null==r?void 0:r.getContext("webgl"),i=o(t,e.frag,null==t?void 0:t.FRAGMENT_SHADER),a=o(t,e.vert,null==t?void 0:t.VERTEX_SHADER);e.pg=function(e,n,r){var t=e.createProgram();return e.attachShader(t,n),e.attachShader(t,r),e.linkProgram(t),e.getProgramParameter(t,e.LINK_STATUS)?(e.useProgram(t),t):(console.log(e.getProgramInfoLog(t)),null)}(t,a,i),window.addEventListener("resize",n.on("resize")),window.addEventListener("mousemove",n.on("mousemove")),n("resize");var u=performance.now(),f=0,l=0;e.setFrame((function(){return f=u,u=performance.now(),l=u-f,e.setUniform({iTime:u,iPrevTime:f,iDeltaTime:l}),!0})),e.frame()},clean:function(n){window.removeEventListener("resize",n.on("resize")),window.removeEventListener("mousemove",n.on("mousemove")),e.frame.cancel()},mousemove:function(n,r){var t=r.clientX,o=r.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(t-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("iMouse",e.mouse)},resize:function(n,r,t,o){void 0===t&&(t=0),void 0===o&&(o=0),e.size[0]=e.el.width=t||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("iResolution",e.size)},load:function(n,r){e.setFrame((function(){var n=r.path[0],t=e.activeUnit(n.alt),o=e.location(n.alt),i=function(e,n){var r=e.createTexture();return e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),r}(e.gl,n);e.setFrame((function(){return e.gl.uniform1i(o,t),e.gl.activeTexture(e.gl["TEXTURE"+t]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},f=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],l="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",c="\n precision highp float;\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",s=function(o){var s=function e(n){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a<o;a++)i[a-1]=arguments[a];return t(n)&&(n=r(n,i)),"string"==typeof n&&(e.frag=n),"function"==typeof n&&e.frame.mount(n),e};s.id="myCanvas",s.frag=c,s.vert=l,s.size=[0,0],s.mouse=[0,0],s.count=6;var v=s.event=u(s),d=s.frame=e.frame();s.lastActiveUnit=0,s.activeUnit=n.nested((function(){return s.lastActiveUnit++})),s.stride=n.nested((function(e,n,r){var t=r?Math.max.apply(Math,r)+1:s.count;return n.length/t<<0})),s.uniformType=n.nested((function(e,n,r){return void 0===r&&(r=!1),"number"==typeof n?"uniform1f":r?"uniformMatrix"+(Math.sqrt(n.length)<<0)+"fv":"uniform"+n.length+"fv"})),s.location=n.nested((function(e,n){var r,t;return void 0===n&&(n=!1),n?null==(r=s.gl)?void 0:r.getAttribLocation(s.pg,e):null==(t=s.gl)?void 0:t.getUniformLocation(s.pg,e)})),s.setDpr=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return void v.apply(void 0,["resize",{}].concat(n))||s},s.setSize=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return void v.apply(void 0,["resize",{}].concat(n))||s},s.setFrame=function(e){return void d.mount(e)||s},s.setMount=function(e){return void v.mount({mount:e})||s},s.setClean=function(e){return void v.mount({clean:e})||s},s.setConfig=n.durable((function(e,n){s[e]=n}),s),s.setUniform=n.durable((function(e,n,r){void 0===r&&(r=!1);var t=s.uniformType(e,n,r);r?s.setFrame((function(){return s.gl[t](s.location(e),!1,n)})):s.setFrame((function(){return s.gl[t](s.location(e),n)}))}),s),s.setAttribute=n.durable((function(e,n,r){s.setFrame((function(){var t=s.gl,o=s.stride(e,n,r),u=s.location(e,!0);t.bindBuffer(t.ARRAY_BUFFER,i(t,n)),t.enableVertexAttribArray(u),t.vertexAttribPointer(u,o,t.FLOAT,!1,0,0),r&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,a(t,r))}))}),s),s.setTexture=n.durable((function(e,n){var r=new Image;r.addEventListener("load",v.on("load"),!1),Object.assign(r,{src:n,alt:e,crossOrigin:"anonymous"})}),s),s.mount=function(){return v("mount")},s.clean=function(){return v("clean")},s.clear=function(e){return s.gl.clear(s.gl[e||"COLOR_BUFFER_BIT"])},s.viewport=function(e){var n;return(n=s.gl).viewport.apply(n,[0,0].concat(e||s.size))},s.drawArrays=function(e){return void 0===e&&(e="TRIANGLES"),s.gl.drawArrays(s.gl[e],0,s.count)},s.drawElements=function(e,n){return void 0===e&&(e="TRIANGLES"),void 0===n&&(n="UNSIGNED_SHORT"),s.gl.drawElements(s.gl[e],s.count,s.gl[n],0)};for(var m=arguments.length,E=new Array(m>1?m-1:0),g=1;g<m;g++)E[g-1]=arguments[g];return t(o)&&(o=r(o,E)),"string"==typeof o&&(s.frag=o),"object"==typeof o&&s.setConfig(o),6===s.count&&s.setAttribute({a_position:f}),s};s.default=null,exports.default=s,exports.gl=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("refr"),r=require("reev");function n(e,r){for(var n=e[0],t=0,o=r.length;t<o;t+=1)n+=r[t]+e[t+1];return n}function t(e){return Array.isArray(e)&&"string"==typeof e[0]}function o(e,r,n){return void 0===n&&(n=""),-1!==r.indexOf(e)||""!==n&&-1===r.indexOf(n)?r:e+r}function i(e,r){var n="number"==typeof e?0:e.length;return n?r?["uniformMatrix"+(n=Math.sqrt(n)<<0)+"fv","mat"+n]:["uniform"+n+"fv","vec"+n]:["uniform1f","float"]}function a(e,r,n){var t=e.createShader(n);if(e.shaderSource(t,r),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;console.warn(e.getShaderInfoLog(t))}function u(e,r,n,t,o){e.bindBuffer(e.ARRAY_BUFFER,function(e,r){if(r){var n=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,new Float32Array(r),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),n}}(e,t)),e.enableVertexAttribArray(n),e.vertexAttribPointer(n,r,e.FLOAT,!1,0,0),o&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,function(e,r){if(r){var n=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(r),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),n}}(e,o))}var f=function(e){return r.event({mount:function(r){e.int&&(e.frag=o("precision "+e.int+" int;",e.frag)),e.float&&(e.frag=o("precision "+e.float+" float;",e.frag)),e.sampler2D&&(e.frag=o("precision "+e.sampler2D+" sampler2D;",e.frag)),e.samplerCube&&(e.frag=o("precision "+e.samplerCube+" samplerCube;",e.frag));var n=e.el=document.getElementById(e.id),t=e.gl=null==n?void 0:n.getContext("webgl"),i=a(t,e.frag,null==t?void 0:t.FRAGMENT_SHADER),u=a(t,e.vert,null==t?void 0:t.VERTEX_SHADER);e.pg=function(e,r,n){var t=e.createProgram();return e.attachShader(t,r),e.attachShader(t,n),e.linkProgram(t),e.getProgramParameter(t,e.LINK_STATUS)?(e.useProgram(t),t):(console.log(e.getProgramInfoLog(t)),null)}(t,u,i),window.addEventListener("resize",r.on("resize")),window.addEventListener("mousemove",r.on("mousemove")),r("resize");var f=performance.now(),l=0,c=0;e.setFrame((function(){return l=f,f=performance.now(),c=f-l,e.setUniform({iTime:f,iPrevTime:l,iDeltaTime:c}),!0})),e.frame()},clean:function(r){window.removeEventListener("resize",r.on("resize")),window.removeEventListener("mousemove",r.on("mousemove")),e.frame.cancel()},mousemove:function(r,n){var t=n.clientX,o=n.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(t-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("iMouse",e.mouse)},resize:function(r,n,t,o){void 0===t&&(t=0),void 0===o&&(o=0),e.size[0]=e.el.width=t||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("iResolution",e.size)},load:function(r,n,t){e.setFrame((function(){var r=e.activeUnit(t.alt),n=e.location(t.alt),o=function(e,r){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),n}(e.gl,t);e.setFrame((function(){return e.gl.uniform1i(n,r),e.gl.activeTexture(e.gl["TEXTURE"+r]),e.gl.bindTexture(e.gl.TEXTURE_2D,o),!0}))}))}})},l=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],c="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",s="\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",v=function(o){var a=function e(r){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a<o;a++)i[a-1]=arguments[a];return t(r)&&(r=n(r,i)),"string"==typeof r&&(e.frag=r),"function"==typeof r&&e.frame.mount(r),e};a.id="myCanvas",a.frag=s,a.vert=c,a.size=[0,0],a.mouse=[0,0],a.count=6,a.uniformHeader=[],a.attributeHeader=[];var v=a.event=f(a),m=a.frame=e.frame();a.lastActiveUnit=0,a.activeUnit=r.nested((function(){return a.lastActiveUnit++})),a.vertexStride=r.nested((function(e,r,n){var t=n?Math.max.apply(Math,n)+1:a.count,o=r.length/t<<0;return a.attributeHeader.push([e,"vertex vec"+o+" "+e+";"]),o})),a.uniformType=r.nested((function(e,r,n){var t=i(r,n),o=t[0],u=t[1];return a.uniformHeader.push([e,"uniform "+u+" "+e]),o})),a.location=r.nested((function(e,r){var n,t;return void 0===r&&(r=!1),r?null==(n=a.gl)?void 0:n.getAttribLocation(a.pg,e):null==(t=a.gl)?void 0:t.getUniformLocation(a.pg,e)})),a.setDpr=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return void v.apply(void 0,["resize",{}].concat(r))||a},a.setSize=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return void v.apply(void 0,["resize",{}].concat(r))||a},a.setFrame=function(e){return void m.mount(e)||a},a.setMount=function(e){return void v.mount({mount:e})||a},a.setClean=function(e){return void v.mount({clean:e})||a},a.setConfig=r.durable((function(e,r){a[e]=r}),a),a.setUniform=r.durable((function(e,r,n){void 0===n&&(n=!1);var t=a.uniformType(e,r,n);a.setFrame((function(){n?a.gl[t](a.location(e),!1,r):a.gl[t](a.location(e),r)}))}),a),a.setAttribute=r.durable((function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),t=1;t<r;t++)n[t-1]=arguments[t];a.setFrame((function(){var r=a.vertexStride.apply(a,[e].concat(n)),t=a.location(e,!0);u.apply(void 0,[a.gl,r,t].concat(n))}))}),a),a.setTexture=r.durable((function(e,r){var n=new Image;n.addEventListener("load",(function(e){return v("load",e,n)}),!1),Object.assign(n,{src:r,alt:e,crossOrigin:"anonymous"})}),a),a.mount=v.on("mount"),a.clean=v.on("clean"),a.clear=function(e){return a.gl.clear(a.gl[e||"COLOR_BUFFER_BIT"])},a.viewport=function(e){var r;return(r=a.gl).viewport.apply(r,[0,0].concat(e||a.size))},a.drawArrays=function(e){return void 0===e&&(e="TRIANGLES"),a.gl.drawArrays(a.gl[e],0,a.count)},a.drawElements=function(e,r){return void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),a.gl.drawElements(a.gl[e],a.count,a.gl[r],0)};for(var d=arguments.length,g=new Array(d>1?d-1:0),E=1;E<d;E++)g[E-1]=arguments[E];return t(o)&&(o=n(o,g)),"string"==typeof o&&(a.frag=o),"object"==typeof o&&a.setConfig(o),6===a.count&&a.setAttribute({a_position:l}),a};v.default=null,exports.default=v,exports.gl=v;
package/index.develop.js CHANGED
@@ -1 +1 @@
1
- !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("refr"),require("reev")):"function"==typeof define&&define.amd?define(["exports","refr","reev"],n):n(((e="undefined"!=typeof globalThis?globalThis:e||self).index=e.index||{},e.index.ts={}),e.refr,e.reev)}(this,(function(e,n,r){"use strict";function t(e,n){for(var r=e[0],t=0,o=n.length;t<o;t+=1)r+=n[t]+e[t+1];return r}function o(e){return Array.isArray(e)&&"string"==typeof e[0]}function i(e,n,r){var t=e.createShader(r);if(e.shaderSource(t,n),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;console.warn(e.getShaderInfoLog(t))}function a(e,n){if(n){var r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(n),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r}}function u(e,n){if(n){var r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(n),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r}}var f=function(e){return r.event({mount:function(n){var r=e.el=document.getElementById(e.id),t=e.gl=null==r?void 0:r.getContext("webgl"),o=i(t,e.frag,null==t?void 0:t.FRAGMENT_SHADER),a=i(t,e.vert,null==t?void 0:t.VERTEX_SHADER);e.pg=function(e,n,r){var t=e.createProgram();return e.attachShader(t,n),e.attachShader(t,r),e.linkProgram(t),e.getProgramParameter(t,e.LINK_STATUS)?(e.useProgram(t),t):(console.log(e.getProgramInfoLog(t)),null)}(t,a,o),window.addEventListener("resize",n.on("resize")),window.addEventListener("mousemove",n.on("mousemove")),n("resize");var u=performance.now(),f=0,l=0;e.setFrame((function(){return f=u,u=performance.now(),l=u-f,e.setUniform({iTime:u,iPrevTime:f,iDeltaTime:l}),!0})),e.frame()},clean:function(n){window.removeEventListener("resize",n.on("resize")),window.removeEventListener("mousemove",n.on("mousemove")),e.frame.cancel()},mousemove:function(n,r){var t=r.clientX,o=r.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(t-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("iMouse",e.mouse)},resize:function(n,r,t,o){void 0===t&&(t=0),void 0===o&&(o=0),e.size[0]=e.el.width=t||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("iResolution",e.size)},load:function(n,r){e.setFrame((function(){var n=r.path[0],t=e.activeUnit(n.alt),o=e.location(n.alt),i=function(e,n){var r=e.createTexture();return e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),r}(e.gl,n);e.setFrame((function(){return e.gl.uniform1i(o,t),e.gl.activeTexture(e.gl["TEXTURE"+t]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},l=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],c="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",s="\n precision highp float;\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",d=function(e){var i=function e(n){for(var r=arguments.length,i=new Array(r>1?r-1:0),a=1;a<r;a++)i[a-1]=arguments[a];return o(n)&&(n=t(n,i)),"string"==typeof n&&(e.frag=n),"function"==typeof n&&e.frame.mount(n),e};i.id="myCanvas",i.frag=s,i.vert=c,i.size=[0,0],i.mouse=[0,0],i.count=6;var d=i.event=f(i),m=i.frame=n.frame();i.lastActiveUnit=0,i.activeUnit=r.nested((function(){return i.lastActiveUnit++})),i.stride=r.nested((function(e,n,r){var t=r?Math.max.apply(Math,r)+1:i.count;return n.length/t<<0})),i.uniformType=r.nested((function(e,n,r){return void 0===r&&(r=!1),"number"==typeof n?"uniform1f":r?"uniformMatrix"+(Math.sqrt(n.length)<<0)+"fv":"uniform"+n.length+"fv"})),i.location=r.nested((function(e,n){var r,t;return void 0===n&&(n=!1),n?null==(r=i.gl)?void 0:r.getAttribLocation(i.pg,e):null==(t=i.gl)?void 0:t.getUniformLocation(i.pg,e)})),i.setDpr=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return void d.apply(void 0,["resize",{}].concat(n))||i},i.setSize=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return void d.apply(void 0,["resize",{}].concat(n))||i},i.setFrame=function(e){return void m.mount(e)||i},i.setMount=function(e){return void d.mount({mount:e})||i},i.setClean=function(e){return void d.mount({clean:e})||i},i.setConfig=r.durable((function(e,n){i[e]=n}),i),i.setUniform=r.durable((function(e,n,r){void 0===r&&(r=!1);var t=i.uniformType(e,n,r);r?i.setFrame((function(){return i.gl[t](i.location(e),!1,n)})):i.setFrame((function(){return i.gl[t](i.location(e),n)}))}),i),i.setAttribute=r.durable((function(e,n,r){i.setFrame((function(){var t=i.gl,o=i.stride(e,n,r),f=i.location(e,!0);t.bindBuffer(t.ARRAY_BUFFER,a(t,n)),t.enableVertexAttribArray(f),t.vertexAttribPointer(f,o,t.FLOAT,!1,0,0),r&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,u(t,r))}))}),i),i.setTexture=r.durable((function(e,n){var r=new Image;r.addEventListener("load",d.on("load"),!1),Object.assign(r,{src:n,alt:e,crossOrigin:"anonymous"})}),i),i.mount=function(){return d("mount")},i.clean=function(){return d("clean")},i.clear=function(e){return i.gl.clear(i.gl[e||"COLOR_BUFFER_BIT"])},i.viewport=function(e){var n;return(n=i.gl).viewport.apply(n,[0,0].concat(e||i.size))},i.drawArrays=function(e){return void 0===e&&(e="TRIANGLES"),i.gl.drawArrays(i.gl[e],0,i.count)},i.drawElements=function(e,n){return void 0===e&&(e="TRIANGLES"),void 0===n&&(n="UNSIGNED_SHORT"),i.gl.drawElements(i.gl[e],i.count,i.gl[n],0)};for(var v=arguments.length,E=new Array(v>1?v-1:0),g=1;g<v;g++)E[g-1]=arguments[g];return o(e)&&(e=t(e,E)),"string"==typeof e&&(i.frag=e),"object"==typeof e&&i.setConfig(e),6===i.count&&i.setAttribute({a_position:l}),i};d.default=null,e.default=d,e.gl=d,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("refr"),require("reev")):"function"==typeof define&&define.amd?define(["exports","refr","reev"],n):n(((e="undefined"!=typeof globalThis?globalThis:e||self).index=e.index||{},e.index.ts={}),e.refr,e.reev)}(this,(function(e,n,r){"use strict";function t(e,n){for(var r=e[0],t=0,o=n.length;t<o;t+=1)r+=n[t]+e[t+1];return r}function o(e){return Array.isArray(e)&&"string"==typeof e[0]}function i(e,n,r){return void 0===r&&(r=""),-1!==n.indexOf(e)||""!==r&&-1===n.indexOf(r)?n:e+n}function a(e,n){var r="number"==typeof e?0:e.length;return r?n?["uniformMatrix"+(r=Math.sqrt(r)<<0)+"fv","mat"+r]:["uniform"+r+"fv","vec"+r]:["uniform1f","float"]}function u(e,n,r){var t=e.createShader(r);if(e.shaderSource(t,n),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;console.warn(e.getShaderInfoLog(t))}function f(e,n,r,t,o){e.bindBuffer(e.ARRAY_BUFFER,function(e,n){if(n){var r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(n),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r}}(e,t)),e.enableVertexAttribArray(r),e.vertexAttribPointer(r,n,e.FLOAT,!1,0,0),o&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,function(e,n){if(n){var r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(n),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r}}(e,o))}var l=function(e){return r.event({mount:function(n){e.int&&(e.frag=i("precision "+e.int+" int;",e.frag)),e.float&&(e.frag=i("precision "+e.float+" float;",e.frag)),e.sampler2D&&(e.frag=i("precision "+e.sampler2D+" sampler2D;",e.frag)),e.samplerCube&&(e.frag=i("precision "+e.samplerCube+" samplerCube;",e.frag));var r=e.el=document.getElementById(e.id),t=e.gl=null==r?void 0:r.getContext("webgl"),o=u(t,e.frag,null==t?void 0:t.FRAGMENT_SHADER),a=u(t,e.vert,null==t?void 0:t.VERTEX_SHADER);e.pg=function(e,n,r){var t=e.createProgram();return e.attachShader(t,n),e.attachShader(t,r),e.linkProgram(t),e.getProgramParameter(t,e.LINK_STATUS)?(e.useProgram(t),t):(console.log(e.getProgramInfoLog(t)),null)}(t,a,o),window.addEventListener("resize",n.on("resize")),window.addEventListener("mousemove",n.on("mousemove")),n("resize");var f=performance.now(),l=0,c=0;e.setFrame((function(){return l=f,f=performance.now(),c=f-l,e.setUniform({iTime:f,iPrevTime:l,iDeltaTime:c}),!0})),e.frame()},clean:function(n){window.removeEventListener("resize",n.on("resize")),window.removeEventListener("mousemove",n.on("mousemove")),e.frame.cancel()},mousemove:function(n,r){var t=r.clientX,o=r.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(t-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("iMouse",e.mouse)},resize:function(n,r,t,o){void 0===t&&(t=0),void 0===o&&(o=0),e.size[0]=e.el.width=t||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("iResolution",e.size)},load:function(n,r,t){e.setFrame((function(){var n=e.activeUnit(t.alt),r=e.location(t.alt),o=function(e,n){var r=e.createTexture();return e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),r}(e.gl,t);e.setFrame((function(){return e.gl.uniform1i(r,n),e.gl.activeTexture(e.gl["TEXTURE"+n]),e.gl.bindTexture(e.gl.TEXTURE_2D,o),!0}))}))}})},c=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],s="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",d="\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",m=function(e){var i=function e(n){for(var r=arguments.length,i=new Array(r>1?r-1:0),a=1;a<r;a++)i[a-1]=arguments[a];return o(n)&&(n=t(n,i)),"string"==typeof n&&(e.frag=n),"function"==typeof n&&e.frame.mount(n),e};i.id="myCanvas",i.frag=d,i.vert=s,i.size=[0,0],i.mouse=[0,0],i.count=6,i.uniformHeader=[],i.attributeHeader=[];var u=i.event=l(i),m=i.frame=n.frame();i.lastActiveUnit=0,i.activeUnit=r.nested((function(){return i.lastActiveUnit++})),i.vertexStride=r.nested((function(e,n,r){var t=r?Math.max.apply(Math,r)+1:i.count,o=n.length/t<<0;return i.attributeHeader.push([e,"vertex vec"+o+" "+e+";"]),o})),i.uniformType=r.nested((function(e,n,r){var t=a(n,r),o=t[0],u=t[1];return i.uniformHeader.push([e,"uniform "+u+" "+e]),o})),i.location=r.nested((function(e,n){var r,t;return void 0===n&&(n=!1),n?null==(r=i.gl)?void 0:r.getAttribLocation(i.pg,e):null==(t=i.gl)?void 0:t.getUniformLocation(i.pg,e)})),i.setDpr=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return void u.apply(void 0,["resize",{}].concat(n))||i},i.setSize=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return void u.apply(void 0,["resize",{}].concat(n))||i},i.setFrame=function(e){return void m.mount(e)||i},i.setMount=function(e){return void u.mount({mount:e})||i},i.setClean=function(e){return void u.mount({clean:e})||i},i.setConfig=r.durable((function(e,n){i[e]=n}),i),i.setUniform=r.durable((function(e,n,r){void 0===r&&(r=!1);var t=i.uniformType(e,n,r);i.setFrame((function(){r?i.gl[t](i.location(e),!1,n):i.gl[t](i.location(e),n)}))}),i),i.setAttribute=r.durable((function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),t=1;t<n;t++)r[t-1]=arguments[t];i.setFrame((function(){var n=i.vertexStride.apply(i,[e].concat(r)),t=i.location(e,!0);f.apply(void 0,[i.gl,n,t].concat(r))}))}),i),i.setTexture=r.durable((function(e,n){var r=new Image;r.addEventListener("load",(function(e){return u("load",e,r)}),!1),Object.assign(r,{src:n,alt:e,crossOrigin:"anonymous"})}),i),i.mount=u.on("mount"),i.clean=u.on("clean"),i.clear=function(e){return i.gl.clear(i.gl[e||"COLOR_BUFFER_BIT"])},i.viewport=function(e){var n;return(n=i.gl).viewport.apply(n,[0,0].concat(e||i.size))},i.drawArrays=function(e){return void 0===e&&(e="TRIANGLES"),i.gl.drawArrays(i.gl[e],0,i.count)},i.drawElements=function(e,n){return void 0===e&&(e="TRIANGLES"),void 0===n&&(n="UNSIGNED_SHORT"),i.gl.drawElements(i.gl[e],i.count,i.gl[n],0)};for(var v=arguments.length,g=new Array(v>1?v-1:0),E=1;E<v;E++)g[E-1]=arguments[E];return o(e)&&(e=t(e,g)),"string"==typeof e&&(i.frag=e),"object"==typeof e&&i.setConfig(e),6===i.count&&i.setAttribute({a_position:c}),i};m.default=null,e.default=m,e.gl=m,Object.defineProperty(e,"__esModule",{value:!0})}));
package/index.js CHANGED
@@ -1 +1 @@
1
- import{frame as e}from"refr";import{event as n,nested as r,durable as t}from"reev";function o(e,n){for(var r=e[0],t=0,o=n.length;t<o;t+=1)r+=n[t]+e[t+1];return r}function i(e){return Array.isArray(e)&&"string"==typeof e[0]}function a(e,n,r){var t=e.createShader(r);if(e.shaderSource(t,n),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;console.warn(e.getShaderInfoLog(t))}function u(e,n){if(n){var r=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,r),e.bufferData(e.ARRAY_BUFFER,new Float32Array(n),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),r}}function f(e,n){if(n){var r=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,r),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(n),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),r}}var l=function(e){return n({mount:function(n){var r=e.el=document.getElementById(e.id),t=e.gl=null==r?void 0:r.getContext("webgl"),o=a(t,e.frag,null==t?void 0:t.FRAGMENT_SHADER),i=a(t,e.vert,null==t?void 0:t.VERTEX_SHADER);e.pg=function(e,n,r){var t=e.createProgram();return e.attachShader(t,n),e.attachShader(t,r),e.linkProgram(t),e.getProgramParameter(t,e.LINK_STATUS)?(e.useProgram(t),t):(console.log(e.getProgramInfoLog(t)),null)}(t,i,o),window.addEventListener("resize",n.on("resize")),window.addEventListener("mousemove",n.on("mousemove")),n("resize");var u=performance.now(),f=0,l=0;e.setFrame((function(){return f=u,u=performance.now(),l=u-f,e.setUniform({iTime:u,iPrevTime:f,iDeltaTime:l}),!0})),e.frame()},clean:function(n){window.removeEventListener("resize",n.on("resize")),window.removeEventListener("mousemove",n.on("mousemove")),e.frame.cancel()},mousemove:function(n,r){var t=r.clientX,o=r.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(t-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("iMouse",e.mouse)},resize:function(n,r,t,o){void 0===t&&(t=0),void 0===o&&(o=0),e.size[0]=e.el.width=t||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("iResolution",e.size)},load:function(n,r){e.setFrame((function(){var n=r.path[0],t=e.activeUnit(n.alt),o=e.location(n.alt),i=function(e,n){var r=e.createTexture();return e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),r}(e.gl,n);e.setFrame((function(){return e.gl.uniform1i(o,t),e.gl.activeTexture(e.gl["TEXTURE"+t]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},c=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],s="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",m="\n precision highp float;\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",v=function(n){var a=function e(n){for(var r=arguments.length,t=new Array(r>1?r-1:0),a=1;a<r;a++)t[a-1]=arguments[a];return i(n)&&(n=o(n,t)),"string"==typeof n&&(e.frag=n),"function"==typeof n&&e.frame.mount(n),e};a.id="myCanvas",a.frag=m,a.vert=s,a.size=[0,0],a.mouse=[0,0],a.count=6;var v=a.event=l(a),E=a.frame=e();a.lastActiveUnit=0,a.activeUnit=r((function(){return a.lastActiveUnit++})),a.stride=r((function(e,n,r){var t=r?Math.max.apply(Math,r)+1:a.count;return n.length/t<<0})),a.uniformType=r((function(e,n,r){return void 0===r&&(r=!1),"number"==typeof n?"uniform1f":r?"uniformMatrix"+(Math.sqrt(n.length)<<0)+"fv":"uniform"+n.length+"fv"})),a.location=r((function(e,n){var r,t;return void 0===n&&(n=!1),n?null==(r=a.gl)?void 0:r.getAttribLocation(a.pg,e):null==(t=a.gl)?void 0:t.getUniformLocation(a.pg,e)})),a.setDpr=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return void v.apply(void 0,["resize",{}].concat(n))||a},a.setSize=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return void v.apply(void 0,["resize",{}].concat(n))||a},a.setFrame=function(e){return void E.mount(e)||a},a.setMount=function(e){return void v.mount({mount:e})||a},a.setClean=function(e){return void v.mount({clean:e})||a},a.setConfig=t((function(e,n){a[e]=n}),a),a.setUniform=t((function(e,n,r){void 0===r&&(r=!1);var t=a.uniformType(e,n,r);r?a.setFrame((function(){return a.gl[t](a.location(e),!1,n)})):a.setFrame((function(){return a.gl[t](a.location(e),n)}))}),a),a.setAttribute=t((function(e,n,r){a.setFrame((function(){var t=a.gl,o=a.stride(e,n,r),i=a.location(e,!0);t.bindBuffer(t.ARRAY_BUFFER,u(t,n)),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,o,t.FLOAT,!1,0,0),r&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,f(t,r))}))}),a),a.setTexture=t((function(e,n){var r=new Image;r.addEventListener("load",v.on("load"),!1),Object.assign(r,{src:n,alt:e,crossOrigin:"anonymous"})}),a),a.mount=function(){return v("mount")},a.clean=function(){return v("clean")},a.clear=function(e){return a.gl.clear(a.gl[e||"COLOR_BUFFER_BIT"])},a.viewport=function(e){var n;return(n=a.gl).viewport.apply(n,[0,0].concat(e||a.size))},a.drawArrays=function(e){return void 0===e&&(e="TRIANGLES"),a.gl.drawArrays(a.gl[e],0,a.count)},a.drawElements=function(e,n){return void 0===e&&(e="TRIANGLES"),void 0===n&&(n="UNSIGNED_SHORT"),a.gl.drawElements(a.gl[e],a.count,a.gl[n],0)};for(var g=arguments.length,d=new Array(g>1?g-1:0),T=1;T<g;T++)d[T-1]=arguments[T];return i(n)&&(n=o(n,d)),"string"==typeof n&&(a.frag=n),"object"==typeof n&&a.setConfig(n),6===a.count&&a.setAttribute({a_position:c}),a};v.default=null;export{v as default,v as gl};
1
+ import{frame as e}from"refr";import{event as r,nested as n,durable as t}from"reev";function o(e,r){for(var n=e[0],t=0,o=r.length;t<o;t+=1)n+=r[t]+e[t+1];return n}function i(e){return Array.isArray(e)&&"string"==typeof e[0]}function a(e,r,n){return void 0===n&&(n=""),-1!==r.indexOf(e)||""!==n&&-1===r.indexOf(n)?r:e+r}function u(e,r){var n="number"==typeof e?0:e.length;return n?r?["uniformMatrix"+(n=Math.sqrt(n)<<0)+"fv","mat"+n]:["uniform"+n+"fv","vec"+n]:["uniform1f","float"]}function f(e,r,n){var t=e.createShader(n);if(e.shaderSource(t,r),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;console.warn(e.getShaderInfoLog(t))}function l(e,r,n,t,o){e.bindBuffer(e.ARRAY_BUFFER,function(e,r){if(r){var n=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,new Float32Array(r),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),n}}(e,t)),e.enableVertexAttribArray(n),e.vertexAttribPointer(n,r,e.FLOAT,!1,0,0),o&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,function(e,r){if(r){var n=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(r),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),n}}(e,o))}var c=function(e){return r({mount:function(r){e.int&&(e.frag=a("precision "+e.int+" int;",e.frag)),e.float&&(e.frag=a("precision "+e.float+" float;",e.frag)),e.sampler2D&&(e.frag=a("precision "+e.sampler2D+" sampler2D;",e.frag)),e.samplerCube&&(e.frag=a("precision "+e.samplerCube+" samplerCube;",e.frag));var n=e.el=document.getElementById(e.id),t=e.gl=null==n?void 0:n.getContext("webgl"),o=f(t,e.frag,null==t?void 0:t.FRAGMENT_SHADER),i=f(t,e.vert,null==t?void 0:t.VERTEX_SHADER);e.pg=function(e,r,n){var t=e.createProgram();return e.attachShader(t,r),e.attachShader(t,n),e.linkProgram(t),e.getProgramParameter(t,e.LINK_STATUS)?(e.useProgram(t),t):(console.log(e.getProgramInfoLog(t)),null)}(t,i,o),window.addEventListener("resize",r.on("resize")),window.addEventListener("mousemove",r.on("mousemove")),r("resize");var u=performance.now(),l=0,c=0;e.setFrame((function(){return l=u,u=performance.now(),c=u-l,e.setUniform({iTime:u,iPrevTime:l,iDeltaTime:c}),!0})),e.frame()},clean:function(r){window.removeEventListener("resize",r.on("resize")),window.removeEventListener("mousemove",r.on("mousemove")),e.frame.cancel()},mousemove:function(r,n){var t=n.clientX,o=n.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(t-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("iMouse",e.mouse)},resize:function(r,n,t,o){void 0===t&&(t=0),void 0===o&&(o=0),e.size[0]=e.el.width=t||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("iResolution",e.size)},load:function(r,n,t){e.setFrame((function(){var r=e.activeUnit(t.alt),n=e.location(t.alt),o=function(e,r){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,r),e.generateMipmap(e.TEXTURE_2D),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),n}(e.gl,t);e.setFrame((function(){return e.gl.uniform1i(n,r),e.gl.activeTexture(e.gl["TEXTURE"+r]),e.gl.bindTexture(e.gl.TEXTURE_2D,o),!0}))}))}})},m=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],s="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",v="\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",g=function(r){var a=function e(r){for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a<n;a++)t[a-1]=arguments[a];return i(r)&&(r=o(r,t)),"string"==typeof r&&(e.frag=r),"function"==typeof r&&e.frame.mount(r),e};a.id="myCanvas",a.frag=v,a.vert=s,a.size=[0,0],a.mouse=[0,0],a.count=6,a.uniformHeader=[],a.attributeHeader=[];var f=a.event=c(a),g=a.frame=e();a.lastActiveUnit=0,a.activeUnit=n((function(){return a.lastActiveUnit++})),a.vertexStride=n((function(e,r,n){var t=n?Math.max.apply(Math,n)+1:a.count,o=r.length/t<<0;return a.attributeHeader.push([e,"vertex vec"+o+" "+e+";"]),o})),a.uniformType=n((function(e,r,n){var t=u(r,n),o=t[0],i=t[1];return a.uniformHeader.push([e,"uniform "+i+" "+e]),o})),a.location=n((function(e,r){var n,t;return void 0===r&&(r=!1),r?null==(n=a.gl)?void 0:n.getAttribLocation(a.pg,e):null==(t=a.gl)?void 0:t.getUniformLocation(a.pg,e)})),a.setDpr=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return void f.apply(void 0,["resize",{}].concat(r))||a},a.setSize=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return void f.apply(void 0,["resize",{}].concat(r))||a},a.setFrame=function(e){return void g.mount(e)||a},a.setMount=function(e){return void f.mount({mount:e})||a},a.setClean=function(e){return void f.mount({clean:e})||a},a.setConfig=t((function(e,r){a[e]=r}),a),a.setUniform=t((function(e,r,n){void 0===n&&(n=!1);var t=a.uniformType(e,r,n);a.setFrame((function(){n?a.gl[t](a.location(e),!1,r):a.gl[t](a.location(e),r)}))}),a),a.setAttribute=t((function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),t=1;t<r;t++)n[t-1]=arguments[t];a.setFrame((function(){var r=a.vertexStride.apply(a,[e].concat(n)),t=a.location(e,!0);l.apply(void 0,[a.gl,r,t].concat(n))}))}),a),a.setTexture=t((function(e,r){var n=new Image;n.addEventListener("load",(function(e){return f("load",e,n)}),!1),Object.assign(n,{src:r,alt:e,crossOrigin:"anonymous"})}),a),a.mount=f.on("mount"),a.clean=f.on("clean"),a.clear=function(e){return a.gl.clear(a.gl[e||"COLOR_BUFFER_BIT"])},a.viewport=function(e){var r;return(r=a.gl).viewport.apply(r,[0,0].concat(e||a.size))},a.drawArrays=function(e){return void 0===e&&(e="TRIANGLES"),a.gl.drawArrays(a.gl[e],0,a.count)},a.drawElements=function(e,r){return void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),a.gl.drawElements(a.gl[e],a.count,a.gl[r],0)};for(var E=arguments.length,d=new Array(E>1?E-1:0),T=1;T<E;T++)d[T-1]=arguments[T];return i(r)&&(r=o(r,d)),"string"==typeof r&&(a.frag=r),"object"==typeof r&&a.setConfig(r),6===a.count&&a.setAttribute({a_position:m}),a};g.default=null;export{g as default,g as gl};
package/index.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { frame } from 'refr'
2
2
  import { glEvent } from './events'
3
3
  import { durable, nested } from 'reev'
4
- import { createVbo, createIbo, interleave, isTemplateLiteral } from './utils'
5
- import type { GL, GLInitArg } from './types'
4
+ import { createAttribute, interleave, isTemplateLiteral, switchUniformType } from './utils'
5
+ import type { GL } from './types'
6
6
 
7
7
  const a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1];
8
8
 
@@ -14,14 +14,13 @@ const _defaultVertexShader = `
14
14
  `
15
15
 
16
16
  const _defaultFragmentShader = `
17
- precision highp float;
18
17
  uniform vec2 resolution;
19
18
  void main() {
20
19
  gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);
21
20
  }
22
21
  `
23
22
 
24
- export const gl = (initArg?: GLInitArg, ...initArgs: any[]) => {
23
+ export const gl = (initArg?: Partial<GL>, ...initArgs: any[]) => {
25
24
  const self = ((arg: any, ...args: any[]) => {
26
25
  if (isTemplateLiteral(arg)) arg = interleave(arg, args)
27
26
  if (typeof arg === 'string') self.frag = arg
@@ -33,24 +32,31 @@ export const gl = (initArg?: GLInitArg, ...initArgs: any[]) => {
33
32
  self.id = 'myCanvas' // @TODO feat: create hashid
34
33
  self.frag = _defaultFragmentShader;
35
34
  self.vert = _defaultVertexShader;
35
+ // self.float = "mediump" // @TODO check bugs
36
36
  self.size = [0, 0]
37
37
  self.mouse = [0, 0]
38
38
  self.count = 6
39
+ self.uniformHeader = []
40
+ self.attributeHeader = []
39
41
 
40
42
  // core state
41
43
  const ev = (self.event = glEvent(self))
42
44
  const fr = (self.frame = frame())
43
45
  self.lastActiveUnit = 0
44
46
  self.activeUnit = nested(() => self.lastActiveUnit++)
45
- self.stride = nested((_key, value, iboValue) => {
47
+ self.vertexStride = nested((key, value, iboValue) => {
46
48
  const count = iboValue ? Math.max(...iboValue) + 1 : self.count;
47
- return (value.length / count) << 0;
49
+ const stride = (value.length / count) << 0
50
+ self.attributeHeader.push([key, `vertex vec${stride} ${key};`])
51
+ return stride
48
52
  })
49
- self.uniformType = nested((_key, value, isMatrix = false) => {
50
- if (typeof value === 'number') return `uniform1f`
51
- if (!isMatrix) return `uniform${value.length}fv`
52
- else return `uniformMatrix${Math.sqrt(value.length) << 0}fv`
53
+
54
+ self.uniformType = nested((key, value, isMatrix) => {
55
+ const [type, code] = switchUniformType(value, isMatrix)
56
+ self.uniformHeader.push([key, `uniform ${code} ${key}`])
57
+ return type
53
58
  })
59
+
54
60
  self.location = nested((key, isAttribute = false) => {
55
61
  return isAttribute
56
62
  ? self.gl?.getAttribLocation(self.pg, key)
@@ -68,35 +74,32 @@ export const gl = (initArg?: GLInitArg, ...initArgs: any[]) => {
68
74
  // uniform
69
75
  self.setUniform = durable((key, value, isMatrix = false) => {
70
76
  const type = self.uniformType(key, value, isMatrix)
71
- if (isMatrix)
72
- self.setFrame(() => self.gl[type](self.location(key), false, value))
73
- else self.setFrame(() => self.gl[type](self.location(key), value))
77
+ self.setFrame(() => {
78
+ if (isMatrix)
79
+ self.gl[type](self.location(key), false, value)
80
+ else self.gl[type](self.location(key), value)
81
+ })
74
82
  }, self)
75
83
 
76
84
  // attribute
77
- self.setAttribute = durable((key, value, iboValue) => {
85
+ self.setAttribute = durable((key, ...args) => {
78
86
  self.setFrame(() => {
79
- const { gl } = self
80
- const stride = self.stride(key, value, iboValue)
87
+ const stride = self.vertexStride(key, ...args)
81
88
  const location = self.location(key, true)
82
- gl.bindBuffer(gl.ARRAY_BUFFER, createVbo(gl, value))
83
- gl.enableVertexAttribArray(location)
84
- gl.vertexAttribPointer(location, stride, gl.FLOAT, false, 0, 0)
85
- if (iboValue)
86
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, createIbo(gl, iboValue))
89
+ createAttribute(self.gl, stride, location, ...args)
87
90
  })
88
91
  }, self)
89
92
 
90
93
  // texture
91
94
  self.setTexture = durable((key, src) => {
92
95
  const image = new Image()
93
- image.addEventListener('load', ev.on('load'), false)
96
+ image.addEventListener("load", (e) => ev("load", e, image), false)
94
97
  Object.assign(image, { src, alt: key, crossOrigin: 'anonymous' })
95
98
  }, self)
96
99
 
97
100
  // shorthands
98
- self.mount = () => ev("mount")
99
- self.clean = () => ev("clean")
101
+ self.mount = ev.on("mount")
102
+ self.clean = ev.on("clean")
100
103
  self.clear = (key) => self.gl.clear(self.gl[key || "COLOR_BUFFER_BIT"])
101
104
  self.viewport = (size) => self.gl.viewport(0, 0, ...(size || self.size))
102
105
  self.drawArrays = (mode = 'TRIANGLES') =>
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "glre",
3
3
  "author": "tseijp",
4
4
  "license": "MIT",
5
- "version": "0.7.0",
5
+ "version": "0.9.0",
6
6
  "module": "index.js",
7
7
  "types": "index.ts",
8
8
  "main": "index.cjs.js",
package/types.ts CHANGED
@@ -25,7 +25,13 @@ export interface GL {
25
25
  count: number
26
26
  frag: string
27
27
  vert: string
28
+ int: PrecisionMode
29
+ float: PrecisionMode
30
+ sampler2D: PrecisionMode
31
+ samplerCube: PrecisionMode
28
32
  lastActiveUnit: number
33
+ uniformHeader: [string, string][]
34
+ attributeHeader: [string, string][]
29
35
  /**
30
36
  * core state
31
37
  */
@@ -50,7 +56,7 @@ export interface GL {
50
56
  setUniform(key: string, value: Uniform): GL
51
57
  setTexture(key: string, value: string): GL
52
58
  setAttribute(key: string, value: Attribute, iboValue?: Attribute): GL
53
- setConfig<K extends keyof GLConfig>(key: K, value: GLConfig[K]): GL
59
+ setConfig<K extends keyof Partial<GL>>(key: K, value: GLConfig[K]): GL
54
60
  // setUniform: Durable<(
55
61
  // key: string,
56
62
  // value: Uniform,
@@ -78,19 +84,10 @@ export interface GL {
78
84
  drawElements(key?: GLDrawMode): void
79
85
  }
80
86
 
81
- export type GLInitArg =
82
- | string
83
- | Partial<GLConfig>
84
- | TemplateStringsArray
85
-
86
- export interface GLConfig {
87
- id: string
88
- frag: string
89
- vert: string
90
- size: [number, number]
91
- mouse: [number, number]
92
- count: number
93
- }
87
+ export type PrecisionMode =
88
+ | 'highp'
89
+ | 'mediump'
90
+ | 'lowp'
94
91
 
95
92
  export type GLClearMode =
96
93
  | 'COLOR_BUFFER_BIT'
package/utils.ts CHANGED
@@ -1,10 +1,7 @@
1
1
  /**
2
2
  * utils
3
3
  */
4
- export function interleave(
5
- strings: readonly string[],
6
- args: any[]
7
- ) {
4
+ export function interleave(strings: readonly string[], args: any[]) {
8
5
  let result = strings[0]
9
6
  for (let i = 0, len = args.length; i < len; i += 1)
10
7
  result += args[i] + strings[i + 1]
@@ -15,6 +12,21 @@ export function isTemplateLiteral(strings: unknown): strings is string[] {
15
12
  return Array.isArray(strings) && typeof strings[0] === "string"
16
13
  }
17
14
 
15
+ export function joinHeaderShader(header, shader, key = "") {
16
+ if (shader.indexOf(header) === -1)
17
+ if (key === "" || shader.indexOf(key) !== -1)
18
+ return header + shader
19
+ return shader
20
+ }
21
+
22
+ export function switchUniformType(value, isMatrix) {
23
+ let length = typeof value === "number" ? 0 : (value as any[]).length
24
+ if (!length) return [`uniform1f`, `float`]
25
+ if (!isMatrix) return [`uniform${length}fv`, `vec${length}`]
26
+ length = Math.sqrt(length) << 0;
27
+ return [`uniformMatrix${length}fv`, `mat${length}`]
28
+ }
29
+
18
30
  /**
19
31
  * graphics
20
32
  */
@@ -59,6 +71,14 @@ export function createIbo(gl, data) {
59
71
  return ibo
60
72
  }
61
73
 
74
+ export function createAttribute(gl, stride, location, value, iboValue) {
75
+ gl.bindBuffer(gl.ARRAY_BUFFER, createVbo(gl, value))
76
+ gl.enableVertexAttribArray(location)
77
+ gl.vertexAttribPointer(location, stride, gl.FLOAT, false, 0, 0)
78
+ if (iboValue)
79
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, createIbo(gl, iboValue))
80
+ }
81
+
62
82
  export function createFramebuffer(gl, width, height) {
63
83
  const frameBuffer = gl.createFramebuffer()
64
84
  gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)