glre 0.19.0 → 0.21.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/README.md +250 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/dist/native.d.ts +11 -10
- package/dist/native.js +4 -4
- package/dist/native.js.map +1 -1
- package/dist/native.mjs +4 -4
- package/dist/native.mjs.map +1 -1
- package/dist/react.d.ts +6 -59
- package/dist/react.js +4 -4
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +4 -4
- package/dist/react.mjs.map +1 -1
- package/dist/solid.d.ts +12 -11
- package/dist/solid.js +4 -4
- package/dist/solid.js.map +1 -1
- package/dist/solid.mjs +4 -4
- package/dist/solid.mjs.map +1 -1
- package/dist/{types-20446758.d.ts → types-f429c8b1.d.ts} +4 -3
- package/package.json +7 -2
- package/index.ts +0 -202
- package/native.ts +0 -64
- package/qwik.ts +0 -42
- package/react.ts +0 -59
- package/solid.ts +0 -52
- package/test/index.test.ts +0 -5
- package/test/utils.test.ts +0 -43
- package/tsup.config.ts +0 -16
- package/types.ts +0 -98
- package/utils.ts +0 -210
package/dist/solid.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../solid.ts","../index.ts","../utils.ts"],"sourcesContent":["import { onMount, onCleanup } from 'solid-js'\nimport { frame } from 'refr'\nimport { createTF, gl } from './index'\nimport { GL } from './types'\nimport type { Fun } from 'reev/types'\n\nexport const onGL = (props?: Partial<GL>, self = gl) => {\n const memo = {\n ref(target: unknown) {\n if (target) {\n self.target = target\n self.mount()\n }\n },\n mount() {\n self.el = self.target\n self.gl = self.target.getContext('webgl2')\n self.init()\n self.resize()\n frame.start()\n window.addEventListener('resize', self.resize)\n window.addEventListener('mousemove', self.mousemove)\n },\n clean() {\n self(props)(memo)\n frame.cancel()\n window.removeEventListener('resize', self.resize)\n window.removeEventListener('mousemove', self.mousemove)\n },\n }\n onCleanup(self.clean)\n return self(props)(memo)\n}\n\nexport const onTF = (props?: Partial<GL>, self = gl) => {\n const tf = createTF(props, self)\n onMount(() => tf.mount())\n onCleanup(() => tf.clean())\n return tf\n}\n\nexport const onFrame = (fun: Fun, self = gl) => {\n onMount(() => self('render', fun))\n}\n\nexport const setTexture = (props: any, self = gl) => {\n return self.texture(props)\n}\n\nexport const setAttribute = (props: any, self = gl) => {\n return self.attribute(props)\n}\n","import { event, durable, nested } from 'reev'\nimport { queue, frame } from 'refr'\nimport {\n uniformType,\n vertexStride,\n createProgram,\n createTfProgram,\n createShader,\n createAttribute,\n createTexture,\n createVbo,\n createIbo,\n activeTexture,\n} from './utils'\nimport type { GL } from './types'\n\nconst a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]\n\nconst _defaultVertex = `\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n`\n\nconst _defaultFragment = `\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n`\n\nlet iTime = performance.now(),\n iPrevTime = 0,\n iDeltaTime = 0\n\nexport const createGL = (props?: Partial<GL>) => {\n const init = () => {\n self(props)\n const gl = self.gl\n const _v = self.vs || self.vert || self.vertex\n const _f = self.fs || self.frag || self.fragment\n const vs = createShader(gl, _v, gl.VERTEX_SHADER)\n const fs = createShader(gl, _f, gl.FRAGMENT_SHADER)\n if (self.count === 6) self.attribute({ a_position })\n frame(() => void self.render() || 1)\n self.pg = self.varying\n ? createTfProgram(gl, vs, fs, self.varying)\n : createProgram(gl, vs, fs)\n self.lastActiveUnit = 0\n self.activeUnit = nested(() => self.lastActiveUnit++)\n self.location = nested((key, isAttribute = false) => {\n return isAttribute\n ? gl?.getAttribLocation(self.pg, key)\n : gl?.getUniformLocation(self.pg, key)\n })\n }\n\n const render = () => {\n self.gl.useProgram(self.pg)\n self.frame.flush()\n iPrevTime = iTime\n iTime = performance.now() / 1000\n iDeltaTime = iTime - iPrevTime\n self.uniform({ iTime, iPrevTime, iDeltaTime })\n }\n\n const resize = (\n _e: any,\n width = self.width || window.innerWidth,\n height = self.height || window.innerHeight\n ) => {\n self.size[0] = self.el.width = width\n self.size[1] = self.el.height = height\n self.uniform('iResolution', self.size)\n }\n\n const mousemove = (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = self.size\n const { top, left } = self.el.getBoundingClientRect()\n self.mouse[0] = (x - top - w / 2) / (w / 2)\n self.mouse[1] = -(y - left - h / 2) / (h / 2)\n self.uniform('iMouse', self.mouse)\n }\n\n const load = (_: any, image: any) => {\n self.frame(() => {\n const loc = self.location(image.alt)\n const unit = self.activeUnit(image.alt)\n const tex = createTexture(self.gl, image)\n self.frame(() => {\n activeTexture(self.gl, loc, unit, tex)\n return true\n })\n })\n }\n\n const clear = (key = 'COLOR_BUFFER_BIT') => {\n self.gl.clear(self.gl[key])\n }\n\n const viewport = (size: number[] = self.size) => {\n self.gl.viewport(0, 0, ...size)\n }\n\n const drawArrays = (mode = 'TRIANGLES') => {\n self.gl.drawArrays(self.gl[mode], 0, self.count)\n }\n\n const drawElements = (mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') => {\n mode = self.gl[mode]\n type = self.gl[type]\n self.gl.drawElements(mode, self.count, type, 0)\n }\n\n const self = event<Partial<GL>>({\n vertex: _defaultVertex,\n fragment: _defaultFragment,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n counter: 0,\n init,\n render,\n resize,\n mousemove,\n load,\n clear,\n viewport,\n drawArrays,\n drawElements,\n }) as GL\n\n const _texture = (\n alt: string,\n src: string,\n crossOrigin = 'anonymous'\n ) => {\n if (typeof window === 'undefined') return\n const image = new Image()\n const callback = (_: any) => self.load(_, image)\n image.addEventListener('load', callback, false)\n Object.assign(image, { src, alt, crossOrigin })\n }\n\n const _uniform = (key: string, value = 0, isMatrix = false) => {\n const type = uniformType(value, isMatrix)\n self.frame(() => {\n const loc = self.location(key)\n if (isMatrix) self.gl[type](loc, false, value)\n else self.gl[type](loc, value)\n })\n }\n\n const _attribute = (\n key: string,\n value: number[],\n iboValue?: number[]\n ) => {\n self.frame(() => {\n const loc = self.location(key, true)\n const vbo = createVbo(self.gl, value)\n const ibo = createIbo(self.gl, iboValue)\n const n = self.count\n const stride = vertexStride(n, value, iboValue)\n createAttribute(self.gl, stride, loc, vbo, ibo)\n })\n }\n\n self.frame = queue()\n self.texture = durable(_texture)\n self.uniform = durable(_uniform)\n self.attribute = durable(_attribute)\n\n return self\n}\n\nexport const gl = createGL()\n\nexport const createTF = (props?: Partial<GL>, self = gl) => {\n const mount = () => {\n tf(props)\n tf.el = self.el\n tf.gl = self.gl\n tf.frame = self.frame\n tf.init()\n self({ resize: tf.resize, mousemove: tf.mousemove })\n }\n\n const clean = () => {\n tf(props)\n self({ resize: tf.resize, mousemove: tf.mousemove })\n }\n\n const tf = createGL()\n\n tf({ mount, clean })\n return tf\n}\n\nexport default gl\n","/**\n * utils\n */\nexport const uniformType = (value: number | number[], isMatrix = false) => {\n let length = typeof value === 'number' ? 0 : value?.length\n if (!length) return `uniform1f`\n if (!isMatrix) return `uniform${length}fv`\n length = Math.sqrt(length) << 0\n return `uniformMatrix${length}fv`\n}\n\nexport const vertexStride = (\n count: number,\n value: number[],\n iboValue?: number[]\n) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n if (stride !== stride << 0)\n console.warn(`Vertex Stride Error: count ${count} is mismatch`)\n return stride << 0\n}\n\n/**\n * graphics\n */\nexport const createShader = (gl: any, source: string, type: unknown) => {\n const shader = gl.createShader(type)\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n if (gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n return shader\n } else throw 'Could not compile glsl\\n\\n' + gl.getShaderInfoLog(shader)\n}\n\nexport const createProgram = (gl: any, vs: any, fs: any) => {\n const program = gl.createProgram()\n gl.attachShader(program, vs)\n gl.attachShader(program, fs)\n gl.linkProgram(program)\n if (gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.useProgram(program)\n return program\n } else {\n console.log(gl.getProgramInfoLog(program))\n return null\n }\n}\n\nexport const createTfProgram = (gl: any, vs: any, fs: any, varyings?: any) => {\n const pg = gl.createProgram()\n gl.attachShader(pg, vs)\n gl.attachShader(pg, fs)\n gl.transformFeedbackVaryings(pg, varyings, gl.SEPARATE_ATTRIBS)\n gl.linkProgram(pg)\n if (gl.getProgramParameter(pg, gl.LINK_STATUS)) {\n gl.useProgram(pg)\n return pg\n } else {\n console.warn(gl.getProgramInfoLog(pg))\n return null\n }\n}\n\nexport const createVbo = (gl: any, data: number[]) => {\n if (!data) return\n const vbo = gl.createBuffer()\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo)\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW)\n gl.bindBuffer(gl.ARRAY_BUFFER, null)\n return vbo\n}\n\nexport const createIbo = (gl: any, data?: number[]) => {\n if (!data) return\n const ibo = gl.createBuffer()\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibo)\n gl.bufferData(\n gl.ELEMENT_ARRAY_BUFFER,\n new Int16Array(data),\n gl.STATIC_DRAW\n )\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null)\n return ibo\n}\n\nexport const createAttribute = (\n gl: any,\n stride: number,\n location: any,\n vbo: any,\n ibo: any\n) => {\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo)\n gl.enableVertexAttribArray(location)\n gl.vertexAttribPointer(location, stride, gl.FLOAT, false, 0, 0)\n if (ibo) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\nexport const createFramebuffer = (gl: any, width: number, height: number) => {\n const frameBuffer = gl.createFramebuffer()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n const renderBuffer = gl.createRenderbuffer()\n gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer)\n gl.renderbufferStorage(\n gl.RENDERBUFFER,\n gl.DEPTH_COMPONENT16,\n width,\n height\n )\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_ATTACHMENT,\n gl.RENDERBUFFER,\n renderBuffer\n )\n const texture = gl.createTexture()\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null\n )\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0\n )\n gl.bindTexture(gl.TEXTURE_2D, null)\n gl.bindRenderbuffer(gl.RENDERBUFFER, null)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n return { frameBuffer, renderBuffer, texture }\n}\n\nexport const createFramebufferFloat = (\n gl: any,\n ext: any,\n width: number,\n height: number\n) => {\n const flg =\n ext.textureFloat != null\n ? gl.FLOAT\n : ext.textureHalfFloat.HALF_FLOAT_OES\n const frameBuffer = gl.createFramebuffer()\n const texture = gl.createTexture()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n flg,\n null\n )\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0\n )\n gl.bindTexture(gl.TEXTURE_2D, null)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n return { frameBuffer, texture }\n}\n\nexport const createTexture = (gl: any, img: any) => {\n const texture = gl.createTexture()\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img)\n gl.generateMipmap(gl.TEXTURE_2D)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.bindTexture(gl.TEXTURE_2D, null)\n return texture\n}\n\nexport const activeTexture = (\n gl: any,\n location: any,\n activeUnit: any,\n texture: any\n) => {\n gl.uniform1i(location, activeUnit)\n gl.activeTexture(gl['TEXTURE' + activeUnit])\n gl.bindTexture(gl.TEXTURE_2D, texture)\n}\n"],"mappings":"AAAA,OAAS,WAAAA,EAAS,aAAAC,MAAiB,WACnC,OAAS,SAAAC,MAAa,OCDtB,OAAS,SAAAC,EAAO,WAAAC,EAAS,UAAAC,MAAc,OACvC,OAAS,SAAAC,EAAO,SAAAC,MAAa,OCEtB,IAAMC,EAAc,CAACC,EAA0BC,EAAW,KAAU,CACnE,IAAIC,EAAS,OAAOF,GAAU,SAAW,EAAIA,GAAO,OACpD,OAAKE,EACAD,GACLC,EAAS,KAAK,KAAKA,CAAM,GAAK,EACvB,gBAAgBA,CAAM,MAFP,UAAUA,CAAM,KADlB,WAI5B,EAEaC,EAAe,CACpBC,EACAJ,EACAK,IACH,CACOA,IAAUD,EAAQ,KAAK,IAAI,GAAGC,CAAQ,EAAI,GAC9C,IAAMC,EAASN,EAAM,OAASI,EAC9B,OAAIE,IAAWA,GAAU,GACjB,QAAQ,KAAK,8BAA8BF,CAAK,cAAc,EAC/DE,GAAU,CACzB,EAKaC,EAAe,CAACC,EAASC,EAAgBC,IAAkB,CAChE,IAAMC,EAASH,EAAG,aAAaE,CAAI,EAGnC,GAFAF,EAAG,aAAaG,EAAQF,CAAM,EAC9BD,EAAG,cAAcG,CAAM,EACnBH,EAAG,mBAAmBG,EAAQH,EAAG,cAAc,EAC3C,OAAOG,EACR,KAAM;AAAA;AAAA,EAA+BH,EAAG,iBAAiBG,CAAM,CAC9E,EAEaC,EAAgB,CAACJ,EAASK,EAASC,IAAY,CACpD,IAAMC,EAAUP,EAAG,cAAc,EAIjC,OAHAA,EAAG,aAAaO,EAASF,CAAE,EAC3BL,EAAG,aAAaO,EAASD,CAAE,EAC3BN,EAAG,YAAYO,CAAO,EAClBP,EAAG,oBAAoBO,EAASP,EAAG,WAAW,GAC1CA,EAAG,WAAWO,CAAO,EACdA,IAEP,QAAQ,IAAIP,EAAG,kBAAkBO,CAAO,CAAC,EAClC,KAEvB,EAEaC,EAAkB,CAACR,EAASK,EAASC,EAASG,IAAmB,CACtE,IAAMC,EAAKV,EAAG,cAAc,EAK5B,OAJAA,EAAG,aAAaU,EAAIL,CAAE,EACtBL,EAAG,aAAaU,EAAIJ,CAAE,EACtBN,EAAG,0BAA0BU,EAAID,EAAUT,EAAG,gBAAgB,EAC9DA,EAAG,YAAYU,CAAE,EACbV,EAAG,oBAAoBU,EAAIV,EAAG,WAAW,GACrCA,EAAG,WAAWU,CAAE,EACTA,IAEP,QAAQ,KAAKV,EAAG,kBAAkBU,CAAE,CAAC,EAC9B,KAEvB,EAEaC,EAAY,CAACX,EAASY,IAAmB,CAC9C,GAAI,CAACA,EAAM,OACX,IAAMC,EAAMb,EAAG,aAAa,EAC5B,OAAAA,EAAG,WAAWA,EAAG,aAAca,CAAG,EAClCb,EAAG,WAAWA,EAAG,aAAc,IAAI,aAAaY,CAAI,EAAGZ,EAAG,WAAW,EACrEA,EAAG,WAAWA,EAAG,aAAc,IAAI,EAC5Ba,CACf,EAEaC,EAAY,CAACd,EAASY,IAAoB,CAC/C,GAAI,CAACA,EAAM,OACX,IAAMG,EAAMf,EAAG,aAAa,EAC5B,OAAAA,EAAG,WAAWA,EAAG,qBAAsBe,CAAG,EAC1Cf,EAAG,WACKA,EAAG,qBACH,IAAI,WAAWY,CAAI,EACnBZ,EAAG,WACX,EACAA,EAAG,WAAWA,EAAG,qBAAsB,IAAI,EACpCe,CACf,EAEaC,EAAkB,CACvBhB,EACAF,EACAmB,EACAJ,EACAE,IACH,CACGf,EAAG,WAAWA,EAAG,aAAca,CAAG,EAClCb,EAAG,wBAAwBiB,CAAQ,EACnCjB,EAAG,oBAAoBiB,EAAUnB,EAAQE,EAAG,MAAO,GAAO,EAAG,CAAC,EAC1De,GAAKf,EAAG,WAAWA,EAAG,qBAAsBe,CAAG,CAC3D,EA0FO,IAAMG,EAAgB,CAACC,EAASC,IAAa,CAC5C,IAAMC,EAAUF,EAAG,cAAc,EACjC,OAAAA,EAAG,YAAYA,EAAG,WAAYE,CAAO,EACrCF,EAAG,WAAWA,EAAG,WAAY,EAAGA,EAAG,KAAMA,EAAG,KAAMA,EAAG,cAAeC,CAAG,EACvED,EAAG,eAAeA,EAAG,UAAU,EAC/BA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,mBAAoBA,EAAG,MAAM,EAChEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,cAAcA,EAAG,WAAYA,EAAG,eAAgBA,EAAG,aAAa,EACnEA,EAAG,YAAYA,EAAG,WAAY,IAAI,EAC3BE,CACf,EAEaC,EAAgB,CACrBH,EACAI,EACAC,EACAH,IACH,CACGF,EAAG,UAAUI,EAAUC,CAAU,EACjCL,EAAG,cAAcA,EAAG,UAAYK,CAAU,CAAC,EAC3CL,EAAG,YAAYA,EAAG,WAAYE,CAAO,CAC7C,EDjMA,IAAMI,EAAa,CAAC,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,CAAC,EAEtDC,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjBC,EAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrBC,EAAQ,YAAY,IAAI,EACpBC,EAAY,EACZC,EAAa,EAERC,EAAYC,GAAwB,CA+EzC,IAAMC,EAAOC,EAAmB,CACxB,OAAQR,EACR,SAAUC,EACV,KAAM,CAAC,EAAG,CAAC,EACX,MAAO,CAAC,EAAG,CAAC,EACZ,MAAO,EACP,QAAS,EACT,KArFK,IAAM,CACXM,EAAKD,CAAK,EACV,IAAMG,EAAKF,EAAK,GACVG,EAAKH,EAAK,IAAMA,EAAK,MAAQA,EAAK,OAClCI,EAAKJ,EAAK,IAAMA,EAAK,MAAQA,EAAK,SAClCK,EAAKC,EAAaJ,EAAIC,EAAID,EAAG,aAAa,EAC1CK,EAAKD,EAAaJ,EAAIE,EAAIF,EAAG,eAAe,EAC9CF,EAAK,QAAU,GAAGA,EAAK,UAAU,CAAE,WAAAR,CAAW,CAAC,EACnDgB,EAAM,IAAM,KAAKR,EAAK,OAAO,GAAK,CAAC,EACnCA,EAAK,GAAKA,EAAK,QACLS,EAAgBP,EAAIG,EAAIE,EAAIP,EAAK,OAAO,EACxCU,EAAcR,EAAIG,EAAIE,CAAE,EAClCP,EAAK,eAAiB,EACtBA,EAAK,WAAaW,EAAO,IAAMX,EAAK,gBAAgB,EACpDA,EAAK,SAAWW,EAAO,CAACC,EAAKC,EAAc,KAC5BA,EACGX,GAAI,kBAAkBF,EAAK,GAAIY,CAAG,EAClCV,GAAI,mBAAmBF,EAAK,GAAIY,CAAG,CACpD,CACT,EAmEQ,OAjEO,IAAM,CACbZ,EAAK,GAAG,WAAWA,EAAK,EAAE,EAC1BA,EAAK,MAAM,MAAM,EACjBJ,EAAYD,EACZA,EAAQ,YAAY,IAAI,EAAI,IAC5BE,EAAaF,EAAQC,EACrBI,EAAK,QAAQ,CAAE,MAAAL,EAAO,UAAAC,EAAW,WAAAC,CAAW,CAAC,CACrD,EA2DQ,OAzDO,CACPiB,EACAC,EAAQf,EAAK,OAAS,OAAO,WAC7BgB,EAAShB,EAAK,QAAU,OAAO,cAClC,CACGA,EAAK,KAAK,CAAC,EAAIA,EAAK,GAAG,MAAQe,EAC/Bf,EAAK,KAAK,CAAC,EAAIA,EAAK,GAAG,OAASgB,EAChChB,EAAK,QAAQ,cAAeA,EAAK,IAAI,CAC7C,EAkDQ,UAhDU,CAACc,EAASG,EAAIH,EAAG,QAASI,EAAIJ,EAAG,UAAY,CACvD,GAAM,CAACK,EAAGC,CAAC,EAAIpB,EAAK,KACd,CAAE,IAAAqB,EAAK,KAAAC,CAAK,EAAItB,EAAK,GAAG,sBAAsB,EACpDA,EAAK,MAAM,CAAC,GAAKiB,EAAII,EAAMF,EAAI,IAAMA,EAAI,GACzCnB,EAAK,MAAM,CAAC,EAAI,EAAEkB,EAAII,EAAOF,EAAI,IAAMA,EAAI,GAC3CpB,EAAK,QAAQ,SAAUA,EAAK,KAAK,CACzC,EA2CQ,KAzCK,CAACuB,EAAQC,IAAe,CAC7BxB,EAAK,MAAM,IAAM,CACT,IAAMyB,EAAMzB,EAAK,SAASwB,EAAM,GAAG,EAC7BE,EAAO1B,EAAK,WAAWwB,EAAM,GAAG,EAChCG,EAAMC,EAAc5B,EAAK,GAAIwB,CAAK,EACxCxB,EAAK,MAAM,KACH6B,EAAc7B,EAAK,GAAIyB,EAAKC,EAAMC,CAAG,EAC9B,GACd,CACT,CAAC,CACT,EAgCQ,MA9BM,CAACf,EAAM,qBAAuB,CACpCZ,EAAK,GAAG,MAAMA,EAAK,GAAGY,CAAG,CAAC,CAClC,EA6BQ,SA3BS,CAACkB,EAAiB9B,EAAK,OAAS,CACzCA,EAAK,GAAG,SAAS,EAAG,EAAG,GAAG8B,CAAI,CACtC,EA0BQ,WAxBW,CAACC,EAAO,cAAgB,CACnC/B,EAAK,GAAG,WAAWA,EAAK,GAAG+B,CAAI,EAAG,EAAG/B,EAAK,KAAK,CACvD,EAuBQ,aArBa,CAAC+B,EAAO,YAAaC,EAAO,mBAAqB,CAC9DD,EAAO/B,EAAK,GAAG+B,CAAI,EACnBC,EAAOhC,EAAK,GAAGgC,CAAI,EACnBhC,EAAK,GAAG,aAAa+B,EAAM/B,EAAK,MAAOgC,EAAM,CAAC,CACtD,CAkBA,CAAC,EAEKC,EAAW,CACTC,EACAC,EACAC,EAAc,cACjB,CACG,GAAI,OAAO,OAAW,IAAa,OACnC,IAAMZ,EAAQ,IAAI,MACZa,EAAYd,GAAWvB,EAAK,KAAKuB,EAAGC,CAAK,EAC/CA,EAAM,iBAAiB,OAAQa,EAAU,EAAK,EAC9C,OAAO,OAAOb,EAAO,CAAE,IAAAW,EAAK,IAAAD,EAAK,YAAAE,CAAY,CAAC,CACtD,EAEME,EAAW,CAAC1B,EAAa2B,EAAQ,EAAGC,EAAW,KAAU,CACvD,IAAMR,EAAOS,EAAYF,EAAOC,CAAQ,EACxCxC,EAAK,MAAM,IAAM,CACT,IAAMyB,EAAMzB,EAAK,SAASY,CAAG,EACzB4B,EAAUxC,EAAK,GAAGgC,CAAI,EAAEP,EAAK,GAAOc,CAAK,EACxCvC,EAAK,GAAGgC,CAAI,EAAEP,EAAKc,CAAK,CACrC,CAAC,CACT,EAEMG,EAAa,CACX9B,EACA2B,EACAI,IACH,CACG3C,EAAK,MAAM,IAAM,CACT,IAAMyB,EAAMzB,EAAK,SAASY,EAAK,EAAI,EAC7BgC,EAAMC,EAAU7C,EAAK,GAAIuC,CAAK,EAC9BO,EAAMC,EAAU/C,EAAK,GAAI2C,CAAQ,EACjCK,EAAIhD,EAAK,MACTiD,EAASC,EAAaF,EAAGT,EAAOI,CAAQ,EAC9CQ,EAAgBnD,EAAK,GAAIiD,EAAQxB,EAAKmB,EAAKE,CAAG,CACtD,CAAC,CACT,EAEA,OAAA9C,EAAK,MAAQoD,EAAM,EACnBpD,EAAK,QAAUqD,EAAQpB,CAAQ,EAC/BjC,EAAK,QAAUqD,EAAQf,CAAQ,EAC/BtC,EAAK,UAAYqD,EAAQX,CAAU,EAE5B1C,CACf,EAEaE,EAAKJ,EAAS,EAEdwD,EAAW,CAACvD,EAAqBC,EAAOE,IAAO,CACpD,IAAMqD,EAAQ,IAAM,CACZC,EAAGzD,CAAK,EACRyD,EAAG,GAAKxD,EAAK,GACbwD,EAAG,GAAKxD,EAAK,GACbwD,EAAG,MAAQxD,EAAK,MAChBwD,EAAG,KAAK,EACRxD,EAAK,CAAE,OAAQwD,EAAG,OAAQ,UAAWA,EAAG,SAAU,CAAC,CAC3D,EAEMC,EAAQ,IAAM,CACZD,EAAGzD,CAAK,EACRC,EAAK,CAAE,OAAQwD,EAAG,OAAQ,UAAWA,EAAG,SAAU,CAAC,CAC3D,EAEMA,EAAK1D,EAAS,EAEpB,OAAA0D,EAAG,CAAE,MAAAD,EAAO,MAAAE,CAAM,CAAC,EACZD,CACf,EDjMO,IAAME,GAAO,CAACC,EAAqBC,EAAOC,IAAO,CAChD,IAAMC,EAAO,CACL,IAAIC,EAAiB,CACTA,IACIH,EAAK,OAASG,EACdH,EAAK,MAAM,EAE3B,EACA,OAAQ,CACAA,EAAK,GAAKA,EAAK,OACfA,EAAK,GAAKA,EAAK,OAAO,WAAW,QAAQ,EACzCA,EAAK,KAAK,EACVA,EAAK,OAAO,EACZI,EAAM,MAAM,EACZ,OAAO,iBAAiB,SAAUJ,EAAK,MAAM,EAC7C,OAAO,iBAAiB,YAAaA,EAAK,SAAS,CAC3D,EACA,OAAQ,CACAA,EAAKD,CAAK,EAAEG,CAAI,EAChBE,EAAM,OAAO,EACb,OAAO,oBAAoB,SAAUJ,EAAK,MAAM,EAChD,OAAO,oBAAoB,YAAaA,EAAK,SAAS,CAC9D,CACR,EACA,OAAAK,EAAUL,EAAK,KAAK,EACbA,EAAKD,CAAK,EAAEG,CAAI,CAC/B,EAEaI,GAAO,CAACP,EAAqBC,EAAOC,IAAO,CAChD,IAAMM,EAAKC,EAAST,EAAOC,CAAI,EAC/B,OAAAS,EAAQ,IAAMF,EAAG,MAAM,CAAC,EACxBF,EAAU,IAAME,EAAG,MAAM,CAAC,EACnBA,CACf,EAEaG,GAAU,CAACC,EAAUX,EAAOC,IAAO,CACxCQ,EAAQ,IAAMT,EAAK,SAAUW,CAAG,CAAC,CACzC,EAEaC,GAAa,CAACb,EAAYC,EAAOC,IAC/BD,EAAK,QAAQD,CAAK,EAGpBc,GAAe,CAACd,EAAYC,EAAOC,IACjCD,EAAK,UAAUD,CAAK","names":["onMount","onCleanup","frame","event","durable","nested","queue","frame","uniformType","value","isMatrix","length","vertexStride","count","iboValue","stride","createShader","gl","source","type","shader","createProgram","vs","fs","program","createTfProgram","varyings","pg","createVbo","data","vbo","createIbo","ibo","createAttribute","location","createTexture","gl","img","texture","activeTexture","location","activeUnit","a_position","_defaultVertex","_defaultFragment","iTime","iPrevTime","iDeltaTime","createGL","props","self","event","gl","_v","_f","vs","createShader","fs","frame","createTfProgram","createProgram","nested","key","isAttribute","_e","width","height","x","y","w","h","top","left","_","image","loc","unit","tex","createTexture","activeTexture","size","mode","type","_texture","alt","src","crossOrigin","callback","_uniform","value","isMatrix","uniformType","_attribute","iboValue","vbo","createVbo","ibo","createIbo","n","stride","vertexStride","createAttribute","queue","durable","createTF","mount","tf","clean","onGL","props","self","gl","memo","target","frame","onCleanup","onTF","tf","createTF","onMount","onFrame","fun","setTexture","setAttribute"]}
|
|
1
|
+
{"version":3,"sources":["../solid.ts","../index.ts","../utils.ts"],"sourcesContent":["import { onMount, onCleanup } from 'solid-js'\nimport { createTF, gl } from './index'\nimport type { GL, Fun } from './types'\n\nexport type { GL, Fun }\n\nexport const onGL = (props?: Partial<GL>, self = gl) => {\n const memo = {\n ref(target: unknown) {\n if (target) {\n self.target = target\n self.mount()\n }\n },\n mount() {\n self.el = self.target\n self.gl = self.target.getContext('webgl2')\n self.init()\n self.resize()\n self.frame.start()\n window.addEventListener('resize', self.resize)\n window.addEventListener('mousemove', self.mousemove)\n },\n clean() {\n self(props)(memo)\n self.frame.stop()\n window.removeEventListener('resize', self.resize)\n window.removeEventListener('mousemove', self.mousemove)\n },\n }\n onCleanup(self.clean)\n return self(props)(memo)\n}\n\nexport const onTF = (props?: Partial<GL>, self = gl) => {\n const tf = createTF(props, self)\n onMount(() => tf.mount())\n onCleanup(() => tf.clean())\n return tf\n}\n\nexport const onFrame = (fun: Fun, self = gl) => {\n onMount(() => self('render', fun))\n}\n\nexport const setTexture = (props: any, self = gl) => {\n return self.texture(props)\n}\n\nexport const setAttribute = (props: any, self = gl) => {\n return self.attribute(props)\n}\n","import { event, durable, nested } from 'reev'\nimport { createQueue, createFrame } from 'refr'\nimport {\n uniformType,\n vertexStride,\n createProgram,\n createTfProgram,\n createShader,\n createAttribute,\n createTexture,\n createVbo,\n createIbo,\n activeTexture,\n} from './utils'\nimport type { GL, Fun } from './types'\n\nexport type { GL, Fun }\n\nconst a_position = [-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]\n\nconst _defaultVertex = `\n attribute vec4 a_position;\n void main() {\n gl_Position = a_position;\n }\n`\n\nconst _defaultFragment = `\n precision mediump float;\n uniform vec2 iResolution;\n void main() {\n gl_FragColor = vec4(fract(gl_FragCoord.xy / iResolution), 0, 1);\n }\n`\n\nlet iTime = performance.now(),\n iPrevTime = 0,\n iDeltaTime = 0\n\nexport const createGL = (props?: Partial<GL>) => {\n const init = () => {\n self(props)\n const gl = self.gl\n const _v = self.vs || self.vert || self.vertex\n const _f = self.fs || self.frag || self.fragment\n const vs = createShader(gl, _v, gl.VERTEX_SHADER)\n const fs = createShader(gl, _f, gl.FRAGMENT_SHADER)\n if (self.count === 6) self.attribute({ a_position })\n self.frame(() => void self.render() || true)\n self.pg = self.varying\n ? createTfProgram(gl, vs, fs, self.varying)\n : createProgram(gl, vs, fs)\n self.lastActiveUnit = 0\n self.activeUnit = nested(() => self.lastActiveUnit++)\n self.location = nested((key, isAttribute = false) => {\n return isAttribute\n ? gl?.getAttribLocation(self.pg, key)\n : gl?.getUniformLocation(self.pg, key)\n })\n }\n\n const render = () => {\n self.gl.useProgram(self.pg)\n self.queue.flush()\n iPrevTime = iTime\n iTime = performance.now() / 1000\n iDeltaTime = iTime - iPrevTime\n self.uniform({ iTime, iPrevTime, iDeltaTime })\n }\n\n const resize = (\n _e: any,\n width = self.width || window.innerWidth,\n height = self.height || window.innerHeight\n ) => {\n self.size[0] = self.el.width = width\n self.size[1] = self.el.height = height\n self.uniform('iResolution', self.size)\n }\n\n const mousemove = (_e: any, x = _e.clientX, y = _e.clientY) => {\n const [w, h] = self.size\n const { top, left } = self.el.getBoundingClientRect()\n self.mouse[0] = (x - top - w / 2) / (w / 2)\n self.mouse[1] = -(y - left - h / 2) / (h / 2)\n self.uniform('iMouse', self.mouse)\n }\n\n const load = (_: any, image: any) => {\n self.queue(() => {\n const loc = self.location(image.alt)\n const unit = self.activeUnit(image.alt)\n const tex = createTexture(self.gl, image)\n self.queue(() => {\n activeTexture(self.gl, loc, unit, tex)\n return true\n })\n })\n }\n\n const clear = (key = 'COLOR_BUFFER_BIT') => {\n self.gl.clear(self.gl[key])\n }\n\n const viewport = (size: number[] = self.size) => {\n self.gl.viewport(0, 0, ...size)\n }\n\n const drawArrays = (mode = 'TRIANGLES') => {\n self.gl.drawArrays(self.gl[mode], 0, self.count)\n }\n\n const drawElements = (mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') => {\n mode = self.gl[mode]\n type = self.gl[type]\n self.gl.drawElements(mode, self.count, type, 0)\n }\n\n const self = event<Partial<GL>>({\n vertex: _defaultVertex,\n fragment: _defaultFragment,\n size: [0, 0],\n mouse: [0, 0],\n count: 6,\n counter: 0,\n init,\n render,\n resize,\n mousemove,\n load,\n clear,\n viewport,\n drawArrays,\n drawElements,\n }) as GL\n\n const _texture = (\n alt: string,\n src: string,\n crossOrigin = 'anonymous'\n ) => {\n if (typeof window === 'undefined') return\n const image = new Image()\n const callback = (_: any) => self.load(_, image)\n image.addEventListener('load', callback, false)\n Object.assign(image, { src, alt, crossOrigin })\n }\n\n const _uniform = (key: string, value = 0, isMatrix = false) => {\n const type = uniformType(value, isMatrix)\n self.queue(() => {\n const loc = self.location(key)\n if (isMatrix) self.gl[type](loc, false, value)\n else self.gl[type](loc, value)\n })\n }\n\n const _attribute = (\n key: string,\n value: number[],\n iboValue?: number[]\n ) => {\n self.queue(() => {\n const loc = self.location(key, true)\n const vbo = createVbo(self.gl, value)\n const ibo = createIbo(self.gl, iboValue)\n const n = self.count\n const stride = vertexStride(n, value, iboValue)\n createAttribute(self.gl, stride, loc, vbo, ibo)\n })\n }\n\n self.queue = createQueue()\n self.frame = createFrame()\n self.texture = durable(_texture)\n self.uniform = durable(_uniform)\n self.attribute = durable(_attribute)\n\n return self\n}\n\nexport const gl = createGL()\n\nexport const createTF = (props?: Partial<GL>, self = gl) => {\n const mount = () => {\n tf(props)\n tf.el = self.el\n tf.gl = self.gl\n tf.queue = self.queue\n tf.frame = self.frame\n tf.init()\n self({ resize: tf.resize, mousemove: tf.mousemove })\n }\n\n const clean = () => {\n tf(props)\n self({ resize: tf.resize, mousemove: tf.mousemove })\n }\n\n const tf = createGL()\n\n tf({ mount, clean })\n return tf\n}\n\nexport default gl\n","/**\n * utils\n */\nexport const uniformType = (value: number | number[], isMatrix = false) => {\n let length = typeof value === 'number' ? 0 : value?.length\n if (!length) return `uniform1f`\n if (!isMatrix) return `uniform${length}fv`\n length = Math.sqrt(length) << 0\n return `uniformMatrix${length}fv`\n}\n\nexport const vertexStride = (\n count: number,\n value: number[],\n iboValue?: number[]\n) => {\n if (iboValue) count = Math.max(...iboValue) + 1\n const stride = value.length / count\n if (stride !== stride << 0)\n console.warn(`Vertex Stride Error: count ${count} is mismatch`)\n return stride << 0\n}\n\n/**\n * graphics\n */\nexport const createShader = (gl: any, source: string, type: unknown) => {\n const shader = gl.createShader(type)\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n if (gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n return shader\n } else throw 'Could not compile glsl\\n\\n' + gl.getShaderInfoLog(shader)\n}\n\nexport const createProgram = (gl: any, vs: any, fs: any) => {\n const program = gl.createProgram()\n gl.attachShader(program, vs)\n gl.attachShader(program, fs)\n gl.linkProgram(program)\n if (gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.useProgram(program)\n return program\n } else {\n console.log(gl.getProgramInfoLog(program))\n return null\n }\n}\n\nexport const createTfProgram = (gl: any, vs: any, fs: any, varyings?: any) => {\n const pg = gl.createProgram()\n gl.attachShader(pg, vs)\n gl.attachShader(pg, fs)\n gl.transformFeedbackVaryings(pg, varyings, gl.SEPARATE_ATTRIBS)\n gl.linkProgram(pg)\n if (gl.getProgramParameter(pg, gl.LINK_STATUS)) {\n gl.useProgram(pg)\n return pg\n } else {\n console.warn(gl.getProgramInfoLog(pg))\n return null\n }\n}\n\nexport const createVbo = (gl: any, data: number[]) => {\n if (!data) return\n const vbo = gl.createBuffer()\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo)\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW)\n gl.bindBuffer(gl.ARRAY_BUFFER, null)\n return vbo\n}\n\nexport const createIbo = (gl: any, data?: number[]) => {\n if (!data) return\n const ibo = gl.createBuffer()\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibo)\n gl.bufferData(\n gl.ELEMENT_ARRAY_BUFFER,\n new Int16Array(data),\n gl.STATIC_DRAW\n )\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null)\n return ibo\n}\n\nexport const createAttribute = (\n gl: any,\n stride: number,\n location: any,\n vbo: any,\n ibo: any\n) => {\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo)\n gl.enableVertexAttribArray(location)\n gl.vertexAttribPointer(location, stride, gl.FLOAT, false, 0, 0)\n if (ibo) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibo)\n}\n\nexport const createFramebuffer = (gl: any, width: number, height: number) => {\n const frameBuffer = gl.createFramebuffer()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n const renderBuffer = gl.createRenderbuffer()\n gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer)\n gl.renderbufferStorage(\n gl.RENDERBUFFER,\n gl.DEPTH_COMPONENT16,\n width,\n height\n )\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_ATTACHMENT,\n gl.RENDERBUFFER,\n renderBuffer\n )\n const texture = gl.createTexture()\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n null\n )\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0\n )\n gl.bindTexture(gl.TEXTURE_2D, null)\n gl.bindRenderbuffer(gl.RENDERBUFFER, null)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n return { frameBuffer, renderBuffer, texture }\n}\n\nexport const createFramebufferFloat = (\n gl: any,\n ext: any,\n width: number,\n height: number\n) => {\n const flg =\n ext.textureFloat != null\n ? gl.FLOAT\n : ext.textureHalfFloat.HALF_FLOAT_OES\n const frameBuffer = gl.createFramebuffer()\n const texture = gl.createTexture()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n width,\n height,\n 0,\n gl.RGBA,\n flg,\n null\n )\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0\n )\n gl.bindTexture(gl.TEXTURE_2D, null)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n return { frameBuffer, texture }\n}\n\nexport const createTexture = (gl: any, img: any) => {\n const texture = gl.createTexture()\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img)\n gl.generateMipmap(gl.TEXTURE_2D)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.bindTexture(gl.TEXTURE_2D, null)\n return texture\n}\n\nexport const activeTexture = (\n gl: any,\n location: any,\n activeUnit: any,\n texture: any\n) => {\n gl.uniform1i(location, activeUnit)\n gl.activeTexture(gl['TEXTURE' + activeUnit])\n gl.bindTexture(gl.TEXTURE_2D, texture)\n}\n"],"mappings":"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","names":["onMount","onCleanup","event","durable","nested","createQueue","createFrame","uniformType","value","isMatrix","length","vertexStride","count","iboValue","stride","createShader","gl","source","type","shader","createProgram","vs","fs","program","createTfProgram","varyings","pg","createVbo","data","vbo","createIbo","ibo","createAttribute","location","createTexture","gl","img","texture","activeTexture","location","activeUnit","a_position","_defaultVertex","_defaultFragment","iTime","iPrevTime","iDeltaTime","createGL","props","self","event","gl","_v","_f","vs","createShader","fs","createTfProgram","createProgram","nested","key","isAttribute","_e","width","height","x","y","w","h","top","left","_","image","loc","unit","tex","createTexture","activeTexture","size","mode","type","_texture","alt","src","crossOrigin","callback","_uniform","value","isMatrix","uniformType","_attribute","iboValue","vbo","createVbo","ibo","createIbo","n","stride","vertexStride","createAttribute","createQueue","createFrame","durable","createTF","mount","tf","clean","onGL","props","self","gl","memo","target","onCleanup","onTF","tf","createTF","onMount","onFrame","fun","setTexture","setAttribute"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { EventState, Nested } from 'reev';
|
|
2
|
+
import { Queue, Frame } from 'refr';
|
|
3
3
|
|
|
4
4
|
declare type Uniform = number | number[];
|
|
5
5
|
declare type Attribute = number[];
|
|
@@ -31,7 +31,8 @@ declare type GL = EventState<{
|
|
|
31
31
|
gl: any;
|
|
32
32
|
pg: any;
|
|
33
33
|
el: any;
|
|
34
|
-
|
|
34
|
+
queue: Queue;
|
|
35
|
+
frame: Frame;
|
|
35
36
|
target: any;
|
|
36
37
|
stride: Nested<number>;
|
|
37
38
|
location: Nested<any>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "glre",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"author": "tseijp",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -134,9 +134,14 @@
|
|
|
134
134
|
"default": "./dist/solid.js"
|
|
135
135
|
}
|
|
136
136
|
},
|
|
137
|
+
"files": [
|
|
138
|
+
"dist/**/*",
|
|
139
|
+
"packages.json",
|
|
140
|
+
"README.md"
|
|
141
|
+
],
|
|
137
142
|
"dependencies": {
|
|
138
143
|
"reev": "0.12.0",
|
|
139
|
-
"refr": "0.
|
|
144
|
+
"refr": "0.7.0"
|
|
140
145
|
},
|
|
141
146
|
"peerDependencies": {
|
|
142
147
|
"expo": "*",
|
package/index.ts
DELETED
|
@@ -1,202 +0,0 @@
|
|
|
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 init = () => {
|
|
40
|
-
self(props)
|
|
41
|
-
const gl = self.gl
|
|
42
|
-
const _v = self.vs || self.vert || self.vertex
|
|
43
|
-
const _f = self.fs || self.frag || self.fragment
|
|
44
|
-
const vs = createShader(gl, _v, gl.VERTEX_SHADER)
|
|
45
|
-
const fs = createShader(gl, _f, gl.FRAGMENT_SHADER)
|
|
46
|
-
if (self.count === 6) self.attribute({ a_position })
|
|
47
|
-
frame(() => void self.render() || 1)
|
|
48
|
-
self.pg = self.varying
|
|
49
|
-
? createTfProgram(gl, vs, fs, self.varying)
|
|
50
|
-
: createProgram(gl, vs, fs)
|
|
51
|
-
self.lastActiveUnit = 0
|
|
52
|
-
self.activeUnit = nested(() => self.lastActiveUnit++)
|
|
53
|
-
self.location = nested((key, isAttribute = false) => {
|
|
54
|
-
return isAttribute
|
|
55
|
-
? gl?.getAttribLocation(self.pg, key)
|
|
56
|
-
: gl?.getUniformLocation(self.pg, key)
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const render = () => {
|
|
61
|
-
self.gl.useProgram(self.pg)
|
|
62
|
-
self.frame.flush()
|
|
63
|
-
iPrevTime = iTime
|
|
64
|
-
iTime = performance.now() / 1000
|
|
65
|
-
iDeltaTime = iTime - iPrevTime
|
|
66
|
-
self.uniform({ iTime, iPrevTime, iDeltaTime })
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const resize = (
|
|
70
|
-
_e: any,
|
|
71
|
-
width = self.width || window.innerWidth,
|
|
72
|
-
height = self.height || window.innerHeight
|
|
73
|
-
) => {
|
|
74
|
-
self.size[0] = self.el.width = width
|
|
75
|
-
self.size[1] = self.el.height = height
|
|
76
|
-
self.uniform('iResolution', self.size)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const mousemove = (_e: any, x = _e.clientX, y = _e.clientY) => {
|
|
80
|
-
const [w, h] = self.size
|
|
81
|
-
const { top, left } = self.el.getBoundingClientRect()
|
|
82
|
-
self.mouse[0] = (x - top - w / 2) / (w / 2)
|
|
83
|
-
self.mouse[1] = -(y - left - h / 2) / (h / 2)
|
|
84
|
-
self.uniform('iMouse', self.mouse)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const load = (_: any, image: any) => {
|
|
88
|
-
self.frame(() => {
|
|
89
|
-
const loc = self.location(image.alt)
|
|
90
|
-
const unit = self.activeUnit(image.alt)
|
|
91
|
-
const tex = createTexture(self.gl, image)
|
|
92
|
-
self.frame(() => {
|
|
93
|
-
activeTexture(self.gl, loc, unit, tex)
|
|
94
|
-
return true
|
|
95
|
-
})
|
|
96
|
-
})
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const clear = (key = 'COLOR_BUFFER_BIT') => {
|
|
100
|
-
self.gl.clear(self.gl[key])
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const viewport = (size: number[] = self.size) => {
|
|
104
|
-
self.gl.viewport(0, 0, ...size)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const drawArrays = (mode = 'TRIANGLES') => {
|
|
108
|
-
self.gl.drawArrays(self.gl[mode], 0, self.count)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const drawElements = (mode = 'TRIANGLES', type = 'UNSIGNED_SHORT') => {
|
|
112
|
-
mode = self.gl[mode]
|
|
113
|
-
type = self.gl[type]
|
|
114
|
-
self.gl.drawElements(mode, self.count, type, 0)
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const self = event<Partial<GL>>({
|
|
118
|
-
vertex: _defaultVertex,
|
|
119
|
-
fragment: _defaultFragment,
|
|
120
|
-
size: [0, 0],
|
|
121
|
-
mouse: [0, 0],
|
|
122
|
-
count: 6,
|
|
123
|
-
counter: 0,
|
|
124
|
-
init,
|
|
125
|
-
render,
|
|
126
|
-
resize,
|
|
127
|
-
mousemove,
|
|
128
|
-
load,
|
|
129
|
-
clear,
|
|
130
|
-
viewport,
|
|
131
|
-
drawArrays,
|
|
132
|
-
drawElements,
|
|
133
|
-
}) as GL
|
|
134
|
-
|
|
135
|
-
const _texture = (
|
|
136
|
-
alt: string,
|
|
137
|
-
src: string,
|
|
138
|
-
crossOrigin = 'anonymous'
|
|
139
|
-
) => {
|
|
140
|
-
if (typeof window === 'undefined') return
|
|
141
|
-
const image = new Image()
|
|
142
|
-
const callback = (_: any) => self.load(_, image)
|
|
143
|
-
image.addEventListener('load', callback, false)
|
|
144
|
-
Object.assign(image, { src, alt, crossOrigin })
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const _uniform = (key: string, value = 0, isMatrix = false) => {
|
|
148
|
-
const type = uniformType(value, isMatrix)
|
|
149
|
-
self.frame(() => {
|
|
150
|
-
const loc = self.location(key)
|
|
151
|
-
if (isMatrix) self.gl[type](loc, false, value)
|
|
152
|
-
else self.gl[type](loc, value)
|
|
153
|
-
})
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const _attribute = (
|
|
157
|
-
key: string,
|
|
158
|
-
value: number[],
|
|
159
|
-
iboValue?: number[]
|
|
160
|
-
) => {
|
|
161
|
-
self.frame(() => {
|
|
162
|
-
const loc = self.location(key, true)
|
|
163
|
-
const vbo = createVbo(self.gl, value)
|
|
164
|
-
const ibo = createIbo(self.gl, iboValue)
|
|
165
|
-
const n = self.count
|
|
166
|
-
const stride = vertexStride(n, value, iboValue)
|
|
167
|
-
createAttribute(self.gl, stride, loc, vbo, ibo)
|
|
168
|
-
})
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
self.frame = queue()
|
|
172
|
-
self.texture = durable(_texture)
|
|
173
|
-
self.uniform = durable(_uniform)
|
|
174
|
-
self.attribute = durable(_attribute)
|
|
175
|
-
|
|
176
|
-
return self
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
export const gl = createGL()
|
|
180
|
-
|
|
181
|
-
export const createTF = (props?: Partial<GL>, self = gl) => {
|
|
182
|
-
const mount = () => {
|
|
183
|
-
tf(props)
|
|
184
|
-
tf.el = self.el
|
|
185
|
-
tf.gl = self.gl
|
|
186
|
-
tf.frame = self.frame
|
|
187
|
-
tf.init()
|
|
188
|
-
self({ resize: tf.resize, mousemove: tf.mousemove })
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
const clean = () => {
|
|
192
|
-
tf(props)
|
|
193
|
-
self({ resize: tf.resize, mousemove: tf.mousemove })
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
const tf = createGL()
|
|
197
|
-
|
|
198
|
-
tf({ mount, clean })
|
|
199
|
-
return tf
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
export default gl
|
package/native.ts
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
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 const useTexture = (props: any, self = gl) => {
|
|
48
|
-
return self.texture(props)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export const useAttribute = (props: any, self = gl) => {
|
|
52
|
-
return self.attribute(props)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export const useUniform = (props: any, self = gl) => {
|
|
56
|
-
return self.uniform(props)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export const useFrame = (fun: Fun, self = gl) => {
|
|
60
|
-
const ref = useMutable(fun)
|
|
61
|
-
useEffect(() => self.frame(fun), [])
|
|
62
|
-
useEffect(() => () => self.frame(ref), [])
|
|
63
|
-
return self
|
|
64
|
-
}
|
package/qwik.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { useSignal, useTask$, useVisibleTask$ } from '@builder.io/qwik'
|
|
2
|
-
import { gl } from './index'
|
|
3
|
-
import { frame } from 'refr'
|
|
4
|
-
import type { GL } from './types'
|
|
5
|
-
import type { Fun } from 'reev/types'
|
|
6
|
-
|
|
7
|
-
export const useGL = (props?: any, self = gl as unknown as GL) => {
|
|
8
|
-
const ref = useSignal<Element>()
|
|
9
|
-
useVisibleTask$(({ cleanup }) => {
|
|
10
|
-
self(props)
|
|
11
|
-
self.el = self.target = ref.value
|
|
12
|
-
self.gl = self.target.getContext('webgl2')
|
|
13
|
-
self.init()
|
|
14
|
-
self.resize()
|
|
15
|
-
frame.start()
|
|
16
|
-
window.addEventListener('resize', self.resize)
|
|
17
|
-
window.addEventListener('mousemove', self.mousemove)
|
|
18
|
-
cleanup(() => {
|
|
19
|
-
self.clean()
|
|
20
|
-
window.removeEventListener('resize', self.resize)
|
|
21
|
-
window.removeEventListener('mousemove', self.mousemove)
|
|
22
|
-
})
|
|
23
|
-
})
|
|
24
|
-
return self
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export const useTexture = (props: any, self = gl) => {
|
|
28
|
-
return self?.texture(props)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const useAttribute = (props: any, self = gl) => {
|
|
32
|
-
return self.attribute(props)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export const useUniform = (props: any, self = gl) => {
|
|
36
|
-
return self.uniform(props)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const useFrame = (fun: Fun, self = gl) => {
|
|
40
|
-
useTask$(() => self.frame(fun))
|
|
41
|
-
return self
|
|
42
|
-
}
|
package/react.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { useEffect, useMemo } from 'react'
|
|
2
|
-
import { createTF, gl } from './index'
|
|
3
|
-
import { frame } from 'refr'
|
|
4
|
-
import { useMutable } from 'reev/react'
|
|
5
|
-
import type { GL } from './types'
|
|
6
|
-
import type { Fun } from 'refr'
|
|
7
|
-
|
|
8
|
-
export const useGL = (props: Partial<GL> = {}, self = gl) => {
|
|
9
|
-
const memo1 = useMutable(props) as Partial<GL>
|
|
10
|
-
const memo2 = useMutable({
|
|
11
|
-
ref(target: unknown) {
|
|
12
|
-
if (target) {
|
|
13
|
-
self.target = target
|
|
14
|
-
self.mount()
|
|
15
|
-
} else self.clean()
|
|
16
|
-
},
|
|
17
|
-
mount() {
|
|
18
|
-
self.el = self.target
|
|
19
|
-
self.gl = self.target.getContext('webgl2')
|
|
20
|
-
self.init()
|
|
21
|
-
self.resize()
|
|
22
|
-
frame.start()
|
|
23
|
-
window.addEventListener('resize', self.resize)
|
|
24
|
-
self.el.addEventListener('mousemove', self.mousemove)
|
|
25
|
-
},
|
|
26
|
-
clean() {
|
|
27
|
-
self(memo2)(memo1)
|
|
28
|
-
frame.cancel()
|
|
29
|
-
window.removeEventListener('resize', self.resize)
|
|
30
|
-
},
|
|
31
|
-
}) as Partial<GL>
|
|
32
|
-
|
|
33
|
-
return useMemo(() => self(memo2)(memo1), [self, memo1, memo2])
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export const useTF = (props: Partial<GL>, self = gl) => {
|
|
37
|
-
const memo = useMutable(props) as Partial<GL>
|
|
38
|
-
const tf = useMemo(() => createTF(memo, self), [memo, self])
|
|
39
|
-
useEffect(() => void tf.mount() || tf.clean, [self])
|
|
40
|
-
return tf
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export const useTexture = (props: any, self = gl) => {
|
|
44
|
-
return self.texture(props)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export const useAttribute = (props: any, self = gl) => {
|
|
48
|
-
return self.attribute(props)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export const useUniform = (props: any, self = gl) => {
|
|
52
|
-
return self.uniform(props)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export const useFrame = (fun: Fun, self = gl) => {
|
|
56
|
-
useEffect(() => void self.frame(fun), [])
|
|
57
|
-
useEffect(() => () => self.frame(fun), [])
|
|
58
|
-
return self
|
|
59
|
-
}
|
package/solid.ts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { onMount, onCleanup } from 'solid-js'
|
|
2
|
-
import { frame } from 'refr'
|
|
3
|
-
import { createTF, gl } from './index'
|
|
4
|
-
import { GL } from './types'
|
|
5
|
-
import type { Fun } from 'reev/types'
|
|
6
|
-
|
|
7
|
-
export const onGL = (props?: Partial<GL>, self = gl) => {
|
|
8
|
-
const memo = {
|
|
9
|
-
ref(target: unknown) {
|
|
10
|
-
if (target) {
|
|
11
|
-
self.target = target
|
|
12
|
-
self.mount()
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
mount() {
|
|
16
|
-
self.el = self.target
|
|
17
|
-
self.gl = self.target.getContext('webgl2')
|
|
18
|
-
self.init()
|
|
19
|
-
self.resize()
|
|
20
|
-
frame.start()
|
|
21
|
-
window.addEventListener('resize', self.resize)
|
|
22
|
-
window.addEventListener('mousemove', self.mousemove)
|
|
23
|
-
},
|
|
24
|
-
clean() {
|
|
25
|
-
self(props)(memo)
|
|
26
|
-
frame.cancel()
|
|
27
|
-
window.removeEventListener('resize', self.resize)
|
|
28
|
-
window.removeEventListener('mousemove', self.mousemove)
|
|
29
|
-
},
|
|
30
|
-
}
|
|
31
|
-
onCleanup(self.clean)
|
|
32
|
-
return self(props)(memo)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export const onTF = (props?: Partial<GL>, self = gl) => {
|
|
36
|
-
const tf = createTF(props, self)
|
|
37
|
-
onMount(() => tf.mount())
|
|
38
|
-
onCleanup(() => tf.clean())
|
|
39
|
-
return tf
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export const onFrame = (fun: Fun, self = gl) => {
|
|
43
|
-
onMount(() => self('render', fun))
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export const setTexture = (props: any, self = gl) => {
|
|
47
|
-
return self.texture(props)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export const setAttribute = (props: any, self = gl) => {
|
|
51
|
-
return self.attribute(props)
|
|
52
|
-
}
|
package/test/index.test.ts
DELETED
package/test/utils.test.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
interleave,
|
|
3
|
-
isTemplateLiteral,
|
|
4
|
-
concat,
|
|
5
|
-
switchUniformType,
|
|
6
|
-
} from 'glre/utils'
|
|
7
|
-
|
|
8
|
-
describe('utils', () => {
|
|
9
|
-
const _ = (str, ...args) => [str, args] as [any, any]
|
|
10
|
-
const _0 = _`foo${false}bar${undefined}baz${null}`
|
|
11
|
-
const _1 = _`foo${ 0 }bar${ NaN }baz${ -1 }`
|
|
12
|
-
it('interleave merge strings', () => {
|
|
13
|
-
expect(interleave(..._0)).toEqual(`foofalsebarundefinedbaznull`)
|
|
14
|
-
expect(interleave(..._1)).toEqual(`foo0barNaNbaz-1`)
|
|
15
|
-
})
|
|
16
|
-
it('isTemplateLiteral', () => {
|
|
17
|
-
expect(isTemplateLiteral(_0[0])).toEqual(true)
|
|
18
|
-
expect(isTemplateLiteral(_1[0])).toEqual(true)
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
const headerUniform = `uniform vec2 iMouse;`;
|
|
22
|
-
const withUniform = `void main() { gl_FragColor = vec4(iMouse, 0., 1.); }`
|
|
23
|
-
const noneUniform = `void main() { gl_FragColor = vec4(0., 1., 0., 1.); }`
|
|
24
|
-
it.each`
|
|
25
|
-
i | key | shader | toBe
|
|
26
|
-
${0} | ${void 0} | ${ withUniform} | ${headerUniform + withUniform}
|
|
27
|
-
${1} | ${"iMouse"} | ${ withUniform} | ${headerUniform + withUniform}
|
|
28
|
-
${2} | ${"iMouse"} | ${ noneUniform} | ${noneUniform}
|
|
29
|
-
${3} | ${void 0} | ${headerUniform + withUniform} | ${headerUniform + withUniform}
|
|
30
|
-
${4} | ${"iMouse"} | ${headerUniform + withUniform} | ${headerUniform + withUniform}
|
|
31
|
-
${5} | ${"iMouse"} | ${headerUniform + noneUniform} | ${headerUniform + noneUniform}
|
|
32
|
-
`('concat $i', ({ key, shader, toBe }) => {
|
|
33
|
-
expect(concat(shader, headerUniform, key)).toBe(toBe)
|
|
34
|
-
})
|
|
35
|
-
it.each`
|
|
36
|
-
i | uniformType | uniformKey | isMatrix | value
|
|
37
|
-
${0} | ${'uniform1f'} | ${'float'} | ${false} | ${10}
|
|
38
|
-
${1} | ${'uniform2fv'} | ${'vec2'} | ${false} | ${[0, 1]}
|
|
39
|
-
${2} | ${`uniformMatrix2fv`} | ${'mat2'} | ${true} | ${[0, 1, 2, 3]}
|
|
40
|
-
`('switchUniformType $i', ({ value, isMatrix, uniformType, uniformKey }) => {
|
|
41
|
-
expect(switchUniformType(value, isMatrix)).toEqual([uniformType, uniformKey])
|
|
42
|
-
})
|
|
43
|
-
})
|
package/tsup.config.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'tsup'
|
|
2
|
-
import { defaultConfig } from '../../tsup.config.base'
|
|
3
|
-
|
|
4
|
-
export default defineConfig((options) => {
|
|
5
|
-
return defaultConfig(
|
|
6
|
-
{
|
|
7
|
-
entry: [
|
|
8
|
-
'index.ts',
|
|
9
|
-
'native.ts',
|
|
10
|
-
'react.ts',
|
|
11
|
-
'solid.ts',
|
|
12
|
-
],
|
|
13
|
-
},
|
|
14
|
-
options
|
|
15
|
-
)
|
|
16
|
-
})
|