glre 0.1.0 → 0.3.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 +1 -1
- package/index.cjs.js +1 -1
- package/index.develop.js +1 -1
- package/index.js +1 -1
- package/index.ts +43 -26
- package/package.json +1 -1
- package/types.ts +53 -12
package/events.ts
CHANGED
package/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("refr"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("refr"),t=require("reev");function n(e,t,n){var r=e.createShader(n);if(e.shaderSource(r,t),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS))return r;console.warn(e.getShaderInfoLog(r))}var r=function(e){return t.event({mount:function(t){var r=e.el=document.getElementById(e.id),o=e.gl=null==r?void 0:r.getContext("webgl"),i=n(o,e.frag,null==o?void 0:o.FRAGMENT_SHADER),a=n(o,e.vert,null==o?void 0:o.VERTEX_SHADER);e.pg=function(e,t,n){var r=e.createProgram();return e.attachShader(r,t),e.attachShader(r,n),e.linkProgram(r),e.getProgramParameter(r,e.LINK_STATUS)?(e.useProgram(r),r):(console.log(e.getProgramInfoLog(r)),null)}(o,a,i),window.addEventListener("resize",t.on("resize")),window.addEventListener("mousemove",t.on("mousemove")),t("resize"),e.frame()},clean:function(e){window.removeEventListener("resize",e.on("resize")),window.removeEventListener("mousemove",e.on("mousemove"))},mousemove:function(t,n){var r=n.clientX,o=n.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(r-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("mouse",e.mouse)},resize:function(t,n,r,o){void 0===r&&(r=0),void 0===o&&(o=0),e.size[0]=e.el.width=r||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("resolution",e.size)},load:function(t,n){e.setFrame((function(){var t=n.path[0],r=e.activeUnit(t.alt),o=e.location(t.alt),i=function(e,t){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),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(o,r),e.gl.activeTexture(e.gl["TEXTURE"+r]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},o=function(n){var o=function e(t){if(void 0===t&&(t=""),"function"==typeof t)return e.frame.mount(t)};o.id="myCanvas",o.frag="",o.vert="",o.size=[0,0],o.mouse=[0,0],o.count=6;var i=o.event=r(o),a=o.frame=e.frame();return o.lastActiveUnit=0,o.activeUnit=t.nested((function(){return o.lastActiveUnit++})),o.stride=t.nested((function(e,t,n){var r=n?Math.max.apply(Math,n)+1:o.count;return t.length/r<<0})),o.uniformType=t.nested((function(e,t,n){return void 0===n&&(n=!1),"number"==typeof t?"uniform1f":n?"uniformMatrix"+(Math.sqrt(t.length)<<0)+"fv":"uniform"+t.length+"fv"})),o.location=t.nested((function(e,t){var n,r;return void 0===t&&(t=!1),t?null==(n=o.gl)?void 0:n.getAttribLocation(o.pg,e):null==(r=o.gl)?void 0:r.getUniformLocation(o.pg,e)})),o.setDpr=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return void i.apply(void 0,["resize"].concat(t))||o},o.setSize=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return void i.apply(void 0,["resize"].concat(t))||o},o.setFrame=function(e){return void a.mount(e)||o},o.setMount=function(e){return void i.mount({mount:e})||o},o.setClean=function(e){return void i.mount({clean:e})||o},o.setConfig=t.durable((function(e,t){o[e]=t}),o),o.setConfig(defaultConfig),"string"==typeof n&&(n={id:n}),"object"==typeof n&&o.setConfig(n),o.setUniform=t.durable((function(e,t,n){void 0===n&&(n=!1);var r=o.uniformType(e,t,n);o.setFrame(n?function(){return o.gl[r](o.location(e),!1,t)}:function(){return o.gl[r](o.location(e),t)})}),o),o.setAttribute=t.durable((function(e,t,n){o.setFrame((function(){var r=o.gl,i=o.stride(e,t,n),a=o.location(e,!0);r.bindBuffer(r.ARRAY_BUFFER,function(e,t){if(t){var n=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,new Float32Array(t),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),n}}(r,t)),r.enableVertexAttribArray(a),r.vertexAttribPointer(a,i,r.FLOAT,!1,0,0),n&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,function(e,t){if(t){var n=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(t),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),n}}(r,n))}))}),o),o.setTexture=t.durable((function(e,t){var n=new Image;n.addEventListener("load",i.on("load"),!1),Object.assign(n,{src:t,alt:e,crossOrigin:"anonymous"})}),o),o.clear=function(e){return o.gl.clear(o.gl[e||"COLOR_BUFFER_BIT"])},o.viewport=function(e){var t;return(t=o.gl).viewport.apply(t,[0,0].concat(e||o.size))},o.drawArrays=function(e){return void 0===e&&(e="POINTS"),o.gl.drawArrays(o.gl[e],0,o.count)},o.drawElements=function(e,t){return void 0===e&&(e="TRIANGLES"),void 0===t&&(t="UNSIGNED_SHORT"),o.gl.drawElements(o.gl[e],o.count,o.gl[t],0)},o};exports.default=o,exports.gl=o;
|
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,t){"use strict";function r(e,n,t){var r=e.createShader(t);if(e.shaderSource(r,n),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS))return r;console.warn(e.getShaderInfoLog(r))}var
|
|
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,t){"use strict";function r(e,n,t){var r=e.createShader(t);if(e.shaderSource(r,n),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS))return r;console.warn(e.getShaderInfoLog(r))}var o=function(e){return t.event({mount:function(n){var t=e.el=document.getElementById(e.id),o=e.gl=null==t?void 0:t.getContext("webgl"),i=r(o,e.frag,null==o?void 0:o.FRAGMENT_SHADER),a=r(o,e.vert,null==o?void 0:o.VERTEX_SHADER);e.pg=function(e,n,t){var r=e.createProgram();return e.attachShader(r,n),e.attachShader(r,t),e.linkProgram(r),e.getProgramParameter(r,e.LINK_STATUS)?(e.useProgram(r),r):(console.log(e.getProgramInfoLog(r)),null)}(o,a,i),window.addEventListener("resize",n.on("resize")),window.addEventListener("mousemove",n.on("mousemove")),n("resize"),e.frame()},clean:function(e){window.removeEventListener("resize",e.on("resize")),window.removeEventListener("mousemove",e.on("mousemove"))},mousemove:function(n,t){var r=t.clientX,o=t.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(r-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("mouse",e.mouse)},resize:function(n,t,r,o){void 0===r&&(r=0),void 0===o&&(o=0),e.size[0]=e.el.width=r||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("resolution",e.size)},load:function(n,t){e.setFrame((function(){var n=t.path[0],r=e.activeUnit(n.alt),o=e.location(n.alt),i=function(e,n){var t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),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),t}(e.gl,n);e.setFrame((function(){return e.gl.uniform1i(o,r),e.gl.activeTexture(e.gl["TEXTURE"+r]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},i=function(e){var r=function e(n){if(void 0===n&&(n=""),"function"==typeof n)return e.frame.mount(n)};r.id="myCanvas",r.frag="",r.vert="",r.size=[0,0],r.mouse=[0,0],r.count=6;var i=r.event=o(r),a=r.frame=n.frame();return r.lastActiveUnit=0,r.activeUnit=t.nested((function(){return r.lastActiveUnit++})),r.stride=t.nested((function(e,n,t){var o=t?Math.max.apply(Math,t)+1:r.count;return n.length/o<<0})),r.uniformType=t.nested((function(e,n,t){return void 0===t&&(t=!1),"number"==typeof n?"uniform1f":t?"uniformMatrix"+(Math.sqrt(n.length)<<0)+"fv":"uniform"+n.length+"fv"})),r.location=t.nested((function(e,n){var t,o;return void 0===n&&(n=!1),n?null==(t=r.gl)?void 0:t.getAttribLocation(r.pg,e):null==(o=r.gl)?void 0:o.getUniformLocation(r.pg,e)})),r.setDpr=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return void i.apply(void 0,["resize"].concat(n))||r},r.setSize=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return void i.apply(void 0,["resize"].concat(n))||r},r.setFrame=function(e){return void a.mount(e)||r},r.setMount=function(e){return void i.mount({mount:e})||r},r.setClean=function(e){return void i.mount({clean:e})||r},r.setConfig=t.durable((function(e,n){r[e]=n}),r),r.setConfig(defaultConfig),"string"==typeof e&&(e={id:e}),"object"==typeof e&&r.setConfig(e),r.setUniform=t.durable((function(e,n,t){void 0===t&&(t=!1);var o=r.uniformType(e,n,t);r.setFrame(t?function(){return r.gl[o](r.location(e),!1,n)}:function(){return r.gl[o](r.location(e),n)})}),r),r.setAttribute=t.durable((function(e,n,t){r.setFrame((function(){var o=r.gl,i=r.stride(e,n,t),a=r.location(e,!0);o.bindBuffer(o.ARRAY_BUFFER,function(e,n){if(n){var t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array(n),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),t}}(o,n)),o.enableVertexAttribArray(a),o.vertexAttribPointer(a,i,o.FLOAT,!1,0,0),t&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,function(e,n){if(n){var t=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(n),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),t}}(o,t))}))}),r),r.setTexture=t.durable((function(e,n){var t=new Image;t.addEventListener("load",i.on("load"),!1),Object.assign(t,{src:n,alt:e,crossOrigin:"anonymous"})}),r),r.clear=function(e){return r.gl.clear(r.gl[e||"COLOR_BUFFER_BIT"])},r.viewport=function(e){var n;return(n=r.gl).viewport.apply(n,[0,0].concat(e||r.size))},r.drawArrays=function(e){return void 0===e&&(e="POINTS"),r.gl.drawArrays(r.gl[e],0,r.count)},r.drawElements=function(e,n){return void 0===e&&(e="TRIANGLES"),void 0===n&&(n="UNSIGNED_SHORT"),r.gl.drawElements(r.gl[e],r.count,r.gl[n],0)},r};e.default=i,e.gl=i,Object.defineProperty(e,"__esModule",{value:!0})}));
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{frame as e}from"refr";import{event as n,nested as t,durable as r}from"reev";function o(e,n,t){var r=e.createShader(t);if(e.shaderSource(r,n),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS))return r;console.warn(e.getShaderInfoLog(r))}var i=function(e){return n({mount:function(n){var t=e.el=document.getElementById(e.id),r=e.gl=null==t?void 0:t.getContext("webgl"),i=o(r,e.frag,null==r?void 0:r.FRAGMENT_SHADER),
|
|
1
|
+
import{frame as e}from"refr";import{event as n,nested as t,durable as r}from"reev";function o(e,n,t){var r=e.createShader(t);if(e.shaderSource(r,n),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS))return r;console.warn(e.getShaderInfoLog(r))}var i=function(e){return n({mount:function(n){var t=e.el=document.getElementById(e.id),r=e.gl=null==t?void 0:t.getContext("webgl"),i=o(r,e.frag,null==r?void 0:r.FRAGMENT_SHADER),a=o(r,e.vert,null==r?void 0:r.VERTEX_SHADER);e.pg=function(e,n,t){var r=e.createProgram();return e.attachShader(r,n),e.attachShader(r,t),e.linkProgram(r),e.getProgramParameter(r,e.LINK_STATUS)?(e.useProgram(r),r):(console.log(e.getProgramInfoLog(r)),null)}(r,a,i),window.addEventListener("resize",n.on("resize")),window.addEventListener("mousemove",n.on("mousemove")),n("resize"),e.frame()},clean:function(e){window.removeEventListener("resize",e.on("resize")),window.removeEventListener("mousemove",e.on("mousemove"))},mousemove:function(n,t){var r=t.clientX,o=t.clientY,i=e.size,a=i[0],u=i[1];e.mouse[0]=(r-a/2)/(a/2),e.mouse[1]=-(o-u/2)/(u/2),e.setUniform("mouse",e.mouse)},resize:function(n,t,r,o){void 0===r&&(r=0),void 0===o&&(o=0),e.size[0]=e.el.width=r||window.innerWidth,e.size[1]=e.el.height=o||window.innerHeight,e.setUniform("resolution",e.size)},load:function(n,t){e.setFrame((function(){var n=t.path[0],r=e.activeUnit(n.alt),o=e.location(n.alt),i=function(e,n){var t=e.createTexture();return e.bindTexture(e.TEXTURE_2D,t),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),t}(e.gl,n);e.setFrame((function(){return e.gl.uniform1i(o,r),e.gl.activeTexture(e.gl["TEXTURE"+r]),e.gl.bindTexture(e.gl.TEXTURE_2D,i),!0}))}))}})},a=function(n){var o=function e(n){if(void 0===n&&(n=""),"function"==typeof n)return e.frame.mount(n)};o.id="myCanvas",o.frag="",o.vert="",o.size=[0,0],o.mouse=[0,0],o.count=6;var a=o.event=i(o),u=o.frame=e();return o.lastActiveUnit=0,o.activeUnit=t((function(){return o.lastActiveUnit++})),o.stride=t((function(e,n,t){var r=t?Math.max.apply(Math,t)+1:o.count;return n.length/r<<0})),o.uniformType=t((function(e,n,t){return void 0===t&&(t=!1),"number"==typeof n?"uniform1f":t?"uniformMatrix"+(Math.sqrt(n.length)<<0)+"fv":"uniform"+n.length+"fv"})),o.location=t((function(e,n){var t,r;return void 0===n&&(n=!1),n?null==(t=o.gl)?void 0:t.getAttribLocation(o.pg,e):null==(r=o.gl)?void 0:r.getUniformLocation(o.pg,e)})),o.setDpr=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return void a.apply(void 0,["resize"].concat(n))||o},o.setSize=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return void a.apply(void 0,["resize"].concat(n))||o},o.setFrame=function(e){return void u.mount(e)||o},o.setMount=function(e){return void a.mount({mount:e})||o},o.setClean=function(e){return void a.mount({clean:e})||o},o.setConfig=r((function(e,n){o[e]=n}),o),o.setConfig(defaultConfig),"string"==typeof n&&(n={id:n}),"object"==typeof n&&o.setConfig(n),o.setUniform=r((function(e,n,t){void 0===t&&(t=!1);var r=o.uniformType(e,n,t);o.setFrame(t?function(){return o.gl[r](o.location(e),!1,n)}:function(){return o.gl[r](o.location(e),n)})}),o),o.setAttribute=r((function(e,n,t){o.setFrame((function(){var r=o.gl,i=o.stride(e,n,t),a=o.location(e,!0);r.bindBuffer(r.ARRAY_BUFFER,function(e,n){if(n){var t=e.createBuffer();return e.bindBuffer(e.ARRAY_BUFFER,t),e.bufferData(e.ARRAY_BUFFER,new Float32Array(n),e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,null),t}}(r,n)),r.enableVertexAttribArray(a),r.vertexAttribPointer(a,i,r.FLOAT,!1,0,0),t&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,function(e,n){if(n){var t=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),e.bufferData(e.ELEMENT_ARRAY_BUFFER,new Int16Array(n),e.STATIC_DRAW),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),t}}(r,t))}))}),o),o.setTexture=r((function(e,n){var t=new Image;t.addEventListener("load",a.on("load"),!1),Object.assign(t,{src:n,alt:e,crossOrigin:"anonymous"})}),o),o.clear=function(e){return o.gl.clear(o.gl[e||"COLOR_BUFFER_BIT"])},o.viewport=function(e){var n;return(n=o.gl).viewport.apply(n,[0,0].concat(e||o.size))},o.drawArrays=function(e){return void 0===e&&(e="POINTS"),o.gl.drawArrays(o.gl[e],0,o.count)},o.drawElements=function(e,n){return void 0===e&&(e="TRIANGLES"),void 0===n&&(n="UNSIGNED_SHORT"),o.gl.drawElements(o.gl[e],o.count,o.gl[n],0)},o};export{a as default,a as gl};
|
package/index.ts
CHANGED
|
@@ -1,33 +1,32 @@
|
|
|
1
1
|
import { frame } from 'refr'
|
|
2
|
-
import { nested, durable } from 'reev'
|
|
3
2
|
import { glEvent } from './events'
|
|
3
|
+
import { durable, nested } from 'reev'
|
|
4
4
|
import { createVbo, createIbo } from './utils'
|
|
5
5
|
import type { GL, GLConfig } from './types'
|
|
6
6
|
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
export default gl
|
|
10
|
-
|
|
11
|
-
export function gl(config: GLConfig = {}) {
|
|
7
|
+
export const gl = (config?: string | Partial<GLConfig>) => {
|
|
12
8
|
const self = ((arg = '') => {
|
|
13
9
|
if (typeof arg === 'function') return self.frame.mount(arg)
|
|
14
10
|
}) as GL
|
|
15
11
|
|
|
16
|
-
//
|
|
17
|
-
self.id =
|
|
18
|
-
self.
|
|
19
|
-
self.
|
|
20
|
-
self.
|
|
21
|
-
self.
|
|
22
|
-
self.
|
|
23
|
-
self.lastActiveUnit = config.lastActiveUnit ?? 0
|
|
12
|
+
// default state
|
|
13
|
+
self.id = 'myCanvas'
|
|
14
|
+
self.frag = ''; // @TODO feat: add default fragment shader
|
|
15
|
+
self.vert = ''; // @TODO feat: add default vertex shader
|
|
16
|
+
self.size = [0, 0]
|
|
17
|
+
self.mouse = [0, 0]
|
|
18
|
+
self.count = 6
|
|
24
19
|
|
|
25
20
|
// core state
|
|
26
|
-
self.event = glEvent(self)
|
|
27
|
-
self.frame = frame()
|
|
28
|
-
self.
|
|
21
|
+
const ev = (self.event = glEvent(self))
|
|
22
|
+
const fr = (self.frame = frame())
|
|
23
|
+
self.lastActiveUnit = 0
|
|
29
24
|
self.activeUnit = nested(() => self.lastActiveUnit++)
|
|
30
|
-
self.
|
|
25
|
+
self.stride = nested((_key, value, iboValue) => {
|
|
26
|
+
const count = iboValue ? Math.max(...iboValue) + 1 : self.count;
|
|
27
|
+
return (value.length / count) << 0;
|
|
28
|
+
})
|
|
29
|
+
self.uniformType = nested((_key, value, isMatrix = false) => {
|
|
31
30
|
if (typeof value === 'number') return `uniform1f`
|
|
32
31
|
if (!isMatrix) return `uniform${value.length}fv`
|
|
33
32
|
else return `uniformMatrix${Math.sqrt(value.length) << 0}fv`
|
|
@@ -39,11 +38,17 @@ export function gl(config: GLConfig = {}) {
|
|
|
39
38
|
})
|
|
40
39
|
|
|
41
40
|
// setter
|
|
42
|
-
self.setDpr = (...args) => void
|
|
43
|
-
self.setSize = (...args) => void
|
|
44
|
-
self.setFrame = (frame) => void
|
|
45
|
-
self.setMount = (mount) => void
|
|
46
|
-
self.setClean = (clean) => void
|
|
41
|
+
self.setDpr = (...args) => void ev('resize', ...args) || self
|
|
42
|
+
self.setSize = (...args) => void ev('resize', ...args) || self
|
|
43
|
+
self.setFrame = (frame) => void fr.mount(frame) || self
|
|
44
|
+
self.setMount = (mount) => void ev.mount({ mount }) || self
|
|
45
|
+
self.setClean = (clean) => void ev.mount({ clean }) || self
|
|
46
|
+
self.setConfig = durable((key, value) => void (self[key] = value), self)
|
|
47
|
+
|
|
48
|
+
// init config
|
|
49
|
+
self.setConfig(defaultConfig)
|
|
50
|
+
if (typeof config === "string") config = { id: config }
|
|
51
|
+
if (typeof config === "object") self.setConfig(config)
|
|
47
52
|
|
|
48
53
|
// uniform
|
|
49
54
|
self.setUniform = durable((key, value, isMatrix = false) => {
|
|
@@ -57,7 +62,7 @@ export function gl(config: GLConfig = {}) {
|
|
|
57
62
|
self.setAttribute = durable((key, value, iboValue) => {
|
|
58
63
|
self.setFrame(() => {
|
|
59
64
|
const { gl } = self
|
|
60
|
-
const stride = self.stride(key, value)
|
|
65
|
+
const stride = self.stride(key, value, iboValue)
|
|
61
66
|
const location = self.location(key, true)
|
|
62
67
|
gl.bindBuffer(gl.ARRAY_BUFFER, createVbo(gl, value))
|
|
63
68
|
gl.enableVertexAttribArray(location)
|
|
@@ -70,9 +75,21 @@ export function gl(config: GLConfig = {}) {
|
|
|
70
75
|
// texture
|
|
71
76
|
self.setTexture = durable((key, src) => {
|
|
72
77
|
const image = new Image()
|
|
73
|
-
image.addEventListener('load',
|
|
78
|
+
image.addEventListener('load', ev.on('load'), false)
|
|
74
79
|
Object.assign(image, { src, alt: key, crossOrigin: 'anonymous' })
|
|
75
80
|
}, self)
|
|
76
81
|
|
|
77
|
-
|
|
82
|
+
// shorthands
|
|
83
|
+
self.clear = (key) => self.gl.clear(self.gl[key || "COLOR_BUFFER_BIT"])
|
|
84
|
+
self.viewport = (size) => self.gl.viewport(0, 0, ...(size || self.size))
|
|
85
|
+
self.drawArrays = (mode = 'POINTS') =>
|
|
86
|
+
self.gl.drawArrays(self.gl[mode], 0, self.count)
|
|
87
|
+
self.drawElements = (mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') =>
|
|
88
|
+
self.gl.drawElements(self.gl[mode], self.count, self.gl[type], 0)
|
|
89
|
+
|
|
90
|
+
return self;
|
|
78
91
|
}
|
|
92
|
+
|
|
93
|
+
export default gl
|
|
94
|
+
|
|
95
|
+
|
package/package.json
CHANGED
package/types.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GL } from './types';
|
|
1
2
|
/**
|
|
2
3
|
* ref: https://stackoverflow.com/questions/52489261/typescript-can-i-define-an-n-length-tuple-type
|
|
3
4
|
*/
|
|
@@ -32,7 +33,7 @@ export interface GL {
|
|
|
32
33
|
el: any
|
|
33
34
|
event: Event
|
|
34
35
|
frame: Frame
|
|
35
|
-
stride: Nested<number>
|
|
36
|
+
stride: Nested<number> // @TODO Nested<(key: string, value: number: number[], ibo: number[]) => number>
|
|
36
37
|
location: Nested<any>
|
|
37
38
|
activeUnit: Nested<number>
|
|
38
39
|
uniformType: Nested<string>
|
|
@@ -45,18 +46,58 @@ export interface GL {
|
|
|
45
46
|
setMount(frame: Fun): GL
|
|
46
47
|
setClean(frame: Fun): GL
|
|
47
48
|
setUniform(key: string, value: Uniform): GL
|
|
48
|
-
setAttribute(key: string, value: Attribute, iboValue?: Attribute): GL
|
|
49
49
|
setTexture(key: string, value: string): GL
|
|
50
|
+
setAttribute(key: string, value: Attribute, iboValue?: Attribute): GL
|
|
51
|
+
setConfig<K extends keyof GLConfig>(key: K, value: GLConfig[K]): GL
|
|
52
|
+
// setUniform: Durable<(
|
|
53
|
+
// key: string,
|
|
54
|
+
// value: Uniform,
|
|
55
|
+
// isMatrix: boolean
|
|
56
|
+
// ) => GL>,
|
|
57
|
+
// setTexture: Durable<(
|
|
58
|
+
// key: string,
|
|
59
|
+
// value: string,
|
|
60
|
+
// activeUnit: number
|
|
61
|
+
// ) => GL>,
|
|
62
|
+
// setAttribute: Durable<(
|
|
63
|
+
// key: string,
|
|
64
|
+
// value: Attribute,
|
|
65
|
+
// iboValue: Attribute
|
|
66
|
+
// ) => GL>,
|
|
67
|
+
// setConfig: Durable<<K extends keyof GLConfig>(
|
|
68
|
+
// key: K,
|
|
69
|
+
// value: GLConfig[K]
|
|
70
|
+
// ) => GL>,
|
|
71
|
+
clear(key?: GLClearMode): void
|
|
72
|
+
viewport(size: [number, number]): void
|
|
73
|
+
drawArrays(key?: GLDrawMode): void
|
|
74
|
+
drawElements(key?: GLDrawMode): void
|
|
50
75
|
}
|
|
51
76
|
|
|
52
77
|
export interface GLConfig {
|
|
53
|
-
id
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
78
|
+
id: string
|
|
79
|
+
frag: string
|
|
80
|
+
vert: string
|
|
81
|
+
size: [number, number]
|
|
82
|
+
mouse: [number, number]
|
|
83
|
+
count: number
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export type GLClearMode =
|
|
87
|
+
| 'COLOR_BUFFER_BIT'
|
|
88
|
+
| 'DEPTH_BUFFER_BIT'
|
|
89
|
+
| 'STENCIL_BUFFER_BIT'
|
|
90
|
+
|
|
91
|
+
export type GLDrawMode =
|
|
92
|
+
| 'POINTS'
|
|
93
|
+
| 'LINE_STRIP'
|
|
94
|
+
| 'LINE_LOOP'
|
|
95
|
+
| 'LINES'
|
|
96
|
+
| 'TRIANGLE_STRIP'
|
|
97
|
+
| 'TRIANGLE_FAN'
|
|
98
|
+
| 'TRIANGLES'
|
|
99
|
+
|
|
100
|
+
export type GLDrawType =
|
|
101
|
+
| 'UNSIGNED_BYTE'
|
|
102
|
+
| 'UNSIGNED_SHORT'
|
|
103
|
+
| 'UNSIGNED_INT'
|