glre 0.14.0 → 0.16.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/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("reev"),r=require("refr");function t(e,r,t){var n=e.createShader(t);if(e.shaderSource(n,r),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS))return n;console.warn(e.getShaderInfoLog(n))}var n=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],i=performance.now(),o=0,a=0,u=e.event({vertex:"\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",fragment:"\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n",size:[0,0],mouse:[0,0],count:6,counter:0,init:function(i){var o=u.gl,a=u.vs||u.vert||u.vertex,f=u.fs||u.frag||u.fragment,c=t(o,a,o.VERTEX_SHADER),l=t(o,f,o.FRAGMENT_SHADER);6===u.count&&u.attribute({a_position:n}),r.frame((function(){return void u.render()||1})),u.pg=i?function(e,r,t,n){var i=e.createProgram();return e.attachShader(i,r),e.attachShader(i,t),e.transformFeedbackVaryings(i,n,e.SEPARATE_ATTRIBS),e.linkProgram(i),e.getProgramParameter(i,e.LINK_STATUS)?(e.useProgram(i),i):(console.warn(e.getProgramInfoLog(i)),null)}(o,c,l,i):function(e,r,t){var n=e.createProgram();return e.attachShader(n,r),e.attachShader(n,t),e.linkProgram(n),e.getProgramParameter(n,e.LINK_STATUS)?(e.useProgram(n),n):(console.log(e.getProgramInfoLog(n)),null)}(o,c,l),u.lastActiveUnit=0,u.activeUnit=e.nested((function(){return u.lastActiveUnit++})),u.location=e.nested((function(e,r){return void 0===r&&(r=!1),r?null==o?void 0:o.getAttribLocation(u.pg,e):null==o?void 0:o.getUniformLocation(u.pg,e)}))},render:function(){u.gl.useProgram(u.pg),u.frame.flush(),o=i,i=performance.now()/1e3,a=i-o,u.uniform({iTime:i,iPrevTime:o,iDeltaTime:a})},_uniform:function(e,r,t){void 0===r&&(r=0),void 0===t&&(t=!1);var n=function(e,r){void 0===r&&(r=!1);var t="number"==typeof e?0:null==e?void 0:e.length;return t?r?"uniformMatrix"+(t=Math.sqrt(t)<<0)+"fv":"uniform"+t+"fv":"uniform1f"}(r,t);u.frame((function(){var i=u.location(e);t?u.gl[n](i,!1,r):u.gl[n](i,r)}))},_attribute:function(e,r,t){u.frame((function(){var n=u.location(e,!0),i=function(e,r){if(r){var t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array(r),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),t}}(u.gl,r),o=function(e,r){if(r){var t=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(r),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),t}}(u.gl,t),a=function(e,r,t){t&&(e=Math.max.apply(Math,t)+1);var n=r.length/e;return n!==n<<0&&console.warn("Vertex Stride Error: count "+e+" is mismatch"),n<<0}(u.count,r,t);!function(e,r,t,n,i){e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,r,e.FLOAT,!1,0,0),i&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i)}(u.gl,a,n,i,o)}))},_texture:function(e,r){if("undefined"!=typeof window){var t=new Image;t.addEventListener("load",(function(e){return u.load(e,t)}),!1),Object.assign(t,{src:r,alt:e,crossOrigin:"anonymous"})}},resize:function(e,r,t){void 0===r&&(r=window.innerWidth),void 0===t&&(t=window.innerHeight),u.size[0]=u.el.width=r,u.size[1]=u.el.height=t,u.uniform("iResolution",u.size)},mousemove:function(e,r,t){void 0===r&&(r=e.clientX),void 0===t&&(t=e.clientY);var n=u.size,i=n[0],o=n[1];u.mouse[0]=(r-i/2)/(i/2),u.mouse[1]=-(t-o/2)/(o/2),u.uniform("iMouse",u.mouse)},load:function(e,r){u.frame((function(){var e=u.location(r.alt),t=u.activeUnit(r.alt),n=function(e,r){var t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),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),t}(u.gl,r);u.frame((function(){return function(e,r,t,n){e.uniform1i(r,t),e.activeTexture(e["TEXTURE"+t]),e.bindTexture(e.TEXTURE_2D,n)}(u.gl,e,t,n),!0}))}))},clear:function(e){void 0===e&&(e="COLOR_BUFFER_BIT"),u.gl.clear(u.gl[e])},viewport:function(e){var r;void 0===e&&(e=u.size),(r=u.gl).viewport.apply(r,[0,0].concat(e))},drawArrays:function(e){void 0===e&&(e="TRIANGLES"),u.gl.drawArrays(u.gl[e],0,u.count)},drawElements:function(e,r){void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),u.gl.drawElements(u.gl[e],u.count,u.gl[r],0)}});u.frame=r.queue(),u.texture=e.durable(u._texture),u.uniform=e.durable(u._uniform),u.attribute=e.durable(u._attribute),exports.default=u,exports.gl=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("reev"),r=require("refr");function t(e,r,t){var n=e.createShader(t);if(e.shaderSource(n,r),e.compileShader(n),e.getShaderParameter(n,e.COMPILE_STATUS))return n;throw"Could not compile glsl\n\n"+e.getShaderInfoLog(n)}var n=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],i=performance.now(),o=0,a=0,u=function(u){var f=e.event({vertex:"\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",fragment:"\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n",size:[0,0],mouse:[0,0],count:6,counter:0,init:function(){f(u);var i=f.gl,o=f.vs||f.vert||f.vertex,a=f.fs||f.frag||f.fragment,l=t(i,o,i.VERTEX_SHADER),c=t(i,a,i.FRAGMENT_SHADER);6===f.count&&f.attribute({a_position:n}),r.frame((function(){return void f.render()||1})),f.pg=f.varying?function(e,r,t,n){var i=e.createProgram();return e.attachShader(i,r),e.attachShader(i,t),e.transformFeedbackVaryings(i,n,e.SEPARATE_ATTRIBS),e.linkProgram(i),e.getProgramParameter(i,e.LINK_STATUS)?(e.useProgram(i),i):(console.warn(e.getProgramInfoLog(i)),null)}(i,l,c,f.varying):function(e,r,t){var n=e.createProgram();return e.attachShader(n,r),e.attachShader(n,t),e.linkProgram(n),e.getProgramParameter(n,e.LINK_STATUS)?(e.useProgram(n),n):(console.log(e.getProgramInfoLog(n)),null)}(i,l,c),f.lastActiveUnit=0,f.activeUnit=e.nested((function(){return f.lastActiveUnit++})),f.location=e.nested((function(e,r){return void 0===r&&(r=!1),r?null==i?void 0:i.getAttribLocation(f.pg,e):null==i?void 0:i.getUniformLocation(f.pg,e)}))},render:function(){f.gl.useProgram(f.pg),f.frame.flush(),o=i,i=performance.now()/1e3,a=i-o,f.uniform({iTime:i,iPrevTime:o,iDeltaTime:a})},_uniform:function(e,r,t){void 0===r&&(r=0),void 0===t&&(t=!1);var n=function(e,r){void 0===r&&(r=!1);var t="number"==typeof e?0:null==e?void 0:e.length;return t?r?"uniformMatrix"+(t=Math.sqrt(t)<<0)+"fv":"uniform"+t+"fv":"uniform1f"}(r,t);f.frame((function(){var i=f.location(e);t?f.gl[n](i,!1,r):f.gl[n](i,r)}))},_attribute:function(e,r,t){f.frame((function(){var n=f.location(e,!0),i=function(e,r){if(r){var t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array(r),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),t}}(f.gl,r),o=function(e,r){if(r){var t=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(r),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),t}}(f.gl,t),a=function(e,r,t){t&&(e=Math.max.apply(Math,t)+1);var n=r.length/e;return n!==n<<0&&console.warn("Vertex Stride Error: count "+e+" is mismatch"),n<<0}(f.count,r,t);!function(e,r,t,n,i){e.bindBuffer(e.ARRAY_BUFFER,n),e.enableVertexAttribArray(t),e.vertexAttribPointer(t,r,e.FLOAT,!1,0,0),i&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i)}(f.gl,a,n,i,o)}))},_texture:function(e,r,t){if(void 0===t&&(t="anonymous"),"undefined"!=typeof window){var n=new Image;n.addEventListener("load",(function(e){return f.load(e,n)}),!1),Object.assign(n,{src:r,alt:e,crossOrigin:t})}},resize:function(e,r,t){void 0===r&&(r=f.width||window.innerWidth),void 0===t&&(t=f.height||window.innerHeight),f.size[0]=f.el.width=r,f.size[1]=f.el.height=t,f.uniform("iResolution",f.size)},mousemove:function(e,r,t){void 0===r&&(r=e.clientX),void 0===t&&(t=e.clientY);var n=f.size,i=n[0],o=n[1],a=f.el.getBoundingClientRect(),u=a.top,l=a.left;f.mouse[0]=(r-u-i/2)/(i/2),f.mouse[1]=-(t-l-o/2)/(o/2),f.uniform("iMouse",f.mouse)},load:function(e,r){f.frame((function(){var e=f.location(r.alt),t=f.activeUnit(r.alt),n=function(e,r){var t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),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),t}(f.gl,r);f.frame((function(){return function(e,r,t,n){e.uniform1i(r,t),e.activeTexture(e["TEXTURE"+t]),e.bindTexture(e.TEXTURE_2D,n)}(f.gl,e,t,n),!0}))}))},clear:function(e){void 0===e&&(e="COLOR_BUFFER_BIT"),f.gl.clear(f.gl[e])},viewport:function(e){var r;void 0===e&&(e=f.size),(r=f.gl).viewport.apply(r,[0,0].concat(e))},drawArrays:function(e){void 0===e&&(e="TRIANGLES"),f.gl.drawArrays(f.gl[e],0,f.count)},drawElements:function(e,r){void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),e=f.gl[e],r=f.gl[r],f.gl.drawElements(e,f.count,r,0)}});return f.frame=r.queue(),f.texture=e.durable(f._texture),f.uniform=e.durable(f._uniform),f.attribute=e.durable(f._attribute),f},f=u(),l=self;exports.createGL=u,exports.createTF=function(e,r){void 0===r&&(r=f);var t=u();return t({mount:function(){t(e),t.el=r.el,t.gl=r.gl,t.frame=r.frame,t.init(),r({resize:t.resize,mousemove:t.mousemove})},clean:function(){t(e),r({resize:t.resize,mousemove:t.mousemove})}}),t},exports.default=l,exports.gl=f;
package/index.develop.js CHANGED
@@ -1 +1 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("reev"),require("refr")):"function"==typeof define&&define.amd?define(["exports","reev","refr"],r):r(((e="undefined"!=typeof globalThis?globalThis:e||self).index=e.index||{},e.index.ts={}),e.reev,e.refr)}(this,(function(e,r,n){"use strict";function t(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))}var i=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],o=performance.now(),a=0,u=0,f=r.event({vertex:"\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",fragment:"\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n",size:[0,0],mouse:[0,0],count:6,counter:0,init:function(e){var o=f.gl,a=f.vs||f.vert||f.vertex,u=f.fs||f.frag||f.fragment,l=t(o,a,o.VERTEX_SHADER),c=t(o,u,o.FRAGMENT_SHADER);6===f.count&&f.attribute({a_position:i}),n.frame((function(){return void f.render()||1})),f.pg=e?function(e,r,n,t){var i=e.createProgram();return e.attachShader(i,r),e.attachShader(i,n),e.transformFeedbackVaryings(i,t,e.SEPARATE_ATTRIBS),e.linkProgram(i),e.getProgramParameter(i,e.LINK_STATUS)?(e.useProgram(i),i):(console.warn(e.getProgramInfoLog(i)),null)}(o,l,c,e):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)}(o,l,c),f.lastActiveUnit=0,f.activeUnit=r.nested((function(){return f.lastActiveUnit++})),f.location=r.nested((function(e,r){return void 0===r&&(r=!1),r?null==o?void 0:o.getAttribLocation(f.pg,e):null==o?void 0:o.getUniformLocation(f.pg,e)}))},render:function(){f.gl.useProgram(f.pg),f.frame.flush(),a=o,o=performance.now()/1e3,u=o-a,f.uniform({iTime:o,iPrevTime:a,iDeltaTime:u})},_uniform:function(e,r,n){void 0===r&&(r=0),void 0===n&&(n=!1);var t=function(e,r){void 0===r&&(r=!1);var n="number"==typeof e?0:null==e?void 0:e.length;return n?r?"uniformMatrix"+(n=Math.sqrt(n)<<0)+"fv":"uniform"+n+"fv":"uniform1f"}(r,n);f.frame((function(){var i=f.location(e);n?f.gl[t](i,!1,r):f.gl[t](i,r)}))},_attribute:function(e,r,n){f.frame((function(){var t=f.location(e,!0),i=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}}(f.gl,r),o=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}}(f.gl,n),a=function(e,r,n){n&&(e=Math.max.apply(Math,n)+1);var t=r.length/e;return t!==t<<0&&console.warn("Vertex Stride Error: count "+e+" is mismatch"),t<<0}(f.count,r,n);!function(e,r,n,t,i){e.bindBuffer(e.ARRAY_BUFFER,t),e.enableVertexAttribArray(n),e.vertexAttribPointer(n,r,e.FLOAT,!1,0,0),i&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i)}(f.gl,a,t,i,o)}))},_texture:function(e,r){if("undefined"!=typeof window){var n=new Image;n.addEventListener("load",(function(e){return f.load(e,n)}),!1),Object.assign(n,{src:r,alt:e,crossOrigin:"anonymous"})}},resize:function(e,r,n){void 0===r&&(r=window.innerWidth),void 0===n&&(n=window.innerHeight),f.size[0]=f.el.width=r,f.size[1]=f.el.height=n,f.uniform("iResolution",f.size)},mousemove:function(e,r,n){void 0===r&&(r=e.clientX),void 0===n&&(n=e.clientY);var t=f.size,i=t[0],o=t[1];f.mouse[0]=(r-i/2)/(i/2),f.mouse[1]=-(n-o/2)/(o/2),f.uniform("iMouse",f.mouse)},load:function(e,r){f.frame((function(){var e=f.location(r.alt),n=f.activeUnit(r.alt),t=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}(f.gl,r);f.frame((function(){return function(e,r,n,t){e.uniform1i(r,n),e.activeTexture(e["TEXTURE"+n]),e.bindTexture(e.TEXTURE_2D,t)}(f.gl,e,n,t),!0}))}))},clear:function(e){void 0===e&&(e="COLOR_BUFFER_BIT"),f.gl.clear(f.gl[e])},viewport:function(e){var r;void 0===e&&(e=f.size),(r=f.gl).viewport.apply(r,[0,0].concat(e))},drawArrays:function(e){void 0===e&&(e="TRIANGLES"),f.gl.drawArrays(f.gl[e],0,f.count)},drawElements:function(e,r){void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),f.gl.drawElements(f.gl[e],f.count,f.gl[r],0)}});f.frame=n.queue(),f.texture=r.durable(f._texture),f.uniform=r.durable(f._uniform),f.attribute=r.durable(f._attribute),e.default=f,e.gl=f,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("reev"),require("refr")):"function"==typeof define&&define.amd?define(["exports","reev","refr"],r):r(((e="undefined"!=typeof globalThis?globalThis:e||self).index=e.index||{},e.index.ts={}),e.reev,e.refr)}(this,(function(e,r,n){"use strict";function t(e,r,n){var t=e.createShader(n);if(e.shaderSource(t,r),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;throw"Could not compile glsl\n\n"+e.getShaderInfoLog(t)}var i=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],o=performance.now(),a=0,u=0,f=function(e){var f=r.event({vertex:"\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",fragment:"\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n",size:[0,0],mouse:[0,0],count:6,counter:0,init:function(){f(e);var o=f.gl,a=f.vs||f.vert||f.vertex,u=f.fs||f.frag||f.fragment,l=t(o,a,o.VERTEX_SHADER),c=t(o,u,o.FRAGMENT_SHADER);6===f.count&&f.attribute({a_position:i}),n.frame((function(){return void f.render()||1})),f.pg=f.varying?function(e,r,n,t){var i=e.createProgram();return e.attachShader(i,r),e.attachShader(i,n),e.transformFeedbackVaryings(i,t,e.SEPARATE_ATTRIBS),e.linkProgram(i),e.getProgramParameter(i,e.LINK_STATUS)?(e.useProgram(i),i):(console.warn(e.getProgramInfoLog(i)),null)}(o,l,c,f.varying):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)}(o,l,c),f.lastActiveUnit=0,f.activeUnit=r.nested((function(){return f.lastActiveUnit++})),f.location=r.nested((function(e,r){return void 0===r&&(r=!1),r?null==o?void 0:o.getAttribLocation(f.pg,e):null==o?void 0:o.getUniformLocation(f.pg,e)}))},render:function(){f.gl.useProgram(f.pg),f.frame.flush(),a=o,o=performance.now()/1e3,u=o-a,f.uniform({iTime:o,iPrevTime:a,iDeltaTime:u})},_uniform:function(e,r,n){void 0===r&&(r=0),void 0===n&&(n=!1);var t=function(e,r){void 0===r&&(r=!1);var n="number"==typeof e?0:null==e?void 0:e.length;return n?r?"uniformMatrix"+(n=Math.sqrt(n)<<0)+"fv":"uniform"+n+"fv":"uniform1f"}(r,n);f.frame((function(){var i=f.location(e);n?f.gl[t](i,!1,r):f.gl[t](i,r)}))},_attribute:function(e,r,n){f.frame((function(){var t=f.location(e,!0),i=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}}(f.gl,r),o=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}}(f.gl,n),a=function(e,r,n){n&&(e=Math.max.apply(Math,n)+1);var t=r.length/e;return t!==t<<0&&console.warn("Vertex Stride Error: count "+e+" is mismatch"),t<<0}(f.count,r,n);!function(e,r,n,t,i){e.bindBuffer(e.ARRAY_BUFFER,t),e.enableVertexAttribArray(n),e.vertexAttribPointer(n,r,e.FLOAT,!1,0,0),i&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i)}(f.gl,a,t,i,o)}))},_texture:function(e,r,n){if(void 0===n&&(n="anonymous"),"undefined"!=typeof window){var t=new Image;t.addEventListener("load",(function(e){return f.load(e,t)}),!1),Object.assign(t,{src:r,alt:e,crossOrigin:n})}},resize:function(e,r,n){void 0===r&&(r=f.width||window.innerWidth),void 0===n&&(n=f.height||window.innerHeight),f.size[0]=f.el.width=r,f.size[1]=f.el.height=n,f.uniform("iResolution",f.size)},mousemove:function(e,r,n){void 0===r&&(r=e.clientX),void 0===n&&(n=e.clientY);var t=f.size,i=t[0],o=t[1],a=f.el.getBoundingClientRect(),u=a.top,l=a.left;f.mouse[0]=(r-u-i/2)/(i/2),f.mouse[1]=-(n-l-o/2)/(o/2),f.uniform("iMouse",f.mouse)},load:function(e,r){f.frame((function(){var e=f.location(r.alt),n=f.activeUnit(r.alt),t=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}(f.gl,r);f.frame((function(){return function(e,r,n,t){e.uniform1i(r,n),e.activeTexture(e["TEXTURE"+n]),e.bindTexture(e.TEXTURE_2D,t)}(f.gl,e,n,t),!0}))}))},clear:function(e){void 0===e&&(e="COLOR_BUFFER_BIT"),f.gl.clear(f.gl[e])},viewport:function(e){var r;void 0===e&&(e=f.size),(r=f.gl).viewport.apply(r,[0,0].concat(e))},drawArrays:function(e){void 0===e&&(e="TRIANGLES"),f.gl.drawArrays(f.gl[e],0,f.count)},drawElements:function(e,r){void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),e=f.gl[e],r=f.gl[r],f.gl.drawElements(e,f.count,r,0)}});return f.frame=n.queue(),f.texture=r.durable(f._texture),f.uniform=r.durable(f._uniform),f.attribute=r.durable(f._attribute),f},l=f(),c=self;e.createGL=f,e.createTF=function(e,r){void 0===r&&(r=l);var n=f();return n({mount:function(){n(e),n.el=r.el,n.gl=r.gl,n.frame=r.frame,n.init(),r({resize:n.resize,mousemove:n.mousemove})},clean:function(){n(e),r({resize:n.resize,mousemove:n.mousemove})}}),n},e.default=c,e.gl=l,Object.defineProperty(e,"__esModule",{value:!0})}));
package/index.js CHANGED
@@ -1 +1 @@
1
- import{event as r,nested as e,durable as n}from"reev";import{frame as t,queue as i}from"refr";function o(r,e,n){var t=r.createShader(n);if(r.shaderSource(t,e),r.compileShader(t),r.getShaderParameter(t,r.COMPILE_STATUS))return t;console.warn(r.getShaderInfoLog(t))}var a=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],u=performance.now(),f=0,c=0,l=r({vertex:"\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",fragment:"\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n",size:[0,0],mouse:[0,0],count:6,counter:0,init:function(r){var n=l.gl,i=l.vs||l.vert||l.vertex,u=l.fs||l.frag||l.fragment,f=o(n,i,n.VERTEX_SHADER),c=o(n,u,n.FRAGMENT_SHADER);6===l.count&&l.attribute({a_position:a}),t((function(){return void l.render()||1})),l.pg=r?function(r,e,n,t){var i=r.createProgram();return r.attachShader(i,e),r.attachShader(i,n),r.transformFeedbackVaryings(i,t,r.SEPARATE_ATTRIBS),r.linkProgram(i),r.getProgramParameter(i,r.LINK_STATUS)?(r.useProgram(i),i):(console.warn(r.getProgramInfoLog(i)),null)}(n,f,c,r):function(r,e,n){var t=r.createProgram();return r.attachShader(t,e),r.attachShader(t,n),r.linkProgram(t),r.getProgramParameter(t,r.LINK_STATUS)?(r.useProgram(t),t):(console.log(r.getProgramInfoLog(t)),null)}(n,f,c),l.lastActiveUnit=0,l.activeUnit=e((function(){return l.lastActiveUnit++})),l.location=e((function(r,e){return void 0===e&&(e=!1),e?null==n?void 0:n.getAttribLocation(l.pg,r):null==n?void 0:n.getUniformLocation(l.pg,r)}))},render:function(){l.gl.useProgram(l.pg),l.frame.flush(),f=u,u=performance.now()/1e3,c=u-f,l.uniform({iTime:u,iPrevTime:f,iDeltaTime:c})},_uniform:function(r,e,n){void 0===e&&(e=0),void 0===n&&(n=!1);var t=function(r,e){void 0===e&&(e=!1);var n="number"==typeof r?0:null==r?void 0:r.length;return n?e?"uniformMatrix"+(n=Math.sqrt(n)<<0)+"fv":"uniform"+n+"fv":"uniform1f"}(e,n);l.frame((function(){var i=l.location(r);n?l.gl[t](i,!1,e):l.gl[t](i,e)}))},_attribute:function(r,e,n){l.frame((function(){var t=l.location(r,!0),i=function(r,e){if(e){var n=r.createBuffer();return r.bindBuffer(r.ARRAY_BUFFER,n),r.bufferData(r.ARRAY_BUFFER,new Float32Array(e),r.STATIC_DRAW),r.bindBuffer(r.ARRAY_BUFFER,null),n}}(l.gl,e),o=function(r,e){if(e){var n=r.createBuffer();return r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,n),r.bufferData(r.ELEMENT_ARRAY_BUFFER,new Int16Array(e),r.STATIC_DRAW),r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,null),n}}(l.gl,n),a=function(r,e,n){n&&(r=Math.max.apply(Math,n)+1);var t=e.length/r;return t!==t<<0&&console.warn("Vertex Stride Error: count "+r+" is mismatch"),t<<0}(l.count,e,n);!function(r,e,n,t,i){r.bindBuffer(r.ARRAY_BUFFER,t),r.enableVertexAttribArray(n),r.vertexAttribPointer(n,e,r.FLOAT,!1,0,0),i&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,i)}(l.gl,a,t,i,o)}))},_texture:function(r,e){if("undefined"!=typeof window){var n=new Image;n.addEventListener("load",(function(r){return l.load(r,n)}),!1),Object.assign(n,{src:e,alt:r,crossOrigin:"anonymous"})}},resize:function(r,e,n){void 0===e&&(e=window.innerWidth),void 0===n&&(n=window.innerHeight),l.size[0]=l.el.width=e,l.size[1]=l.el.height=n,l.uniform("iResolution",l.size)},mousemove:function(r,e,n){void 0===e&&(e=r.clientX),void 0===n&&(n=r.clientY);var t=l.size,i=t[0],o=t[1];l.mouse[0]=(e-i/2)/(i/2),l.mouse[1]=-(n-o/2)/(o/2),l.uniform("iMouse",l.mouse)},load:function(r,e){l.frame((function(){var r=l.location(e.alt),n=l.activeUnit(e.alt),t=function(r,e){var n=r.createTexture();return r.bindTexture(r.TEXTURE_2D,n),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e),r.generateMipmap(r.TEXTURE_2D),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.bindTexture(r.TEXTURE_2D,null),n}(l.gl,e);l.frame((function(){return function(r,e,n,t){r.uniform1i(e,n),r.activeTexture(r["TEXTURE"+n]),r.bindTexture(r.TEXTURE_2D,t)}(l.gl,r,n,t),!0}))}))},clear:function(r){void 0===r&&(r="COLOR_BUFFER_BIT"),l.gl.clear(l.gl[r])},viewport:function(r){var e;void 0===r&&(r=l.size),(e=l.gl).viewport.apply(e,[0,0].concat(r))},drawArrays:function(r){void 0===r&&(r="TRIANGLES"),l.gl.drawArrays(l.gl[r],0,l.count)},drawElements:function(r,e){void 0===r&&(r="TRIANGLES"),void 0===e&&(e="UNSIGNED_SHORT"),l.gl.drawElements(l.gl[r],l.count,l.gl[e],0)}});l.frame=i(),l.texture=n(l._texture),l.uniform=n(l._uniform),l.attribute=n(l._attribute);export{l as default,l as gl};
1
+ import{event as e,nested as r,durable as n}from"reev";import{frame as t,queue as i}from"refr";function o(e,r,n){var t=e.createShader(n);if(e.shaderSource(t,r),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;throw"Could not compile glsl\n\n"+e.getShaderInfoLog(t)}var a=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],u=performance.now(),f=0,l=0,c=function(c){var m=e({vertex:"\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",fragment:"\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n",size:[0,0],mouse:[0,0],count:6,counter:0,init:function(){m(c);var e=m.gl,n=m.vs||m.vert||m.vertex,i=m.fs||m.frag||m.fragment,u=o(e,n,e.VERTEX_SHADER),f=o(e,i,e.FRAGMENT_SHADER);6===m.count&&m.attribute({a_position:a}),t((function(){return void m.render()||1})),m.pg=m.varying?function(e,r,n,t){var i=e.createProgram();return e.attachShader(i,r),e.attachShader(i,n),e.transformFeedbackVaryings(i,t,e.SEPARATE_ATTRIBS),e.linkProgram(i),e.getProgramParameter(i,e.LINK_STATUS)?(e.useProgram(i),i):(console.warn(e.getProgramInfoLog(i)),null)}(e,u,f,m.varying):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)}(e,u,f),m.lastActiveUnit=0,m.activeUnit=r((function(){return m.lastActiveUnit++})),m.location=r((function(r,n){return void 0===n&&(n=!1),n?null==e?void 0:e.getAttribLocation(m.pg,r):null==e?void 0:e.getUniformLocation(m.pg,r)}))},render:function(){m.gl.useProgram(m.pg),m.frame.flush(),f=u,u=performance.now()/1e3,l=u-f,m.uniform({iTime:u,iPrevTime:f,iDeltaTime:l})},_uniform:function(e,r,n){void 0===r&&(r=0),void 0===n&&(n=!1);var t=function(e,r){void 0===r&&(r=!1);var n="number"==typeof e?0:null==e?void 0:e.length;return n?r?"uniformMatrix"+(n=Math.sqrt(n)<<0)+"fv":"uniform"+n+"fv":"uniform1f"}(r,n);m.frame((function(){var i=m.location(e);n?m.gl[t](i,!1,r):m.gl[t](i,r)}))},_attribute:function(e,r,n){m.frame((function(){var t=m.location(e,!0),i=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}}(m.gl,r),o=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}}(m.gl,n),a=function(e,r,n){n&&(e=Math.max.apply(Math,n)+1);var t=r.length/e;return t!==t<<0&&console.warn("Vertex Stride Error: count "+e+" is mismatch"),t<<0}(m.count,r,n);!function(e,r,n,t,i){e.bindBuffer(e.ARRAY_BUFFER,t),e.enableVertexAttribArray(n),e.vertexAttribPointer(n,r,e.FLOAT,!1,0,0),i&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,i)}(m.gl,a,t,i,o)}))},_texture:function(e,r,n){if(void 0===n&&(n="anonymous"),"undefined"!=typeof window){var t=new Image;t.addEventListener("load",(function(e){return m.load(e,t)}),!1),Object.assign(t,{src:r,alt:e,crossOrigin:n})}},resize:function(e,r,n){void 0===r&&(r=m.width||window.innerWidth),void 0===n&&(n=m.height||window.innerHeight),m.size[0]=m.el.width=r,m.size[1]=m.el.height=n,m.uniform("iResolution",m.size)},mousemove:function(e,r,n){void 0===r&&(r=e.clientX),void 0===n&&(n=e.clientY);var t=m.size,i=t[0],o=t[1],a=m.el.getBoundingClientRect(),u=a.top,f=a.left;m.mouse[0]=(r-u-i/2)/(i/2),m.mouse[1]=-(n-f-o/2)/(o/2),m.uniform("iMouse",m.mouse)},load:function(e,r){m.frame((function(){var e=m.location(r.alt),n=m.activeUnit(r.alt),t=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}(m.gl,r);m.frame((function(){return function(e,r,n,t){e.uniform1i(r,n),e.activeTexture(e["TEXTURE"+n]),e.bindTexture(e.TEXTURE_2D,t)}(m.gl,e,n,t),!0}))}))},clear:function(e){void 0===e&&(e="COLOR_BUFFER_BIT"),m.gl.clear(m.gl[e])},viewport:function(e){var r;void 0===e&&(e=m.size),(r=m.gl).viewport.apply(r,[0,0].concat(e))},drawArrays:function(e){void 0===e&&(e="TRIANGLES"),m.gl.drawArrays(m.gl[e],0,m.count)},drawElements:function(e,r){void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),e=m.gl[e],r=m.gl[r],m.gl.drawElements(e,m.count,r,0)}});return m.frame=i(),m.texture=n(m._texture),m.uniform=n(m._uniform),m.attribute=n(m._attribute),m},m=c(),E=function(e,r){void 0===r&&(r=m);var n=c();return n({mount:function(){n(e),n.el=r.el,n.gl=r.gl,n.frame=r.frame,n.init(),r({resize:n.resize,mousemove:n.mousemove})},clean:function(){n(e),r({resize:n.resize,mousemove:n.mousemove})}}),n},g=self;export{c as createGL,E as createTF,g as default,m as gl};
package/index.ts CHANGED
@@ -1,158 +1,171 @@
1
- import { event, durable, nested } from 'reev'
2
- import { queue, frame } from 'refr'
3
- import {
4
- uniformType,
5
- vertexStride,
6
- createProgram,
7
- createTfProgram,
8
- createShader,
9
- createAttribute,
10
- createTexture,
11
- createVbo,
12
- createIbo,
13
- activeTexture,
14
- } from './utils'
15
- import type { GL } from './types'
16
-
17
- const a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]
18
-
19
- const _defaultVertex = `
20
- attribute vec4 a_position;
21
- void main() {
22
- gl_Position = a_position;
23
- }
24
- `
25
-
26
- const _defaultFragment = `
27
- precision mediump float;
28
- uniform vec2 iResolution;
29
- void main() {
30
- gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
31
- }
32
- `
33
-
34
- let iTime = performance.now(),
35
- iPrevTime = 0,
36
- iDeltaTime = 0
37
-
38
- const self = event<Partial<GL>>({
39
- vertex: _defaultVertex,
40
- fragment: _defaultFragment,
41
- size: [0, 0],
42
- mouse: [0, 0],
43
- count: 6,
44
- counter: 0,
45
- init(varying?: string[]) {
46
- const gl = self.gl
47
- const _v = self.vs || self.vert || self.vertex
48
- const _f = self.fs || self.frag || self.fragment
49
- const vs = createShader(gl, _v, gl.VERTEX_SHADER)
50
- const fs = createShader(gl, _f, gl.FRAGMENT_SHADER)
51
- if (self.count === 6) self.attribute({ a_position })
52
- frame(() => void self.render() || 1)
53
- self.pg = varying
54
- ? createTfProgram(gl, vs, fs, varying)
55
- : createProgram(gl, vs, fs)
56
- self.lastActiveUnit = 0
57
- self.activeUnit = nested(() => self.lastActiveUnit++)
58
- self.location = nested((key, isAttribute = false) => {
59
- return isAttribute
60
- ? gl?.getAttribLocation(self.pg, key)
61
- : gl?.getUniformLocation(self.pg, key)
62
- })
63
- },
64
- render() {
65
- self.gl.useProgram(self.pg)
66
- self.frame.flush()
67
- iPrevTime = iTime
68
- iTime = performance.now() / 1000
69
- iDeltaTime = iTime - iPrevTime
70
- self.uniform({ iTime, iPrevTime, iDeltaTime })
71
- },
72
- _uniform(key: string, value = 0, isMatrix = false) {
73
- const type = uniformType(value, isMatrix)
74
- self.frame(() => {
75
- const loc = self.location(key)
76
- if (isMatrix) self.gl[type](loc, false, value)
77
- else self.gl[type](loc, value)
78
- })
79
- },
80
- _attribute(key: string, value: number[], iboValue?: number[]) {
81
- self.frame(() => {
82
- const loc = self.location(key, true)
83
- const vbo = createVbo(self.gl, value)
84
- const ibo = createIbo(self.gl, iboValue)
85
- const stride = vertexStride(self.count, value, iboValue)
86
- createAttribute(self.gl, stride, loc, vbo, ibo)
87
- })
88
- },
89
- _texture(key: string, src: string) {
90
- if (typeof window === 'undefined') return
91
- const image = new Image()
92
- image.addEventListener(
93
- 'load',
94
- (_) => self.load(_, image),
95
- false
96
- )
97
- Object.assign(image, {
98
- src,
99
- alt: key,
100
- crossOrigin: 'anonymous',
101
- })
102
- },
103
- resize(
104
- _e: any,
105
- width = window.innerWidth,
106
- height = window.innerHeight
107
- ) {
108
- self.size[0] = self.el.width = width
109
- self.size[1] = self.el.height = height
110
- self.uniform('iResolution', self.size)
111
- },
112
- mousemove(_e: any, x = _e.clientX, y = _e.clientY) {
113
- const [w, h] = self.size
114
- self.mouse[0] = (x - w / 2) / (w / 2)
115
- self.mouse[1] = -(y - h / 2) / (h / 2)
116
- self.uniform('iMouse', self.mouse)
117
- },
118
- load(_: any, image: any) {
119
- self.frame(() => {
120
- const loc = self.location(image.alt)
121
- const unit = self.activeUnit(image.alt)
122
- const texture = createTexture(self.gl, image)
123
- self.frame(() => {
124
- activeTexture(self.gl, loc, unit, texture)
125
- return true
126
- })
127
- })
128
- },
129
- clear(key = 'COLOR_BUFFER_BIT') {
130
- self.gl.clear(self.gl[key])
131
- },
132
- viewport(size: number[] = self.size) {
133
- self.gl.viewport(0, 0, ...size)
134
- },
135
- drawArrays(mode = 'TRIANGLES') {
136
- self.gl.drawArrays(self.gl[mode], 0, self.count)
137
- },
138
- drawElements(mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') {
139
- self.gl.drawElements(
140
- self.gl[mode],
141
- self.count,
142
- self.gl[type],
143
- 0
144
- )
145
- },
146
- }) as GL
147
-
148
- self.frame = queue()
149
- self.texture = durable(self._texture)
150
- self.uniform = durable(self._uniform)
151
- self.attribute = durable(self._attribute)
152
-
153
- // @TODO
154
- // export const clone = gl.clone()
155
-
156
- export { self as gl }
157
-
158
- export default self
1
+ import { event, durable, nested } from 'reev'
2
+ import { queue, frame } from 'refr'
3
+ import {
4
+ uniformType,
5
+ vertexStride,
6
+ createProgram,
7
+ createTfProgram,
8
+ createShader,
9
+ createAttribute,
10
+ createTexture,
11
+ createVbo,
12
+ createIbo,
13
+ activeTexture,
14
+ } from './utils'
15
+ import type { GL } from './types'
16
+
17
+ const a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]
18
+
19
+ const _defaultVertex = `
20
+ attribute vec4 a_position;
21
+ void main() {
22
+ gl_Position = a_position;
23
+ }
24
+ `
25
+
26
+ const _defaultFragment = `
27
+ precision mediump float;
28
+ uniform vec2 iResolution;
29
+ void main() {
30
+ gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);
31
+ }
32
+ `
33
+
34
+ let iTime = performance.now(),
35
+ iPrevTime = 0,
36
+ iDeltaTime = 0
37
+
38
+ export const createGL = (props?: Partial<GL>) => {
39
+ const self = event<Partial<GL>>({
40
+ vertex: _defaultVertex,
41
+ fragment: _defaultFragment,
42
+ size: [0, 0],
43
+ mouse: [0, 0],
44
+ count: 6,
45
+ counter: 0,
46
+ init() {
47
+ self(props)
48
+ const gl = self.gl
49
+ const _v = self.vs || self.vert || self.vertex
50
+ const _f = self.fs || self.frag || self.fragment
51
+ const vs = createShader(gl, _v, gl.VERTEX_SHADER)
52
+ const fs = createShader(gl, _f, gl.FRAGMENT_SHADER)
53
+ if (self.count === 6) self.attribute({ a_position })
54
+ frame(() => void self.render() || 1)
55
+ self.pg = self.varying
56
+ ? createTfProgram(gl, vs, fs, self.varying)
57
+ : createProgram(gl, vs, fs)
58
+ self.lastActiveUnit = 0
59
+ self.activeUnit = nested(() => self.lastActiveUnit++)
60
+ self.location = nested((key, isAttribute = false) => {
61
+ return isAttribute
62
+ ? gl?.getAttribLocation(self.pg, key)
63
+ : gl?.getUniformLocation(self.pg, key)
64
+ })
65
+ },
66
+ render() {
67
+ self.gl.useProgram(self.pg)
68
+ self.frame.flush()
69
+ iPrevTime = iTime
70
+ iTime = performance.now() / 1000
71
+ iDeltaTime = iTime - iPrevTime
72
+ self.uniform({ iTime, iPrevTime, iDeltaTime })
73
+ },
74
+ _uniform(key: string, value = 0, isMatrix = false) {
75
+ const type = uniformType(value, isMatrix)
76
+ self.frame(() => {
77
+ const loc = self.location(key)
78
+ if (isMatrix) self.gl[type](loc, false, value)
79
+ else self.gl[type](loc, value)
80
+ })
81
+ },
82
+ _attribute(key: string, value: number[], iboValue?: number[]) {
83
+ self.frame(() => {
84
+ const loc = self.location(key, true)
85
+ const vbo = createVbo(self.gl, value)
86
+ const ibo = createIbo(self.gl, iboValue)
87
+ const n = self.count
88
+ const stride = vertexStride(n, value, iboValue)
89
+ createAttribute(self.gl, stride, loc, vbo, ibo)
90
+ })
91
+ },
92
+ _texture(alt: string, src: string, crossOrigin = 'anonymous') {
93
+ if (typeof window === 'undefined') return
94
+ const image = new Image()
95
+ const callback = (_: any) => self.load(_, image)
96
+ image.addEventListener('load', callback, false)
97
+ Object.assign(image, { src, alt, crossOrigin })
98
+ },
99
+ resize(
100
+ _e: any,
101
+ width = self.width || window.innerWidth,
102
+ height = self.height || window.innerHeight
103
+ ) {
104
+ self.size[0] = self.el.width = width
105
+ self.size[1] = self.el.height = height
106
+ self.uniform('iResolution', self.size)
107
+ },
108
+ mousemove(_e: any, x = _e.clientX, y = _e.clientY) {
109
+ const [w, h] = self.size
110
+ const { top, left } = self.el.getBoundingClientRect()
111
+ self.mouse[0] = (x - top - w / 2) / (w / 2)
112
+ self.mouse[1] = -(y - left - h / 2) / (h / 2)
113
+ self.uniform('iMouse', self.mouse)
114
+ },
115
+ load(_: any, image: any) {
116
+ self.frame(() => {
117
+ const loc = self.location(image.alt)
118
+ const unit = self.activeUnit(image.alt)
119
+ const tex = createTexture(self.gl, image)
120
+ self.frame(() => {
121
+ activeTexture(self.gl, loc, unit, tex)
122
+ return true
123
+ })
124
+ })
125
+ },
126
+ clear(key = 'COLOR_BUFFER_BIT') {
127
+ self.gl.clear(self.gl[key])
128
+ },
129
+ viewport(size: number[] = self.size) {
130
+ self.gl.viewport(0, 0, ...size)
131
+ },
132
+ drawArrays(mode = 'TRIANGLES') {
133
+ self.gl.drawArrays(self.gl[mode], 0, self.count)
134
+ },
135
+ drawElements(mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') {
136
+ mode = self.gl[mode]
137
+ type = self.gl[type]
138
+ self.gl.drawElements(mode, self.count, type, 0)
139
+ },
140
+ }) as GL
141
+
142
+ self.frame = queue()
143
+ self.texture = durable(self._texture)
144
+ self.uniform = durable(self._uniform)
145
+ self.attribute = durable(self._attribute)
146
+
147
+ return self
148
+ }
149
+
150
+ export const gl = createGL()
151
+
152
+ export const createTF = (props?: Partial<GL>, self = gl) => {
153
+ const tf = createGL()
154
+ tf({
155
+ mount() {
156
+ tf(props)
157
+ tf.el = self.el
158
+ tf.gl = self.gl
159
+ tf.frame = self.frame
160
+ tf.init()
161
+ self({ resize: tf.resize, mousemove: tf.mousemove })
162
+ },
163
+ clean() {
164
+ tf(props)
165
+ self({ resize: tf.resize, mousemove: tf.mousemove })
166
+ },
167
+ })
168
+ return tf
169
+ }
170
+
171
+ export default self
package/native.ts CHANGED
@@ -1,64 +1,64 @@
1
- import { useEffect, useMemo } from 'react'
2
- import { Dimensions } from 'react-native'
3
- import { useMutable } from 'reev/react'
4
- import { gl } from './index'
5
- import { frame } from 'refr'
6
- import type { GL } from './types'
7
- import type { Fun } from 'refr'
8
-
9
- export const useGLEvent = <T>(props: Partial<GL & T> = {}, self = gl) => {
10
- const memo = useMutable(props) as Partial<GL>
11
- return useMemo(() => self(memo), [])
12
- }
13
-
14
- export const useGL = (props: Partial<GL> = {}, self = gl) => {
15
- const memo = useMutable(props) as Partial<GL>
16
- return useGLEvent({
17
- ref(gl: any) {
18
- self(memo)
19
- self.el = {}
20
- self.gl = gl
21
- self.mount()
22
- },
23
- mount() {
24
- const {
25
- drawingBufferWidth: width,
26
- drawingBufferHeight: height,
27
- } = self.gl
28
- self.size = [width, height]
29
- self.init()
30
- self.resize(void 0, width, height)
31
- Dimensions.addEventListener('change', self.change)
32
- frame.start()
33
- },
34
- clean() {
35
- frame.cancel()
36
- },
37
- change() {
38
- const {
39
- drawingBufferWidth: width,
40
- drawingBufferHeight: height,
41
- } = self.gl
42
- self.resize(void 0, width, height)
43
- },
44
- })
45
- }
46
-
47
- export function useTexture(props: any, self = gl) {
48
- return self.texture(props)
49
- }
50
-
51
- export function useAttribute(props: any, self = gl) {
52
- return self.attribute(props)
53
- }
54
-
55
- export function useUniform(props: any, self = gl) {
56
- return self.uniform(props)
57
- }
58
-
59
- export function useFrame(fun: Fun, self = gl) {
60
- const ref = useMutable(fun)
61
- useEffect(() => self.frame(fun), [])
62
- useEffect(() => () => self.frame(ref), [])
63
- return self
64
- }
1
+ import { useEffect, useMemo } from 'react'
2
+ import { Dimensions } from 'react-native'
3
+ import { useMutable } from 'reev/react'
4
+ import { gl, createTF } from './index'
5
+ import { frame } from 'refr'
6
+ import type { GL } from './types'
7
+ import type { Fun } from 'refr'
8
+
9
+ export const useGL = (props: Partial<GL> = {}, self = gl) => {
10
+ const change = () => {
11
+ self.resize(
12
+ void 0,
13
+ self.gl.drawingBufferWidth,
14
+ self.gl.drawingBufferHeight
15
+ )
16
+ }
17
+ const memo1 = useMutable(props) as Partial<GL>
18
+ const memo2 = useMutable({
19
+ ref(gl: any) {
20
+ self.el = {}
21
+ self.gl = gl
22
+ self.mount()
23
+ },
24
+ mount() {
25
+ self.init()
26
+ change()
27
+ frame.start()
28
+ Dimensions.addEventListener('change', change)
29
+ },
30
+ clean() {
31
+ self(memo2)(memo1)
32
+ frame.cancel()
33
+ },
34
+ }) as Partial<GL>
35
+
36
+ useEffect(() => self.clean, [self])
37
+
38
+ return useMemo(() => self(memo2)(memo1), [self, memo2, memo1])
39
+ }
40
+ export const useTF = (props: Partial<GL>, self = gl) => {
41
+ const memo = useMutable(props) as Partial<GL>
42
+ const tf = useMemo(() => createTF(memo, self), [memo, self])
43
+ useEffect(() => void tf.mount() || tf.clean, [self])
44
+ return tf
45
+ }
46
+
47
+ export function useTexture(props: any, self = gl) {
48
+ return self.texture(props)
49
+ }
50
+
51
+ export function useAttribute(props: any, self = gl) {
52
+ return self.attribute(props)
53
+ }
54
+
55
+ export function useUniform(props: any, self = gl) {
56
+ return self.uniform(props)
57
+ }
58
+
59
+ export function useFrame(fun: Fun, self = gl) {
60
+ const ref = useMutable(fun)
61
+ useEffect(() => self.frame(fun), [])
62
+ useEffect(() => () => self.frame(ref), [])
63
+ return self
64
+ }