glre 0.12.0 → 0.13.1
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 +102 -65
- package/index.cjs.js +1 -1
- package/index.develop.js +1 -1
- package/index.js +1 -1
- package/index.ts +46 -30
- package/package.json +2 -2
- package/react.ts +5 -5
- package/solid.ts +1 -1
- package/types.ts +18 -30
- package/utils.ts +4 -4
package/events.ts
CHANGED
|
@@ -1,68 +1,105 @@
|
|
|
1
1
|
import { event } from 'reev'
|
|
2
2
|
import { createProgram, createShader, createTexture, concat } from './utils'
|
|
3
|
-
import type { GL } from './types'
|
|
3
|
+
import type { GL, GLEvent } from './types'
|
|
4
4
|
|
|
5
|
-
export const glEvent = (self: GL) =>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
5
|
+
export const glEvent = (self: GL) => {
|
|
6
|
+
const e = event<GLEvent>()
|
|
7
|
+
return e({
|
|
8
|
+
// run if canvas is mounted
|
|
9
|
+
mount() {
|
|
10
|
+
if (self.int)
|
|
11
|
+
self.frag = concat(
|
|
12
|
+
self.frag,
|
|
13
|
+
`precision ${self.int} int;`
|
|
14
|
+
)
|
|
15
|
+
if (self.float)
|
|
16
|
+
self.frag = concat(
|
|
17
|
+
self.frag,
|
|
18
|
+
`precision ${self.float} float;`
|
|
19
|
+
)
|
|
20
|
+
if (self.sampler2D)
|
|
21
|
+
self.frag = concat(
|
|
22
|
+
self.frag,
|
|
23
|
+
`precision ${self.sampler2D} sampler2D;`
|
|
24
|
+
)
|
|
25
|
+
if (self.samplerCube)
|
|
26
|
+
self.frag = concat(
|
|
27
|
+
self.frag,
|
|
28
|
+
`precision ${self.samplerCube} samplerCube;`
|
|
29
|
+
)
|
|
30
|
+
const el = (self.el = document.getElementById(self.id))
|
|
31
|
+
const gl = (self.gl = (el as any)?.getContext('webgl'))
|
|
32
|
+
const frag = createShader(
|
|
33
|
+
gl,
|
|
34
|
+
self.frag,
|
|
35
|
+
gl.FRAGMENT_SHADER
|
|
36
|
+
)
|
|
37
|
+
const vert = createShader(
|
|
38
|
+
gl,
|
|
39
|
+
self.vert,
|
|
40
|
+
gl.VERTEX_SHADER
|
|
41
|
+
)
|
|
42
|
+
self.pg = createProgram(gl, vert, frag)
|
|
43
|
+
window.addEventListener('resize', e.resize)
|
|
44
|
+
window.addEventListener('mousemove', e.mousemove)
|
|
45
|
+
e.resize()
|
|
46
|
+
let iTime = performance.now(),
|
|
47
|
+
iPrevTime = 0,
|
|
48
|
+
iDeltaTime = 0
|
|
49
|
+
self.setFrame(() => {
|
|
50
|
+
iPrevTime = iTime
|
|
51
|
+
iTime = performance.now() / 1000
|
|
52
|
+
iDeltaTime = iTime - iPrevTime
|
|
53
|
+
self.setUniform({
|
|
54
|
+
iTime,
|
|
55
|
+
iPrevTime,
|
|
56
|
+
iDeltaTime,
|
|
57
|
+
})
|
|
58
|
+
return true
|
|
59
|
+
})
|
|
60
|
+
self.frame()
|
|
61
|
+
},
|
|
62
|
+
// run if canvas is cleaned
|
|
63
|
+
clean() {
|
|
64
|
+
window.removeEventListener('resize', e.resize)
|
|
65
|
+
window.removeEventListener('mousemove', e.mousemove)
|
|
66
|
+
self.frame.cancel()
|
|
67
|
+
},
|
|
68
|
+
// user mousemove event
|
|
69
|
+
mousemove({ clientX, clientY }) {
|
|
70
|
+
const [w, h] = self.size
|
|
71
|
+
self.mouse[0] = (clientX - w / 2) / (w / 2)
|
|
72
|
+
self.mouse[1] = -(clientY - h / 2) / (h / 2)
|
|
73
|
+
self.setUniform('iMouse', self.mouse)
|
|
74
|
+
},
|
|
75
|
+
// user mousemove event
|
|
76
|
+
resize(
|
|
77
|
+
_resizeEvent,
|
|
78
|
+
width = window.innerWidth,
|
|
79
|
+
height = window.innerHeight
|
|
80
|
+
) {
|
|
81
|
+
self.size[0] = self.el.width = width
|
|
82
|
+
self.size[1] = self.el.height = height
|
|
83
|
+
self.setUniform('iResolution', self.size)
|
|
84
|
+
},
|
|
85
|
+
// load image event
|
|
86
|
+
load(_loadEvent, image) {
|
|
87
|
+
self.setFrame(() => {
|
|
88
|
+
const activeUnit = self.activeUnit(image.alt)
|
|
89
|
+
const location = self.location(image.alt)
|
|
90
|
+
const texture = createTexture(self.gl, image)
|
|
91
|
+
self.setFrame(() => {
|
|
92
|
+
self.gl.uniform1i(location, activeUnit)
|
|
93
|
+
self.gl.activeTexture(
|
|
94
|
+
self.gl['TEXTURE' + activeUnit]
|
|
95
|
+
)
|
|
96
|
+
self.gl.bindTexture(
|
|
97
|
+
self.gl.TEXTURE_2D,
|
|
98
|
+
texture
|
|
99
|
+
)
|
|
100
|
+
return true
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
},
|
|
104
|
+
} as any)
|
|
105
|
+
}
|
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,
|
|
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,i=r.length;t<i;t+=1)n+=r[t]+e[t+1];return n}function t(e){return Array.isArray(e)&&"string"==typeof e[0]}function i(e,r,n){return void 0===n&&(n=""),""!==n&&!e.includes(n)||function(e,r){return e=e.replace(/\s+/g,""),r=r.replace(/\s+/g,""),e.includes(r)}(e,r)?e:r+e}function o(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 a(e,r,n){var t=e.createShader(n);if(e.shaderSource(t,r),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;console.warn(e.getShaderInfoLog(t))}function u(e,r,n,t,i){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),i&&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,i))}var f=function(e){var n=r.event();return n({mount:function(){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 r=e.el=document.getElementById(e.id),t=e.gl=null==r?void 0:r.getContext("webgl"),o=a(t,e.frag,t.FRAGMENT_SHADER),u=a(t,e.vert,t.VERTEX_SHADER);e.pg=function(e,r,n){var t=e.createProgram();return e.attachShader(t,r),e.attachShader(t,n),e.linkProgram(t),e.getProgramParameter(t,e.LINK_STATUS)?(e.useProgram(t),t):(console.log(e.getProgramInfoLog(t)),null)}(t,u,o),window.addEventListener("resize",n.resize),window.addEventListener("mousemove",n.mousemove),n.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(){window.removeEventListener("resize",n.resize),window.removeEventListener("mousemove",n.mousemove),e.frame.cancel()},mousemove:function(r){var n=r.clientX,t=r.clientY,i=e.size,o=i[0],a=i[1];e.mouse[0]=(n-o/2)/(o/2),e.mouse[1]=-(t-a/2)/(a/2),e.setUniform("iMouse",e.mouse)},resize:function(r,n,t){void 0===n&&(n=window.innerWidth),void 0===t&&(t=window.innerHeight),e.size[0]=e.el.width=n,e.size[1]=e.el.height=t,e.setUniform("iResolution",e.size)},load:function(r,n){e.setFrame((function(){var r=e.activeUnit(n.alt),t=e.location(n.alt),i=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,n);e.setFrame((function(){return e.gl.uniform1i(t,r),e.gl.activeTexture(e.gl["TEXTURE"+r]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},l=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],c="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",s="\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",m=function(i){var a=function e(r){for(var i=arguments.length,o=new Array(i>1?i-1:0),a=1;a<i;a++)o[a-1]=arguments[a];return t(r)&&(r=n(r,o)),"string"==typeof r&&(e.frag=r),"function"==typeof r&&e.frame.mount(r),e};a.id="myCanvas",a.frag=s,a.vert=c,a.size=[0,0],a.mouse=[0,0],a.count=6,a.uniformHeader=[],a.attributeHeader=[];var m=a.event=f(a),v=a.frame=e.frame();a.lastActiveUnit=0,a.activeUnit=r.nested((function(){return a.lastActiveUnit++})),a.vertexStride=r.nested((function(e,r,n){var t=n?Math.max.apply(Math,n)+1:a.count,i=r.length/t<<0;return a.attributeHeader.push([e,"vertex vec"+i+" "+e+";"]),i})),a.uniformType=r.nested((function(e,r,n){var t=o(r,n),i=t[0],u=t[1];return a.uniformHeader.push([e,"uniform "+u+" "+e+";"]),i})),a.location=r.nested((function(e,r){var n,t;return void 0===r&&(r=!1),r?null==(n=a.gl)?void 0:n.getAttribLocation(a.pg,e):null==(t=a.gl)?void 0:t.getUniformLocation(a.pg,e)})),a.setDpr=function(){return void m.resize()||a},a.setSize=function(){return void m.resize()||a},a.setFrame=function(e){return void v.mount(e)||a},a.setMount=function(e){return void m({mount:e})||a},a.setClean=function(e){return void m({clean:e})||a},a.setConfig=r.durable((function(e,r){a[e]=r}),a),a.setUniform=r.durable((function(e,r,n){void 0===n&&(n=!1);var t=a.uniformType(e,r,n);a.setFrame((function(){n?a.gl[t](a.location(e),!1,r):a.gl[t](a.location(e),r)}))}),a),a.setAttribute=r.durable((function(e,r,n){var t=a.vertexStride(e,r,n);a.setFrame((function(){u(a.gl,t,a.location(e,!0),r,n)}))}),a),a.setTexture=r.durable((function(e,r){var n=new Image;n.addEventListener("load",(function(e){return m.load(e,n)}),!1),Object.assign(n,{src:r,alt:e,crossOrigin:"anonymous"})}),a),a.mount=function(){return m.mount.apply(m,arguments)},a.clean=function(){return m.clean.apply(m,arguments)},a.clear=function(e){return a.gl.clear(a.gl[e||"COLOR_BUFFER_BIT"])},a.viewport=function(e){var r;return(r=a.gl).viewport.apply(r,[0,0].concat(e||a.size))},a.drawArrays=function(e){return void 0===e&&(e="TRIANGLES"),a.gl.drawArrays(a.gl[e],0,a.count)},a.drawElements=function(e,r){return void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),a.gl.drawElements(a.gl[e],a.count,a.gl[r],0)};for(var d=arguments.length,g=new Array(d>1?d-1:0),E=1;E<d;E++)g[E-1]=arguments[E];return t(i)&&(i=n(i,g)),"string"==typeof i&&(a.frag=i),"object"==typeof i&&a.setConfig(i),6===a.count&&a.setAttribute({a_position:l}),a};m.default=null,exports.default=m,exports.gl=m;
|
package/index.develop.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("refr"),require("reev")):"function"==typeof define&&define.amd?define(["exports","refr","reev"],r):r(((e="undefined"!=typeof globalThis?globalThis:e||self).index=e.index||{},e.index.ts={}),e.refr,e.reev)}(this,(function(e,r,n){"use strict";function t(e,r){for(var n=e[0],t=0,i=r.length;t<i;t+=1)n+=r[t]+e[t+1];return n}function i(e){return Array.isArray(e)&&"string"==typeof e[0]}function o(e,r,n){return void 0===n&&(n=""),""!==n&&!e.includes(n)||function(e,r){return e=e.replace(/\s+/g,""),r=r.replace(/\s+/g,""),e.includes(r)}(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,i){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),i&&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,i))}var l=function(e){var r=n.event();return r({mount:function(){e.int&&(e.frag=o(e.frag,"precision "+e.int+" int;")),e.float&&(e.frag=o(e.frag,"precision "+e.float+" float;")),e.sampler2D&&(e.frag=o(e.frag,"precision "+e.sampler2D+" sampler2D;")),e.samplerCube&&(e.frag=o(e.frag,"precision "+e.samplerCube+" samplerCube;"));var n=e.el=document.getElementById(e.id),t=e.gl=null==n?void 0:n.getContext("webgl"),i=u(t,e.frag,t.FRAGMENT_SHADER),a=u(t,e.vert,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,i),window.addEventListener("resize",r.resize),window.addEventListener("mousemove",r.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(){window.removeEventListener("resize",r.resize),window.removeEventListener("mousemove",r.mousemove),e.frame.cancel()},mousemove:function(r){var n=r.clientX,t=r.clientY,i=e.size,o=i[0],a=i[1];e.mouse[0]=(n-o/2)/(o/2),e.mouse[1]=-(t-a/2)/(a/2),e.setUniform("iMouse",e.mouse)},resize:function(r,n,t){void 0===n&&(n=window.innerWidth),void 0===t&&(t=window.innerHeight),e.size[0]=e.el.width=n,e.size[1]=e.el.height=t,e.setUniform("iResolution",e.size)},load:function(r,n){e.setFrame((function(){var r=e.activeUnit(n.alt),t=e.location(n.alt),i=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,n);e.setFrame((function(){return e.gl.uniform1i(t,r),e.gl.activeTexture(e.gl["TEXTURE"+r]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},c=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],s="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",d="\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",m=function(e){var o=function e(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),a=1;a<n;a++)o[a-1]=arguments[a];return i(r)&&(r=t(r,o)),"string"==typeof r&&(e.frag=r),"function"==typeof r&&e.frame.mount(r),e};o.id="myCanvas",o.frag=d,o.vert=s,o.size=[0,0],o.mouse=[0,0],o.count=6,o.uniformHeader=[],o.attributeHeader=[];var u=o.event=l(o),m=o.frame=r.frame();o.lastActiveUnit=0,o.activeUnit=n.nested((function(){return o.lastActiveUnit++})),o.vertexStride=n.nested((function(e,r,n){var t=n?Math.max.apply(Math,n)+1:o.count,i=r.length/t<<0;return o.attributeHeader.push([e,"vertex vec"+i+" "+e+";"]),i})),o.uniformType=n.nested((function(e,r,n){var t=a(r,n),i=t[0],u=t[1];return o.uniformHeader.push([e,"uniform "+u+" "+e+";"]),i})),o.location=n.nested((function(e,r){var n,t;return void 0===r&&(r=!1),r?null==(n=o.gl)?void 0:n.getAttribLocation(o.pg,e):null==(t=o.gl)?void 0:t.getUniformLocation(o.pg,e)})),o.setDpr=function(){return void u.resize()||o},o.setSize=function(){return void u.resize()||o},o.setFrame=function(e){return void m.mount(e)||o},o.setMount=function(e){return void u({mount:e})||o},o.setClean=function(e){return void u({clean:e})||o},o.setConfig=n.durable((function(e,r){o[e]=r}),o),o.setUniform=n.durable((function(e,r,n){void 0===n&&(n=!1);var t=o.uniformType(e,r,n);o.setFrame((function(){n?o.gl[t](o.location(e),!1,r):o.gl[t](o.location(e),r)}))}),o),o.setAttribute=n.durable((function(e,r,n){var t=o.vertexStride(e,r,n);o.setFrame((function(){f(o.gl,t,o.location(e,!0),r,n)}))}),o),o.setTexture=n.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"})}),o),o.mount=function(){return u.mount.apply(u,arguments)},o.clean=function(){return u.clean.apply(u,arguments)},o.clear=function(e){return o.gl.clear(o.gl[e||"COLOR_BUFFER_BIT"])},o.viewport=function(e){var r;return(r=o.gl).viewport.apply(r,[0,0].concat(e||o.size))},o.drawArrays=function(e){return void 0===e&&(e="TRIANGLES"),o.gl.drawArrays(o.gl[e],0,o.count)},o.drawElements=function(e,r){return void 0===e&&(e="TRIANGLES"),void 0===r&&(r="UNSIGNED_SHORT"),o.gl.drawElements(o.gl[e],o.count,o.gl[r],0)};for(var v=arguments.length,g=new Array(v>1?v-1:0),E=1;E<v;E++)g[E-1]=arguments[E];return i(e)&&(e=t(e,g)),"string"==typeof e&&(o.frag=e),"object"==typeof e&&o.setConfig(e),6===o.count&&o.setAttribute({a_position:c}),o};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
|
|
1
|
+
import{frame as e}from"refr";import{event as r,nested as n,durable as t}from"reev";function i(e,r){for(var n=e[0],t=0,i=r.length;t<i;t+=1)n+=r[t]+e[t+1];return n}function o(e){return Array.isArray(e)&&"string"==typeof e[0]}function a(e,r,n){return void 0===n&&(n=""),""!==n&&!e.includes(n)||function(e,r){return e=e.replace(/\s+/g,""),r=r.replace(/\s+/g,""),e.includes(r)}(e,r)?e:r+e}function u(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 f(e,r,n){var t=e.createShader(n);if(e.shaderSource(t,r),e.compileShader(t),e.getShaderParameter(t,e.COMPILE_STATUS))return t;console.warn(e.getShaderInfoLog(t))}function c(e,r,n,t,i){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),i&&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,i))}var l=function(e){var n=r();return n({mount:function(){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"),i=f(t,e.frag,t.FRAGMENT_SHADER),o=f(t,e.vert,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,o,i),window.addEventListener("resize",n.resize),window.addEventListener("mousemove",n.mousemove),n.resize();var u=performance.now(),c=0,l=0;e.setFrame((function(){return c=u,u=performance.now()/1e3,l=u-c,e.setUniform({iTime:u,iPrevTime:c,iDeltaTime:l}),!0})),e.frame()},clean:function(){window.removeEventListener("resize",n.resize),window.removeEventListener("mousemove",n.mousemove),e.frame.cancel()},mousemove:function(r){var n=r.clientX,t=r.clientY,i=e.size,o=i[0],a=i[1];e.mouse[0]=(n-o/2)/(o/2),e.mouse[1]=-(t-a/2)/(a/2),e.setUniform("iMouse",e.mouse)},resize:function(r,n,t){void 0===n&&(n=window.innerWidth),void 0===t&&(t=window.innerHeight),e.size[0]=e.el.width=n,e.size[1]=e.el.height=t,e.setUniform("iResolution",e.size)},load:function(r,n){e.setFrame((function(){var r=e.activeUnit(n.alt),t=e.location(n.alt),i=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,n);e.setFrame((function(){return e.gl.uniform1i(t,r),e.gl.activeTexture(e.gl["TEXTURE"+r]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},s=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1],m="\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n",v="\n uniform vec2 resolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / resolution), 0, 1);\n }\n",g=function(r){var a=function e(r){for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a<n;a++)t[a-1]=arguments[a];return o(r)&&(r=i(r,t)),"string"==typeof r&&(e.frag=r),"function"==typeof r&&e.frame.mount(r),e};a.id="myCanvas",a.frag=v,a.vert=m,a.size=[0,0],a.mouse=[0,0],a.count=6,a.uniformHeader=[],a.attributeHeader=[];var f=a.event=l(a),g=a.frame=e();a.lastActiveUnit=0,a.activeUnit=n((function(){return a.lastActiveUnit++})),a.vertexStride=n((function(e,r,n){var t=n?Math.max.apply(Math,n)+1:a.count,i=r.length/t<<0;return a.attributeHeader.push([e,"vertex vec"+i+" "+e+";"]),i})),a.uniformType=n((function(e,r,n){var t=u(r,n),i=t[0],o=t[1];return a.uniformHeader.push([e,"uniform "+o+" "+e+";"]),i})),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(){return void f.resize()||a},a.setSize=function(){return void f.resize()||a},a.setFrame=function(e){return void g.mount(e)||a},a.setMount=function(e){return void f({mount:e})||a},a.setClean=function(e){return void f({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,r,n){var t=a.vertexStride(e,r,n);a.setFrame((function(){c(a.gl,t,a.location(e,!0),r,n)}))}),a),a.setTexture=t((function(e,r){var n=new Image;n.addEventListener("load",(function(e){return f.load(e,n)}),!1),Object.assign(n,{src:r,alt:e,crossOrigin:"anonymous"})}),a),a.mount=function(){return f.mount.apply(f,arguments)},a.clean=function(){return f.clean.apply(f,arguments)},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 o(r)&&(r=i(r,d)),"string"==typeof r&&(a.frag=r),"object"==typeof r&&a.setConfig(r),6===a.count&&a.setAttribute({a_position:s}),a};g.default=null;export{g as default,g as gl};
|
package/index.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { frame } from 'refr'
|
|
2
2
|
import { glEvent } from './events'
|
|
3
3
|
import { durable, nested } from 'reev'
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
createAttribute,
|
|
6
|
+
interleave,
|
|
7
|
+
isTemplateLiteral,
|
|
8
|
+
switchUniformType,
|
|
9
|
+
} from './utils'
|
|
5
10
|
import type { GL } from './types'
|
|
6
11
|
|
|
7
|
-
const a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]
|
|
12
|
+
const a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]
|
|
8
13
|
|
|
9
14
|
const _defaultVertexShader = `
|
|
10
15
|
attribute vec4 a_position;
|
|
@@ -20,7 +25,7 @@ const _defaultFragmentShader = `
|
|
|
20
25
|
}
|
|
21
26
|
`
|
|
22
27
|
|
|
23
|
-
export const gl = (initArg?: Partial<GL>, ...initArgs: any[]) => {
|
|
28
|
+
export const gl = (initArg?: string | Partial<GL>, ...initArgs: any[]) => {
|
|
24
29
|
const self = ((arg: any, ...args: any[]) => {
|
|
25
30
|
if (isTemplateLiteral(arg)) arg = interleave(arg, args)
|
|
26
31
|
if (typeof arg === 'string') self.frag = arg
|
|
@@ -30,8 +35,8 @@ export const gl = (initArg?: Partial<GL>, ...initArgs: any[]) => {
|
|
|
30
35
|
|
|
31
36
|
// default state
|
|
32
37
|
self.id = 'myCanvas' // @TODO feat: create hashid
|
|
33
|
-
self.frag = _defaultFragmentShader
|
|
34
|
-
self.vert = _defaultVertexShader
|
|
38
|
+
self.frag = _defaultFragmentShader
|
|
39
|
+
self.vert = _defaultVertexShader
|
|
35
40
|
// self.float = "mediump" // @TODO check bugs
|
|
36
41
|
self.size = [0, 0]
|
|
37
42
|
self.mouse = [0, 0]
|
|
@@ -40,12 +45,12 @@ export const gl = (initArg?: Partial<GL>, ...initArgs: any[]) => {
|
|
|
40
45
|
self.attributeHeader = []
|
|
41
46
|
|
|
42
47
|
// core state
|
|
43
|
-
const
|
|
44
|
-
const
|
|
48
|
+
const e = (self.event = glEvent(self))
|
|
49
|
+
const f = (self.frame = frame())
|
|
45
50
|
self.lastActiveUnit = 0
|
|
46
51
|
self.activeUnit = nested(() => self.lastActiveUnit++)
|
|
47
52
|
self.vertexStride = nested((key, value, iboValue) => {
|
|
48
|
-
const count = iboValue ? Math.max(...iboValue) + 1 : self.count
|
|
53
|
+
const count = iboValue ? Math.max(...iboValue) + 1 : self.count
|
|
49
54
|
const stride = (value.length / count) << 0
|
|
50
55
|
self.attributeHeader.push([key, `vertex vec${stride} ${key};`])
|
|
51
56
|
return stride
|
|
@@ -64,14 +69,12 @@ export const gl = (initArg?: Partial<GL>, ...initArgs: any[]) => {
|
|
|
64
69
|
})
|
|
65
70
|
|
|
66
71
|
// setter
|
|
67
|
-
self.setDpr = (
|
|
68
|
-
self.setSize = (
|
|
69
|
-
self.setFrame = (frame) => void
|
|
70
|
-
self.setMount = (mount) => void
|
|
71
|
-
self.setClean = (clean) => void
|
|
72
|
+
self.setDpr = () => void e.resize() || self
|
|
73
|
+
self.setSize = () => void e.resize() || self
|
|
74
|
+
self.setFrame = (frame) => void f.mount(frame) || self
|
|
75
|
+
self.setMount = (mount) => void e({ mount }) || self
|
|
76
|
+
self.setClean = (clean) => void e({ clean }) || self
|
|
72
77
|
self.setConfig = durable((key, value) => void (self[key] = value), self)
|
|
73
|
-
|
|
74
|
-
// uniform
|
|
75
78
|
self.setUniform = durable((key, value, isMatrix = false) => {
|
|
76
79
|
const type = self.uniformType(key, value, isMatrix)
|
|
77
80
|
self.setFrame(() => {
|
|
@@ -80,41 +83,54 @@ export const gl = (initArg?: Partial<GL>, ...initArgs: any[]) => {
|
|
|
80
83
|
else self.gl[type](self.location(key), value)
|
|
81
84
|
})
|
|
82
85
|
}, self)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
self.setAttribute = durable((key, ...args) => {
|
|
86
|
-
const stride = self.vertexStride(key, ...args)
|
|
86
|
+
self.setAttribute = durable((key, value, iboValue) => {
|
|
87
|
+
const stride = self.vertexStride(key, value, iboValue)
|
|
87
88
|
self.setFrame(() => {
|
|
88
|
-
createAttribute(
|
|
89
|
+
createAttribute(
|
|
90
|
+
self.gl,
|
|
91
|
+
stride,
|
|
92
|
+
self.location(key, true),
|
|
93
|
+
value,
|
|
94
|
+
iboValue
|
|
95
|
+
)
|
|
89
96
|
})
|
|
90
97
|
}, self)
|
|
91
98
|
|
|
92
99
|
// texture
|
|
93
100
|
self.setTexture = durable((key, src) => {
|
|
94
101
|
const image = new Image()
|
|
95
|
-
image.addEventListener(
|
|
96
|
-
Object.assign(image, {
|
|
102
|
+
image.addEventListener('load', (_) => e.load(_, image), false)
|
|
103
|
+
Object.assign(image, {
|
|
104
|
+
src,
|
|
105
|
+
alt: key,
|
|
106
|
+
crossOrigin: 'anonymous',
|
|
107
|
+
})
|
|
97
108
|
}, self)
|
|
98
109
|
|
|
99
110
|
// shorthands
|
|
100
|
-
self.mount =
|
|
101
|
-
self.clean =
|
|
102
|
-
self.clear = (key) => self.gl.clear(self.gl[key ||
|
|
111
|
+
self.mount = (...args) => e.mount(...args)
|
|
112
|
+
self.clean = (...args) => e.clean(...args)
|
|
113
|
+
self.clear = (key) => self.gl.clear(self.gl[key || 'COLOR_BUFFER_BIT'])
|
|
103
114
|
self.viewport = (size) => self.gl.viewport(0, 0, ...(size || self.size))
|
|
104
115
|
self.drawArrays = (mode = 'TRIANGLES') =>
|
|
105
116
|
self.gl.drawArrays(self.gl[mode], 0, self.count)
|
|
106
117
|
self.drawElements = (mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') =>
|
|
107
|
-
self.gl.drawElements(
|
|
118
|
+
self.gl.drawElements(
|
|
119
|
+
self.gl[mode],
|
|
120
|
+
self.count,
|
|
121
|
+
self.gl[type],
|
|
122
|
+
0
|
|
123
|
+
)
|
|
108
124
|
|
|
109
125
|
// init config
|
|
110
126
|
if (isTemplateLiteral(initArg)) initArg = interleave(initArg, initArgs)
|
|
111
|
-
if (typeof initArg ===
|
|
112
|
-
if (typeof initArg ===
|
|
127
|
+
if (typeof initArg === 'string') self.frag = initArg
|
|
128
|
+
if (typeof initArg === 'object') self.setConfig(initArg)
|
|
113
129
|
if (self.count === 6) self.setAttribute({ a_position })
|
|
114
130
|
|
|
115
|
-
return self
|
|
131
|
+
return self
|
|
116
132
|
}
|
|
117
133
|
|
|
118
134
|
gl.default = null as unknown as GL
|
|
119
135
|
|
|
120
|
-
export default gl
|
|
136
|
+
export default gl
|
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.13.1",
|
|
6
6
|
"module": "index.js",
|
|
7
7
|
"types": "index.ts",
|
|
8
8
|
"main": "index.cjs.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"access": "public"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"reev": "0.
|
|
16
|
+
"reev": "0.9.0",
|
|
17
17
|
"refr": "0.2.0"
|
|
18
18
|
},
|
|
19
19
|
"keywords": [
|
package/react.ts
CHANGED
|
@@ -8,14 +8,14 @@ export function useGL(config?: Partial<GL>, target?: GL) {
|
|
|
8
8
|
return (gl.default = gl(target))
|
|
9
9
|
}, [target])
|
|
10
10
|
useEffect(() => void self.setConfig(config), [self, config])
|
|
11
|
-
useEffect(() => void self.event(
|
|
12
|
-
useEffect(() => () => self.event(
|
|
11
|
+
useEffect(() => void self.event.mount(), [self])
|
|
12
|
+
useEffect(() => () => self.event.clean(), [self])
|
|
13
13
|
return self
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export function useTexture(props, self?: GL) {
|
|
17
17
|
if (!self) self = gl.default
|
|
18
|
-
useEffect(() => self
|
|
18
|
+
useEffect(() => void self?.setTexture(props), [props, self])
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export function useAttribute(props, self?: GL) {
|
|
@@ -31,10 +31,10 @@ export function useUniform(props, self?: GL) {
|
|
|
31
31
|
export function useFrame(fun, self?: GL) {
|
|
32
32
|
if (!self) self = gl.default
|
|
33
33
|
const ref = useMutable(fun)
|
|
34
|
-
useEffect(() => void self
|
|
34
|
+
useEffect(() => void self?.setFrame(ref), [ref, self])
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export function useMutable(fun) {
|
|
38
38
|
const ref = useRef(fun)
|
|
39
39
|
return useCallback(() => ref.current(), [])
|
|
40
|
-
}
|
|
40
|
+
}
|
package/solid.ts
CHANGED
package/types.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* ref: https://stackoverflow.com/questions/52489261/typescript-can-i-define-an-n-length-tuple-type
|
|
3
3
|
*/
|
|
4
4
|
import type { Frame, Fun } from 'refr'
|
|
5
|
-
import type { Nested,
|
|
5
|
+
import type { Nested, EventState } from 'reev/types'
|
|
6
6
|
|
|
7
7
|
export type Uniform = number | number[]
|
|
8
8
|
|
|
@@ -12,6 +12,14 @@ export type Attributes = Record<string, Attribute>
|
|
|
12
12
|
|
|
13
13
|
export type Uniforms = Record<string, Uniform>
|
|
14
14
|
|
|
15
|
+
export interface GLEvent {
|
|
16
|
+
mount(): void
|
|
17
|
+
clean(): void
|
|
18
|
+
mousemove(e: Event): void
|
|
19
|
+
resize(e?: Event): void
|
|
20
|
+
load(e?: Event, image?: HTMLImageElement): void
|
|
21
|
+
}
|
|
22
|
+
|
|
15
23
|
export interface GL {
|
|
16
24
|
(fun: Fun): GL
|
|
17
25
|
(shader: string): GL
|
|
@@ -38,12 +46,13 @@ export interface GL {
|
|
|
38
46
|
gl: any
|
|
39
47
|
pg: any
|
|
40
48
|
el: any
|
|
41
|
-
event:
|
|
49
|
+
event: EventState<GLEvent>
|
|
42
50
|
frame: Frame
|
|
43
51
|
stride: Nested<number> // @TODO Nested<(key: string, value: number: number[], ibo: number[]) => number>
|
|
44
52
|
location: Nested<any>
|
|
45
53
|
activeUnit: Nested<number>
|
|
46
54
|
uniformType: Nested<string>
|
|
55
|
+
vertexStride: Nested<number>
|
|
47
56
|
default: GL
|
|
48
57
|
/**
|
|
49
58
|
* setter
|
|
@@ -54,28 +63,13 @@ export interface GL {
|
|
|
54
63
|
setMount(frame: Fun): GL
|
|
55
64
|
setClean(frame: Fun): GL
|
|
56
65
|
setUniform(key: string, value: Uniform): GL
|
|
66
|
+
setUniform(target: { [key: string]: Uniform }): GL
|
|
57
67
|
setTexture(key: string, value: string): GL
|
|
68
|
+
setTexture(target: { [key: string]: string }): GL
|
|
58
69
|
setAttribute(key: string, value: Attribute, iboValue?: Attribute): GL
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
// value: Uniform,
|
|
63
|
-
// isMatrix: boolean
|
|
64
|
-
// ) => GL>,
|
|
65
|
-
// setTexture: Durable<(
|
|
66
|
-
// key: string,
|
|
67
|
-
// value: string,
|
|
68
|
-
// activeUnit: number
|
|
69
|
-
// ) => GL>,
|
|
70
|
-
// setAttribute: Durable<(
|
|
71
|
-
// key: string,
|
|
72
|
-
// value: Attribute,
|
|
73
|
-
// iboValue: Attribute
|
|
74
|
-
// ) => GL>,
|
|
75
|
-
// setConfig: Durable<<K extends keyof GLConfig>(
|
|
76
|
-
// key: K,
|
|
77
|
-
// value: GLConfig[K]
|
|
78
|
-
// ) => GL>,
|
|
70
|
+
setAttribute(target: { [key: string]: Attribute }): GL
|
|
71
|
+
setConfig(key?: keyof GL, value?: GL[keyof GL]): GL
|
|
72
|
+
setConfig(target?: Partial<GL>): GL
|
|
79
73
|
mount(): void
|
|
80
74
|
clean(): void
|
|
81
75
|
clear(key?: GLClearMode): void
|
|
@@ -84,10 +78,7 @@ export interface GL {
|
|
|
84
78
|
drawElements(key?: GLDrawMode): void
|
|
85
79
|
}
|
|
86
80
|
|
|
87
|
-
export type PrecisionMode =
|
|
88
|
-
| 'highp'
|
|
89
|
-
| 'mediump'
|
|
90
|
-
| 'lowp'
|
|
81
|
+
export type PrecisionMode = 'highp' | 'mediump' | 'lowp'
|
|
91
82
|
|
|
92
83
|
export type GLClearMode =
|
|
93
84
|
| 'COLOR_BUFFER_BIT'
|
|
@@ -103,7 +94,4 @@ export type GLDrawMode =
|
|
|
103
94
|
| 'TRIANGLE_FAN'
|
|
104
95
|
| 'TRIANGLES'
|
|
105
96
|
|
|
106
|
-
export type GLDrawType =
|
|
107
|
-
| 'UNSIGNED_BYTE'
|
|
108
|
-
| 'UNSIGNED_SHORT'
|
|
109
|
-
| 'UNSIGNED_INT'
|
|
97
|
+
export type GLDrawType = 'UNSIGNED_BYTE' | 'UNSIGNED_SHORT' | 'UNSIGNED_INT'
|
package/utils.ts
CHANGED
|
@@ -12,15 +12,15 @@ 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
|
|
15
|
+
export function includes(source: string, target: string) {
|
|
16
16
|
source = source.replace(/\s+/g, '')
|
|
17
17
|
target = target.replace(/\s+/g, '')
|
|
18
|
-
return source.
|
|
18
|
+
return source.includes(target)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export function concat(source: string, target: string, key = "") {
|
|
22
|
-
if (key === "" ||
|
|
23
|
-
if (!
|
|
22
|
+
if (key === "" || source.includes(key))
|
|
23
|
+
if (!includes(source, target))
|
|
24
24
|
return target + source
|
|
25
25
|
return source
|
|
26
26
|
}
|