glre 0.15.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 +1 -1
- package/index.develop.js +1 -1
- package/index.js +1 -1
- package/index.ts +171 -158
- package/native.ts +64 -58
- package/package.json +67 -67
- package/qwik.ts +42 -42
- package/react.ts +66 -60
- package/solid.ts +51 -44
- package/types.ts +101 -98
- package/utils.ts +210 -210
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;
|
|
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;
|
|
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
|
|
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
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
'
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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,58 +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 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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
+
}
|