glre 0.10.0 → 0.12.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 +9 -8
- package/index.cjs.js +1 -1
- package/index.develop.js +1 -1
- package/index.js +1 -1
- package/index.ts +3 -4
- package/package.json +5 -3
- package/react.ts +40 -0
- package/solid.ts +25 -0
- package/utils.ts +12 -6
package/events.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { event } from 'reev'
|
|
2
|
-
import { createProgram, createShader, createTexture,
|
|
2
|
+
import { createProgram, createShader, createTexture, concat } 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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
// @TODO abbreviate to import uniform
|
|
10
|
+
// self.uniformHeader.map(([key, header]) => self.frag = concat(self.frag, header, key))
|
|
11
|
+
// self.uniformHeader.map(([key, header]) => self.frag = concat(self.vert, header, key))
|
|
12
|
+
// self.attributeHeader.map(([key, header]) => self.vert = concat(self.vert, header, key))
|
|
13
|
+
if (self.int) self.frag = concat(self.frag, `precision ${self.int} int;`)
|
|
14
|
+
if (self.float) self.frag = concat(self.frag, `precision ${self.float} float;`)
|
|
15
|
+
if (self.sampler2D) self.frag = concat(self.frag, `precision ${self.sampler2D} sampler2D;`)
|
|
16
|
+
if (self.samplerCube) self.frag = concat(self.frag, `precision ${self.samplerCube} samplerCube;`)
|
|
16
17
|
const el = (self.el = document.getElementById(self.id)) // @ts-ignore
|
|
17
18
|
const gl = (self.gl = el?.getContext('webgl'))
|
|
18
19
|
const frag = createShader(gl, self.frag, gl?.FRAGMENT_SHADER)
|
package/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
+
"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){return e=e.replace(/\s+/g,""),r=r.replace(/\s+/g,""),-1!==e.indexOf(r)}function i(e,r,n){return void 0===n&&(n=""),""!==n&&!o(e,n)||o(e,r)?e:r+e}function a(e,r){void 0===r&&(r=!1);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 u(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 f(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 l=function(e){return r.event({mount:function(r){e.int&&(e.frag=i(e.frag,"precision "+e.int+" int;")),e.float&&(e.frag=i(e.frag,"precision "+e.float+" float;")),e.sampler2D&&(e.frag=i(e.frag,"precision "+e.sampler2D+" sampler2D;")),e.samplerCube&&(e.frag=i(e.frag,"precision "+e.samplerCube+" samplerCube;"));var n=e.el=document.getElementById(e.id),t=e.gl=null==n?void 0:n.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,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,a,o),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()/1e3,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}))}))}})},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",v="\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",m=function(o){var i=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};i.id="myCanvas",i.frag=v,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=e.frame();i.lastActiveUnit=0,i.activeUnit=r.nested((function(){return i.lastActiveUnit++})),i.vertexStride=r.nested((function(e,r,n){var t=n?Math.max.apply(Math,n)+1:i.count,o=r.length/t<<0;return i.attributeHeader.push([e,"vertex vec"+o+" "+e+";"]),o})),i.uniformType=r.nested((function(e,r,n){var t=a(r,n),o=t[0],u=t[1];return i.uniformHeader.push([e,"uniform "+u+" "+e+";"]),o})),i.location=r.nested((function(e,r){var n,t;return void 0===r&&(r=!1),r?null==(n=i.gl)?void 0:n.getAttribLocation(i.pg,e):null==(t=i.gl)?void 0:t.getUniformLocation(i.pg,e)})),i.setDpr=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return void u.apply(void 0,["resize",{}].concat(r))||i},i.setSize=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return void u.apply(void 0,["resize",{}].concat(r))||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,r){i[e]=r}),i),i.setUniform=r.durable((function(e,r,n){void 0===n&&(n=!1);var t=i.uniformType(e,r,n);i.setFrame((function(){n?i.gl[t](i.location(e),!1,r):i.gl[t](i.location(e),r)}))}),i),i.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];var o=i.vertexStride.apply(i,[e].concat(n));i.setFrame((function(){f.apply(void 0,[i.gl,o,i.location(e,!0)].concat(n))}))}),i),i.setTexture=r.durable((function(e,r){var n=new Image;n.addEventListener("load",(function(e){return u("load",e,n)}),!1),Object.assign(n,{src:r,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 r;return(r=i.gl).viewport.apply(r,[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,r){return void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),i.gl.drawElements(i.gl[e],i.count,i.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&&(i.frag=o),"object"==typeof o&&i.setConfig(o),6===i.count&&i.setAttribute({a_position:c}),i};m.default=null,exports.default=m,exports.gl=m;
|
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){return void 0===r&&(r="")
|
|
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){return e=e.replace(/\s+/g,""),n=n.replace(/\s+/g,""),-1!==e.indexOf(n)}function a(e,n,r){return void 0===r&&(r=""),""!==r&&!i(e,r)||i(e,n)?e:n+e}function u(e,n){void 0===n&&(n=!1);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 f(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 l(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 c=function(e){return r.event({mount:function(n){e.int&&(e.frag=a(e.frag,"precision "+e.int+" int;")),e.float&&(e.frag=a(e.frag,"precision "+e.float+" float;")),e.sampler2D&&(e.frag=a(e.frag,"precision "+e.sampler2D+" sampler2D;")),e.samplerCube&&(e.frag=a(e.frag,"precision "+e.samplerCube+" samplerCube;"));var r=e.el=document.getElementById(e.id),t=e.gl=null==r?void 0:r.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,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(),l=0,c=0;e.setFrame((function(){return l=u,u=performance.now()/1e3,c=u-l,e.setUniform({iTime:u,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}))}))}})},s=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],d="\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",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=v,i.vert=d,i.size=[0,0],i.mouse=[0,0],i.count=6,i.uniformHeader=[],i.attributeHeader=[];var a=i.event=c(i),f=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=u(n,r),o=t[0],a=t[1];return i.uniformHeader.push([e,"uniform "+a+" "+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 a.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 a.apply(void 0,["resize",{}].concat(n))||i},i.setFrame=function(e){return void f.mount(e)||i},i.setMount=function(e){return void a.mount({mount:e})||i},i.setClean=function(e){return void a.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];var o=i.vertexStride.apply(i,[e].concat(r));i.setFrame((function(){l.apply(void 0,[i.gl,o,i.location(e,!0)].concat(r))}))}),i),i.setTexture=r.durable((function(e,n){var r=new Image;r.addEventListener("load",(function(e){return a("load",e,r)}),!1),Object.assign(r,{src:n,alt:e,crossOrigin:"anonymous"})}),i),i.mount=a.on("mount"),i.clean=a.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 m=arguments.length,g=new Array(m>1?m-1:0),E=1;E<m;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:s}),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 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
|
+
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){return e=e.replace(/\s+/g,""),r=r.replace(/\s+/g,""),-1!==e.indexOf(r)}function u(e,r,n){return void 0===n&&(n=""),""!==n&&!a(e,n)||a(e,r)?e:r+e}function f(e,r){void 0===r&&(r=!1);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 l(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 c(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 s=function(e){return r({mount:function(r){e.int&&(e.frag=u(e.frag,"precision "+e.int+" int;")),e.float&&(e.frag=u(e.frag,"precision "+e.float+" float;")),e.sampler2D&&(e.frag=u(e.frag,"precision "+e.sampler2D+" sampler2D;")),e.samplerCube&&(e.frag=u(e.frag,"precision "+e.samplerCube+" samplerCube;"));var n=e.el=document.getElementById(e.id),t=e.gl=null==n?void 0:n.getContext("webgl"),o=l(t,e.frag,null==t?void 0:t.FRAGMENT_SHADER),i=l(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 a=performance.now(),f=0,c=0;e.setFrame((function(){return f=a,a=performance.now()/1e3,c=a-f,e.setUniform({iTime:a,iPrevTime:f,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],v="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",g="\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",E=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=g,a.vert=v,a.size=[0,0],a.mouse=[0,0],a.count=6,a.uniformHeader=[],a.attributeHeader=[];var u=a.event=s(a),l=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=f(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 u.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 u.apply(void 0,["resize",{}].concat(r))||a},a.setFrame=function(e){return void l.mount(e)||a},a.setMount=function(e){return void u.mount({mount:e})||a},a.setClean=function(e){return void u.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];var o=a.vertexStride.apply(a,[e].concat(n));a.setFrame((function(){c.apply(void 0,[a.gl,o,a.location(e,!0)].concat(n))}))}),a),a.setTexture=t((function(e,r){var n=new Image;n.addEventListener("load",(function(e){return u("load",e,n)}),!1),Object.assign(n,{src:r,alt:e,crossOrigin:"anonymous"})}),a),a.mount=u.on("mount"),a.clean=u.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};E.default=null;export{E as default,E as gl};
|
package/index.ts
CHANGED
|
@@ -53,7 +53,7 @@ export const gl = (initArg?: Partial<GL>, ...initArgs: any[]) => {
|
|
|
53
53
|
|
|
54
54
|
self.uniformType = nested((key, value, isMatrix) => {
|
|
55
55
|
const [type, code] = switchUniformType(value, isMatrix)
|
|
56
|
-
self.uniformHeader.push([key, `uniform ${code} ${key}
|
|
56
|
+
self.uniformHeader.push([key, `uniform ${code} ${key};`])
|
|
57
57
|
return type
|
|
58
58
|
})
|
|
59
59
|
|
|
@@ -83,10 +83,9 @@ export const gl = (initArg?: Partial<GL>, ...initArgs: any[]) => {
|
|
|
83
83
|
|
|
84
84
|
// attribute
|
|
85
85
|
self.setAttribute = durable((key, ...args) => {
|
|
86
|
+
const stride = self.vertexStride(key, ...args)
|
|
86
87
|
self.setFrame(() => {
|
|
87
|
-
|
|
88
|
-
const location = self.location(key, true)
|
|
89
|
-
createAttribute(self.gl, stride, location, ...args)
|
|
88
|
+
createAttribute(self.gl, stride, self.location(key, true), ...args)
|
|
90
89
|
})
|
|
91
90
|
}, self)
|
|
92
91
|
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "glre",
|
|
3
3
|
"author": "tseijp",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.12.0",
|
|
6
6
|
"module": "index.js",
|
|
7
7
|
"types": "index.ts",
|
|
8
8
|
"main": "index.cjs.js",
|
|
@@ -35,7 +35,9 @@
|
|
|
35
35
|
"index.ts",
|
|
36
36
|
"events.ts",
|
|
37
37
|
"helpers.ts",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
38
|
+
"react.ts",
|
|
39
|
+
"solid.ts",
|
|
40
|
+
"types.ts",
|
|
41
|
+
"utils.ts"
|
|
40
42
|
]
|
|
41
43
|
}
|
package/react.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { gl } from './index'
|
|
2
|
+
import type { GL } from './types'
|
|
3
|
+
import { useRef, useMemo, useEffect, useCallback } from 'react'
|
|
4
|
+
|
|
5
|
+
export function useGL(config?: Partial<GL>, target?: GL) {
|
|
6
|
+
const self = useMemo(() => {
|
|
7
|
+
if (target) return target
|
|
8
|
+
return (gl.default = gl(target))
|
|
9
|
+
}, [target])
|
|
10
|
+
useEffect(() => void self.setConfig(config), [self, config])
|
|
11
|
+
useEffect(() => void self.event('mount'), [self])
|
|
12
|
+
useEffect(() => () => self.event('clean'), [self])
|
|
13
|
+
return self
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function useTexture(props, self?: GL) {
|
|
17
|
+
if (!self) self = gl.default
|
|
18
|
+
useEffect(() => self.setTexture(props), [props, self])
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function useAttribute(props, self?: GL) {
|
|
22
|
+
if (!self) self = gl.default
|
|
23
|
+
return self.setAttribute(props)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function useUniform(props, self?: GL) {
|
|
27
|
+
if (!self) self = gl.default
|
|
28
|
+
return self.setUniform(props)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function useFrame(fun, self?: GL) {
|
|
32
|
+
if (!self) self = gl.default
|
|
33
|
+
const ref = useMutable(fun)
|
|
34
|
+
useEffect(() => void self.setFrame(ref), [ref, self])
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function useMutable(fun) {
|
|
38
|
+
const ref = useRef(fun)
|
|
39
|
+
return useCallback(() => ref.current(), [])
|
|
40
|
+
}
|
package/solid.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { gl } from './index'
|
|
2
|
+
import type { GL } from './types'
|
|
3
|
+
import { onMount, onCleanup } from 'solid-js'
|
|
4
|
+
|
|
5
|
+
export function createGL(config: Partial<GL>, _gl?: GL) {
|
|
6
|
+
const self = _gl || (gl.default = gl(config))
|
|
7
|
+
onMount(() => self.event('mount'))
|
|
8
|
+
onCleanup(() => self.event('clean'))
|
|
9
|
+
return self
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function onFrame(fun: any, self: GL) {
|
|
13
|
+
if (!self) self = gl.default
|
|
14
|
+
onMount(() => self.setFrame(fun))
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function setTexture(props, self?: GL) {
|
|
18
|
+
if (!self) self = gl.default
|
|
19
|
+
return self.setTexture(props)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function setAttribute(props, self?: GL) {
|
|
23
|
+
if (!self) self = gl.default
|
|
24
|
+
return self.setAttribute(props)
|
|
25
|
+
}
|
package/utils.ts
CHANGED
|
@@ -12,14 +12,20 @@ export function isTemplateLiteral(strings: unknown): strings is string[] {
|
|
|
12
12
|
return Array.isArray(strings) && typeof strings[0] === "string"
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return shader
|
|
15
|
+
export function include(source: string, target: string) {
|
|
16
|
+
source = source.replace(/\s+/g, '')
|
|
17
|
+
target = target.replace(/\s+/g, '')
|
|
18
|
+
return source.indexOf(target) !== -1
|
|
20
19
|
}
|
|
21
20
|
|
|
22
|
-
export function
|
|
21
|
+
export function concat(source: string, target: string, key = "") {
|
|
22
|
+
if (key === "" || include(source, key))
|
|
23
|
+
if (!include(source, target))
|
|
24
|
+
return target + source
|
|
25
|
+
return source
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function switchUniformType(value: unknown, isMatrix = false) {
|
|
23
29
|
let length = typeof value === "number" ? 0 : (value as any[]).length
|
|
24
30
|
if (!length) return [`uniform1f`, `float`]
|
|
25
31
|
if (!isMatrix) return [`uniform${length}fv`, `vec${length}`]
|