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.
@@ -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":"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","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 { Queue } from 'refr/types';
2
- import { EventState, Nested } from 'reev/types';
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
- frame: Queue;
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.19.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.3.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
- }
@@ -1,5 +0,0 @@
1
- describe('core', () => {
2
- it('should work', () => {
3
- expect(true).toBeTruthy()
4
- })
5
- })
@@ -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
- })