New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@thi.ng/webgl

Package Overview
Dependencies
Maintainers
1
Versions
291
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@thi.ng/webgl - npm Package Compare versions

Comparing version 0.2.1 to 0.2.2

buffer.d.ts.map

4

buffer.d.ts
import { TypedArray } from "@thi.ng/api";
import { AttribPool } from "@thi.ng/vector-pools";
import { IndexBufferSpec, IWebGLBuffer } from "./api/buffers";
import { ModelSpec } from "./api/model";
import { ModelAttributeSpecs, ModelSpec } from "./api/model";
export declare class WebGLArrayBuffer<T extends TypedArray> implements IWebGLBuffer<T> {

@@ -21,2 +21,2 @@ gl: WebGLRenderingContext;

export declare const compileVAO: (gl: WebGLRenderingContext, spec: ModelSpec) => WebGLVertexArrayObject | undefined;
export declare const compileAttribPool: (gl: WebGLRenderingContext, pool: AttribPool, ids?: string[] | undefined, target?: number, mode?: number) => import("@thi.ng/api").IObjectOf<import("./api/model").ModelAttributeSpec>;
export declare const compileAttribPool: (gl: WebGLRenderingContext, pool: AttribPool, ids?: string[] | undefined, target?: number, mode?: number) => ModelAttributeSpecs;

@@ -6,2 +6,14 @@ # Change Log

## [0.2.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl@0.2.1...@thi.ng/webgl@0.2.2) (2019-11-30)
### Bug Fixes
* **webgl:** fix PHONG shader preset, minor update LAMBERT ([792379f](https://github.com/thi-ng/umbrella/commit/792379fd507cbc9ef684a1b255f3152cb55092b9))
* **webgl:** use LOGGER for warnings ([14d5025](https://github.com/thi-ng/umbrella/commit/14d502556717e1e0aded784294401ec0afc6d733))
## [0.2.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/webgl@0.2.0...@thi.ng/webgl@0.2.1) (2019-11-09)

@@ -8,0 +20,0 @@

@@ -1,1 +0,1 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@thi.ng/api"),require("@thi.ng/checks"),require("@thi.ng/associative"),require("@thi.ng/matrices"),require("@thi.ng/transducers"),require("@thi.ng/errors"),require("@thi.ng/shader-ast"),require("@thi.ng/shader-ast-glsl"),require("@thi.ng/equiv"),require("@thi.ng/vectors"),require("@thi.ng/shader-ast-stdlib"),require("@thi.ng/pixel")):"function"==typeof define&&define.amd?define(["exports","@thi.ng/api","@thi.ng/checks","@thi.ng/associative","@thi.ng/matrices","@thi.ng/transducers","@thi.ng/errors","@thi.ng/shader-ast","@thi.ng/shader-ast-glsl","@thi.ng/equiv","@thi.ng/vectors","@thi.ng/shader-ast-stdlib","@thi.ng/pixel"],t):t(((e=e||self).thi=e.thi||{},e.thi.ng=e.thi.ng||{},e.thi.ng.webgl={}),e.thi.ng.api,e.thi.ng.checks,e.thi.ng.associative,e.thi.ng.matrices,e.thi.ng.transducers,e.thi.ng.errors,e.thi.ng.shaderAst,e.thi.ng.shaderAstGlsl,e.thi.ng.equiv,e.thi.ng.vectors,e.thi.ng.shaderAstStdlib,e.thi.ng.pixel)}(this,(function(e,t,r,i,n,s,a,o,l,u,c,E,d){"use strict";var R,f;(R=e.Blend||(e.Blend={}))[R.ZERO=0]="ZERO",R[R.ONE=1]="ONE",R[R.SRC_COLOR=768]="SRC_COLOR",R[R.ONE_MINUS_SRC_COLOR=769]="ONE_MINUS_SRC_COLOR",R[R.DST_COLOR=774]="DST_COLOR",R[R.ONE_MINUS_DST_COLOR=775]="ONE_MINUS_DST_COLOR",R[R.SRC_ALPHA=770]="SRC_ALPHA",R[R.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",R[R.DST_ALPHA=772]="DST_ALPHA",R[R.ONE_MINUS_DST_ALPHA=773]="ONE_MINUS_DST_ALPHA",R[R.CONSTANT_COLOR=32769]="CONSTANT_COLOR",R[R.ONE_MINUS_CONSTANT_COLOR=32770]="ONE_MINUS_CONSTANT_COLOR",R[R.CONSTANT_ALPHA=32771]="CONSTANT_ALPHA",R[R.ONE_MINUS_CONSTANT_ALPHA=32772]="ONE_MINUS_CONSTANT_ALPHA",R[R.SRC_ALPHA_SATURATE=776]="SRC_ALPHA_SATURATE",(f=e.BlendEquation||(e.BlendEquation={}))[f.FUNC_ADD=32774]="FUNC_ADD",f[f.FUNC_REVERSE_SUBTRACT=32779]="FUNC_REVERSE_SUBTRACT",f[f.FUNC_SUBTRACT=32778]="FUNC_SUBTRACT",f[f.MAX=32776]="MAX",f[f.MIN=32775]="MIN";const _={WEBGL_draw_buffers:{gl:!0,alias:"GL_EXT_draw_buffers"},OES_standard_derivatives:{gl:!0,alias:"GL_OES_standard_derivatives"}};e.LOGGER=t.NULL_LOGGER;const h={fragColor:["vec4",0]};var g,A,m,T,v;(g=e.TextureFormat||(e.TextureFormat={}))[g.ALPHA=6406]="ALPHA",g[g.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",g[g.DEPTH_COMPONENT16=33189]="DEPTH_COMPONENT16",g[g.DEPTH_COMPONENT24=33190]="DEPTH_COMPONENT24",g[g.DEPTH_COMPONENT32F=36012]="DEPTH_COMPONENT32F",g[g.DEPTH_STENCIL=34041]="DEPTH_STENCIL",g[g.DEPTH24_STENCIL8=35056]="DEPTH24_STENCIL8",g[g.DEPTH32F_STENCIL8=36013]="DEPTH32F_STENCIL8",g[g.LUMINANCE=6409]="LUMINANCE",g[g.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",g[g.R11F_G11F_B10F=35898]="R11F_G11F_B10F",g[g.R16F=33325]="R16F",g[g.R16I=33331]="R16I",g[g.R16UI=33332]="R16UI",g[g.R32F=33326]="R32F",g[g.R32I=33333]="R32I",g[g.R32UI=33334]="R32UI",g[g.R8=33321]="R8",g[g.R8_SNORM=36756]="R8_SNORM",g[g.R8I=33329]="R8I",g[g.R8UI=33330]="R8UI",g[g.RED=6403]="RED",g[g.RED_INTEGER=36244]="RED_INTEGER",g[g.RG=33319]="RG",g[g.RG_INTEGER=33320]="RG_INTEGER",g[g.RG16F=33327]="RG16F",g[g.RG16I=33337]="RG16I",g[g.RG16UI=33338]="RG16UI",g[g.RG32F=33328]="RG32F",g[g.RG32I=33339]="RG32I",g[g.RG32UI=33340]="RG32UI",g[g.RG8=33323]="RG8",g[g.RG8_SNORM=36757]="RG8_SNORM",g[g.RG8I=33335]="RG8I",g[g.RG8UI=33336]="RG8UI",g[g.RGB=6407]="RGB",g[g.RGB_INTEGER=36248]="RGB_INTEGER",g[g.RGB10_A2=32857]="RGB10_A2",g[g.RGB10_A2UI=36975]="RGB10_A2UI",g[g.RGB16F=34843]="RGB16F",g[g.RGB16I=36233]="RGB16I",g[g.RGB16UI=36215]="RGB16UI",g[g.RGB32F=34837]="RGB32F",g[g.RGB32I=36227]="RGB32I",g[g.RGB32UI=36209]="RGB32UI",g[g.RGB5_A1=32855]="RGB5_A1",g[g.RGB565=36194]="RGB565",g[g.RGB8=32849]="RGB8",g[g.RGB8_SNORM=36758]="RGB8_SNORM",g[g.RGB8I=36239]="RGB8I",g[g.RGB8UI=36221]="RGB8UI",g[g.RGB9_E5=35901]="RGB9_E5",g[g.RGBA=6408]="RGBA",g[g.RGBA_INTEGER=36249]="RGBA_INTEGER",g[g.RGBA16F=34842]="RGBA16F",g[g.RGBA16I=36232]="RGBA16I",g[g.RGBA16UI=36214]="RGBA16UI",g[g.RGBA32F=34836]="RGBA32F",g[g.RGBA32I=36226]="RGBA32I",g[g.RGBA32UI=36208]="RGBA32UI",g[g.RGBA4=32854]="RGBA4",g[g.RGBA8=32856]="RGBA8",g[g.RGBA8_SNORM=36759]="RGBA8_SNORM",g[g.RGBA8I=36238]="RGBA8I",g[g.RGBA8UI=36220]="RGBA8UI",g[g.SRGB8=35905]="SRGB8",g[g.SRGB8_ALPHA8=35907]="SRGB8_ALPHA8",(A=e.TextureType||(e.TextureType={}))[A.BYTE=5120]="BYTE",A[A.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",A[A.SHORT=5122]="SHORT",A[A.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",A[A.INT=5124]="INT",A[A.UNSIGNED_INT=5125]="UNSIGNED_INT",A[A.FLOAT=5126]="FLOAT",A[A.HALF_FLOAT=5131]="HALF_FLOAT",A[A.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",A[A.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",A[A.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",A[A.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",A[A.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",A[A.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",A[A.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",A[A.HALF_FLOAT_OES=36193]="HALF_FLOAT_OES",A[A.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",(m=e.TextureTarget||(e.TextureTarget={}))[m.TEXTURE_2D=3553]="TEXTURE_2D",m[m.TEXTURE_3D=32879]="TEXTURE_3D",m[m.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",m[m.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",(T=e.TextureFilter||(e.TextureFilter={}))[T.LINEAR=9729]="LINEAR",T[T.NEAREST=9728]="NEAREST",T[T.NEAREST_MIPMAP_NEAREST=9984]="NEAREST_MIPMAP_NEAREST",T[T.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",T[T.NEAREST_MIPMAP_LINEAR=9986]="NEAREST_MIPMAP_LINEAR",T[T.LINEAR_MIPMAP_LINEAR=9987]="LINEAR_MIPMAP_LINEAR",(v=e.TextureRepeat||(e.TextureRepeat={}))[v.REPEAT=10497]="REPEAT",v[v.CLAMP=33071]="CLAMP",v[v.REPEAT_MIRROR=33648]="REPEAT_MIRROR";const b=(e,t,r,i=!1,n=!1,s=i)=>({format:e,types:t,render:i,renderExt:s,filter:n,num:r}),p={6406:b(6406,[5121,1,5131,2,36193,2,5126,4],1,!0,!0),33189:b(6402,[5123,2,5125,4],1,!0),33190:b(6402,[5125,4],1,!0),36012:b(6402,[5126,4],1,!0),35056:b(34041,[34042,4],1,!0),36013:b(34041,[36269,4],1,!0),6410:b(6410,[5121,2,5131,4,36193,4,5126,8],2,!0,!0),6409:b(6409,[5121,1,5131,2,36193,2,5126,4],1,!0,!0),35898:b(6407,[5126,12,5131,6,35899,4],3,!1,!0,!0),33325:b(6403,[5126,4,5131,2],1,!1,!0,!0),33331:b(36244,[5122,2],1,!0),33332:b(36244,[5123,2],1,!0),33326:b(6403,[5126,4],1,!1,!1,!0),33333:b(36244,[5124,4],1,!0),33334:b(36244,[5125,4],1,!0),36756:b(6403,[5120,1],1,!1,!0),33321:b(6403,[5121,1],1,!0,!0),33329:b(36244,[5120,1],1,!0),33330:b(36244,[5121,1],1,!0),33327:b(33319,[5126,8,5131,4],2,!1,!0,!0),33337:b(33320,[5122,4],2,!0),33338:b(33320,[5123,4],2,!0),33328:b(33319,[5126,8],2,!1,!1,!0),33339:b(33320,[5124,8],2,!0),33340:b(33320,[5125,8],2,!0),36757:b(33319,[5120,2],2,!1,!0),33323:b(33319,[5121,2],2,!0,!0),33335:b(33320,[5120,2],2,!0),33336:b(33320,[5121,2],2,!0),6407:b(6407,[5121,3,5131,6,36193,6,5126,12,33635,2],3,!0,!0),32857:b(6408,[33640,4],4,!0,!0),36975:b(36249,[33640,4],4,!0),34843:b(6407,[5126,12,5131,6],3,!1,!0),36233:b(36248,[5122,6],3),36215:b(36248,[5123,6],3),34837:b(6407,[5126,12],3),36227:b(36248,[5124,12],3),36209:b(36248,[5125,12],3),32855:b(6408,[5121,4,32820,2,33640,4],4,!0,!0),36194:b(6407,[5121,3,33635,2],3,!0,!0),36758:b(6407,[5120,3],3,!1,!0),32849:b(6407,[5121,3],3,!0,!0),36239:b(36248,[5120,3],3),36221:b(36248,[5121,3],3),35901:b(6407,[5126,12,5131,6,35902,4],3,!1,!0),6408:b(6408,[5121,4,5131,8,36193,8,5126,16,32819,2,32820,2],4,!0,!0),34842:b(6408,[5126,16,5131,8],4,!1,!0,!0),36232:b(36249,[5122,8],4,!0),36214:b(36249,[5123,8],4,!0),34836:b(6408,[5126,16],4,!1,!1,!0),36226:b(36249,[5124,16],4,!0),36208:b(36249,[5125,16],4,!0),32854:b(6408,[5121,4,32819,2],4,!0,!0),36759:b(6408,[5120,4],4,!1,!0),32856:b(6408,[5121,4],4,!0,!0),36238:b(36249,[5120,4],4,!0),36220:b(36249,[5121,4],4,!0),35907:b(6408,[5121,4],4,!0,!0),35905:b(6407,[5121,3],3,!1,!0)},N=e=>"undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext,O=e=>5126===e.type||5131===e.type||36193===e.type||36269===e.type;class S extends Error{constructor(e){super(`WebGL error ${e?": "+e:""}`)}}const I=e=>{throw new S(e)};class G{constructor(e,t,r=e.ARRAY_BUFFER,i=e.STATIC_DRAW){this.gl=e,this.buffer=e.createBuffer()||I("error creating WebGL buffer"),this.target=r,this.mode=i,t&&this.set(t)}bind(){return this.gl.bindBuffer(this.target,this.buffer),!0}unbind(){return this.gl.bindBuffer(this.target,null),!0}release(){return this.buffer&&(this.gl.deleteBuffer(this.buffer),delete this.buffer),!0}set(e,t=this.mode){this.bind(),this.gl.bufferData(this.target,e,t)}setChunk(e,t=0){this.bind(),this.gl.bufferSubData(this.target,t,e)}}const F=(e,t,r=e.ARRAY_BUFFER,i=e.STATIC_DRAW)=>new G(e,t,r,i),L=(e,t,r=e.STATIC_DRAW)=>(t.attribPool?t.attribs=U(e,t.attribPool,void 0,e.ARRAY_BUFFER,r):P(e,t.attribs,r),t.instances&&P(e,t.instances.attribs,r),x(e,t.indices,r),null==t.mode&&(t.mode=e.TRIANGLES),t),P=(e,t,r)=>{if(t)for(let i in t)if(t.hasOwnProperty(i)){const n=t[i];n.buffer?n.data&&n.buffer.set(n.data):n.buffer=new G(e,n.data,e.ARRAY_BUFFER,r)}return t},x=(e,t,r=e.STATIC_DRAW)=>(t&&(t.buffer?t.data&&t.buffer.set(t.data):t.buffer=new G(e,t.data,e.ELEMENT_ARRAY_BUFFER,r)),t),U=(e,t,r,i=e.ARRAY_BUFFER,n=e.STATIC_DRAW)=>{const s=F(e,t.bytes(),i,n),a={};for(let e of r||Object.keys(t.specs)){const r=t.specs[e];a[e]={buffer:s,size:r.size,type:r.type,stride:t.byteStride,offset:r.byteOffset}}return a},B={alpha:!0,antialias:!0,depth:!0,premultipliedAlpha:!0,preserveDrawingBuffer:!1,stencil:!1},C=(e,t,r=!0)=>{const i={};if(t)for(let n of t)i[n]=e.getExtension(n),r&&!i[n]&&I(`extension ${n} not available`);return i},D=(e,t,r)=>{const i=window.devicePixelRatio||1;return 1!=i&&(e.style.width=`${t}px`,e.style.height=`${r}px`),e.width=t*i,e.height=r*i,i},M=e=>{if(e)for(let t,r=e.length;--r>=0;)(t=e[r])&&t.bind(r)};class y{constructor(e,t={}){this.gl=e,this.tex=e.createTexture()||I("error creating WebGL texture"),this.configure(t)}configure(e={}){const t=this.gl,i=N(t),n=e.target||this.target||3553,s=e.format||this.format||6408,a=p[s],o=a.format,l=e.type||this.type||a.types[0];let u,c,E;if(!this.target&&(this.target=n),this.format=s,this.type=l,t.bindTexture(this.target,this.tex),void 0!==e.flip&&t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flip?1:0),void 0!==e.premultiply&&t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.premultiply?1:0),void 0!==e.image){const r=e.level||0,i=e.pos||[0,0,0];32879===n?e.width&&e.height&&e.depth&&(e.sub?t.texSubImage3D(n,r,i[0],i[1],i[2],e.width,e.height,e.depth,o,l,e.image):(0===r&&(this.size=[e.width,e.height,e.depth]),t.texImage3D(n,r,s,e.width,e.height,e.depth,0,o,l,e.image))):e.width&&e.height?e.sub?t.texSubImage2D(n,r,i[0],i[1],e.width,e.height,o,l,e.image):(0===r&&(this.size=[e.width,e.height]),t.texImage2D(n,r,s,e.width,e.height,0,o,l,e.image)):e.sub?t.texSubImage2D(n,r,i[0],i[1],o,l,e.image):(null!=e.image&&0==r&&(this.size=[e.image.width,e.image.height]),t.texImage2D(n,r,s,o,l,e.image))}if(e.mipmap&&t.generateMipmap(n),e.filter){const i=e.filter;r.isArray(i)?(u=i[0],c=i[1]):u=c=i,u&&t.texParameteri(n,t.TEXTURE_MIN_FILTER,u),c&&t.texParameteri(n,t.TEXTURE_MAG_FILTER,c)}if(e.wrap){const s=e.wrap;r.isArray(s)?(u=s[0],c=s[1],E=s[2]):u=c=E=s,u&&t.texParameteri(n,t.TEXTURE_WRAP_S,u),c&&t.texParameteri(n,t.TEXTURE_WRAP_T,c),E&&i&&n===t.TEXTURE_3D&&t.texParameteri(n,t.TEXTURE_WRAP_R,E)}if(e.lod){const[r,i]=e.lod;r&&t.texParameteri(n,t.TEXTURE_MIN_LOD,r),i&&t.texParameteri(n,t.TEXTURE_MAX_LOD,i)}if(e.minMaxLevel){const[r,i]=e.minMaxLevel;t.texParameteri(n,t.TEXTURE_BASE_LEVEL,r),t.texParameteri(n,t.TEXTURE_MAX_LEVEL,i)}return!0}bind(e=0){const t=this.gl;return t.activeTexture(t.TEXTURE0+e),t.bindTexture(this.target,this.tex),!0}unbind(e=0){const t=this.gl;return t.activeTexture(t.TEXTURE0+e),t.bindTexture(this.target,null),!0}release(){return!!this.tex&&(this.gl.deleteTexture(this.tex),delete this.tex,delete this.gl,!0)}}const w=(e,t)=>new y(e,t),H=e=>{const t=r.isArray(e)?e:[e];for(let e=0,r=t.length;e<r;e++){const r=t[e],i=r.indices,n=r.shader.gl;r.textures&&M(r.textures),r.shader.prepareState(),r.shader.bind(r),i&&i.buffer?(i.buffer.bind(),r.instances?$(n,r):n.drawElements(r.mode,r.num,i.data instanceof Uint32Array?n.UNSIGNED_INT:n.UNSIGNED_SHORT,0)):r.instances?$(n,r):n.drawArrays(r.mode,0,r.num),r.shader.unbind(null)}},$=(e,t)=>{const r=N(e),i=r?void 0:e.getExtension("ANGLE_instanced_arrays");r||i||I("instancing not supported");const n=t.shader.attribs,s=t.instances.attribs;t.shader.bindAttribs(s);for(let t in s){const a=n[t];if(a){let n=s[t].divisor;n=void 0!==n?n:1,r?e.vertexAttribDivisor(a.loc,n):i.vertexAttribDivisorANGLE(a.loc,n)}}if(t.indices){const n=t.indices.data instanceof Uint32Array?e.UNSIGNED_INT:e.UNSIGNED_SHORT;r?e.drawElementsInstanced(t.mode,t.num,n,0,t.instances.num):i.drawElementsInstancedANGLE(t.mode,t.num,n,0,t.instances.num)}else r?e.drawArraysInstanced(t.mode,0,t.num,t.instances.num):i.drawArraysInstancedANGLE(t.mode,0,t.num,t.instances.num);for(let t in s){const s=n[t];s&&(r?e.vertexAttribDivisor(s.loc,0):i.vertexAttribDivisorANGLE(s.loc,0))}t.shader.unbind(null)};class j{constructor(e,t){this.gl=e,this.buffer=e.createRenderbuffer()||I("error creating RBO"),this.configure(t)}bind(){return this.gl.bindRenderbuffer(this.gl.RENDERBUFFER,this.buffer),!0}unbind(){return this.gl.bindRenderbuffer(this.gl.RENDERBUFFER,null),!0}release(){return this.gl.deleteRenderbuffer(this.buffer),delete this.buffer,!0}configure(e){const t=this.gl;return this.bind(),this.format=e.format||t.DEPTH_COMPONENT16,this.width=e.width,this.height=e.height,t.renderbufferStorage(t.RENDERBUFFER,e.format||t.DEPTH_COMPONENT16,e.width,e.height),this.unbind(),!0}}const X=36064,V=36063;class q{constructor(e,t){this.gl=e,this.fbo=e.createFramebuffer()||I("error creating FBO"),this.ext=!N(e)&&t&&t.tex&&t.tex.length>1?e.getExtension("WEBGL_draw_buffers")||I("missing WEBGL_draw_buffers ext"):void 0,this.maxAttachments=e.getParameter(V),t&&this.configure(t)}bind(){return this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,this.fbo),!0}unbind(){return this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null),!0}release(){return this.gl.deleteFramebuffer(this.fbo),delete this.fbo,delete this.ext,!0}configure(e){const r=this.gl;if(this.bind(),e.tex){t.assert(e.tex.length<this.maxAttachments,`too many attachments (max. ${this.maxAttachments})`);const i=[];for(let n=0;n<e.tex.length;n++){const s=e.tex[n];t.assert(!(!p[s.format].render&&!p[s.format].renderExt),`texture #${n} has non-renderable format`);const a=X+n;r.framebufferTexture2D(r.FRAMEBUFFER,a,r.TEXTURE_2D,s.tex,0),i[n]=a}this.ext?this.ext.drawBuffersWEBGL(i):N(r)&&r.drawBuffers(i)}return e.depth&&(e.depth instanceof j?r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,e.depth.buffer):r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,e.depth.tex,0)),this.validate()}validate(){const e=this.gl,t=e.checkFramebufferStatus(e.FRAMEBUFFER);switch(t){case e.FRAMEBUFFER_COMPLETE:return!0;case e.FRAMEBUFFER_UNSUPPORTED:I("FBO unsupported");case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:I("FBO incomplete attachment");case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:I("FBO incomplete dimensions");case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:I("FBO incomplete missing attachment");default:return I(`FBO error: ${t}`)}}}const z=(e,t)=>new q(e,t),W={ambientCol:[.1,.1,.1],diffuseCol:[.8,.8,.8],specularCol:[1,1,1]},Z={ambientCol:"vec3",diffuseCol:"vec3",specularCol:"vec3"},k=(e={},t={},r=W)=>Object.keys(r).reduce((i,n)=>(!1!==t[n]&&(i[n]=[Z[n],e[n]||r[n]]),i),{}),Y=(e,t,r)=>e[r]||t[r].defaultVal||n.IDENT44,K=(e="model")=>(t,r)=>n.normal44([],Y(r,t,e)),J=(e="model",t="view")=>(r,i)=>n.normal44(null,n.mulM44([],Y(i,r,t),Y(i,r,e)));const Q=(e=!0)=>({attribs:Object.assign({position:{data:new Float32Array([-1,-1,1,-1,-1,1,1,1]),size:2}},e?{uv:{data:new Float32Array([0,0,1,0,0,1,1,1]),size:2}}:null),uniforms:{},shader:null,mode:5,num:4}),ee={a:"",v:"",u:"",o:""},te={100:{number:100,attrib:(e,t,i)=>`attribute ${r.isArray(t)?t[0]:t} ${i.a}${e};`,varying:{vs:(e,t,r)=>re("varying",t,r.v+e),fs:(e,t,r)=>re("varying",t,r.v+e)},uniform:(e,t,r)=>re("uniform",t,r.u+e),output:(e,t,i)=>r.isArray(t)?`#define ${i.o}${e} gl_FragData[${t[1]}]`:""},"300 es":{number:300,attrib:(e,t,i)=>r.isArray(t)?`layout(location=${t[1]}) in ${t[0]} ${i.a}${e};`:`in ${t} ${i.a}${e};`,varying:{vs:(e,t,r)=>re("out",t,r.v+e),fs:(e,t,r)=>re("in",t,r.v+e)},uniform:(e,t,r)=>re("uniform",t,r.u+e),output:(e,t,i)=>r.isArray(t)?`layout(location=${t[1]}) out ${t[0]} ${i.o}${e};`:`out ${t} ${i.o}${e};`}},re=(e,t,i)=>{const n=r.isArray(t)?t[0]:t;return n.indexOf("[]")>0?`${e} ${n.replace("[]","")} ${i}[${t[1]}];`:`${e} ${n} ${i};`},ie=(e,t,r="")=>{let i=">=";return t||(t=r,r=null,i="<"),`#if __VERSION__ ${i} ${e}\n${t}${r?`\n#else\n${r}`:""}\n#endif`},ne=ie(300,"","#define texture texture2D"),se="#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp int;\nprecision highp float;\n#else\nprecision mediump int;\nprecision mediump float;\n#endif\n#ifndef PI\n#define PI 3.141592653589793\n#endif\n#ifndef TAU\n#define TAU 6.283185307179586\n#endif\n#ifndef HALF_PI\n#define HALF_PI 1.570796326794896\n#endif\n",ae=e=>(t,r,i=0)=>{let n;return s=>{(s=void 0===s?i:s)!==n&&(t["uniform1"+e](r,s),n=s)}},oe=(e,t)=>(r,i,n=t)=>{let s=[];return t=>{t=void 0===t?n:t,u.equivArrayLike(s,t)||(r["uniform"+e](i,t),s=[...t])}},le=(e,t)=>(r,i,n=t)=>{let s=[];return t=>{t=void 0===t?n:t,u.equivArrayLike(s,t)||(r["uniformMatrix"+e](i,!1,t),s=[...t])}},ue=[0],ce={bool:ae("i"),float:ae("f"),int:ae("i"),uint:ae("ui"),bvec2:oe("2iv",c.ZERO2),bvec3:oe("3iv",c.ZERO3),bvec4:oe("4iv",c.ZERO4),ivec2:oe("2iv",c.ZERO2),ivec3:oe("3iv",c.ZERO3),ivec4:oe("4iv",c.ZERO4),vec2:oe("2fv",c.ZERO2),vec3:oe("3fv",c.ZERO3),vec4:oe("4fv",c.ZERO4),mat2:le("2fv",n.IDENT22),mat3:le("3fv",n.IDENT33),mat4:le("4fv",n.IDENT44),sampler2D:ae("i"),sampler2DShadow:ae("i"),sampler3D:ae("i"),samplerCube:ae("i"),samplerCubeShadow:ae("i"),"bool[]":oe("1iv",ue),"float[]":oe("1fv",ue),"int[]":oe("1iv",ue),"uint[]":oe("1uiv",ue),"bvec2[]":oe("2iv",c.ZERO2),"bvec3[]":oe("3iv",c.ZERO3),"bvec4[]":oe("4iv",c.ZERO4),"ivec2[]":oe("2iv",c.ZERO2),"ivec3[]":oe("3iv",c.ZERO3),"ivec4[]":oe("4iv",c.ZERO4),"vec2[]":oe("2fv",c.ZERO2),"vec3[]":oe("3fv",c.ZERO3),"vec4[]":oe("4fv",c.ZERO4),"mat2[]":le("2fv",c.ZERO2),"mat3[]":le("3fv",c.ZERO3),"mat4[]":le("4fv",c.ZERO4),"sampler2D[]":oe("1iv",ue),"sampler2DShadow[]":oe("1iv",ue),"sampler3D[]":oe("1iv",ue),"samplerCube[]":oe("1iv",ue),"samplerCubeShadow[]":oe("1iv",ue)},Ee=/ERROR: \d+:(\d+): (.*)/;class de{constructor(e,t,r,i,n){this.gl=e,this.program=t,this.attribs=r,this.uniforms=i,this.state=n||{}}bind(e){return!!this.program&&(this.gl.useProgram(this.program),this.bindAttribs(e.attribs),this.bindUniforms(e.uniforms),!0)}unbind(){return this.gl.useProgram(null),!0}release(){return!!this.program&&(this.gl.deleteProgram(this.program),delete this.program,!0)}bindAttribs(e){const t=this.gl;let r;for(let i in e)if(r=this.attribs[i]){const n=e[i];n.buffer.bind(),t.enableVertexAttribArray(r.loc),t.vertexAttribPointer(r.loc,n.size||3,n.type||t.FLOAT,n.normalized||!1,n.stride||0,n.offset||0)}else console.warn(`unknown attrib: ${i}`)}bindUniforms(e={}){const t=this.uniforms;for(let i in e){const n=t[i];if(n){let s=e[i];s=r.isFunction(s)?s(t,e):r.implementsFunction(s,"deref")?s.deref():s,n.setter(s)}else console.warn(`unknown uniform: ${i}`)}for(let i in t)if(t.hasOwnProperty(i)&&(!e||!r.existsAndNotNull(e[i]))){const r=t[i],n=r.defaultFn?r.defaultFn(t,e):r.defaultVal;r.setter(n)}}prepareState(e=this.state){const t=this.gl;void 0!==e.depth&&this.setState(t.DEPTH_TEST,e.depth),void 0!==e.cull&&(this.setState(t.CULL_FACE,e.cull),e.cullMode&&t.cullFace(e.cullMode)),void 0!==e.blend&&(this.setState(t.BLEND,e.blend),e.blendFn&&t.blendFunc(e.blendFn[0],e.blendFn[1]),void 0!==e.blendEq&&t.blendEquation(e.blendEq)),void 0!==e.stencil&&(this.setState(t.STENCIL_TEST,e.stencil),e.stencilFn&&t.stencilFunc(e.stencilFn[0],e.stencilFn[1],e.stencilFn[2]),e.stencilOp&&t.stencilOp(e.stencilOp[0],e.stencilOp[1],e.stencilOp[2]),void 0!==e.stencilMask&&t.stencilMask(e.stencilMask))}setState(e,t){t?this.gl.enable(e):this.gl.disable(e)}}const Re=(e,t)=>{const i=N(e)?"300 es":"100",n=r.isFunction(t.vs)?ge(t,"vs",i):Ae(t,"vs",i),s=r.isFunction(t.fs)?ge(t,"fs",i):Ae(t,"fs",i);console.log(n),console.log(s),he(e,t.ext);const a=me(e,e.VERTEX_SHADER,n),o=me(e,e.FRAGMENT_SHADER,s),l=e.createProgram()||I("error creating shader program");if(e.attachShader(l,a),e.attachShader(l,o),e.linkProgram(l),e.getProgramParameter(l,e.LINK_STATUS)){const r=ve(e,l,t.attribs),i=be(e,l,t.uniforms);return e.deleteShader(a),e.deleteShader(o),new de(e,l,r,i,t.state)}throw new Error(`Error linking shader: ${e.getProgramInfoLog(l)}`)},fe=(e,t,r)=>{let i=[];for(let n in e)e.hasOwnProperty(n)&&i.push(t(n,e[n],r));return i.push(""),i.join("\n")},_e=(e,t,i)=>{const n=_[e],s="300 es"===i;return n&&(!s&&n.gl||s&&n.gl2)?`#extension ${n&&n.alias||e} : ${r.isBoolean(t)?t?"enable":"disable":t}\n`:""},he=(e,t)=>{if(t)for(let r in t){const i=t[r];!0!==i&&"require"!==i||C(e,[r],"require"===i)}},ge=(e,t,i)=>{let n="";if(n+=e.pre?e.replacePrelude?e.pre:e.pre+"\n"+se:se,e.ext)for(let t in e.ext)n+=_e(t,e.ext[t],i);const u={},c={},E={},d={};if(e.uniforms)for(let t in e.uniforms){const i=e.uniforms[t];d[t]=r.isArray(i)?i[0].indexOf("[]")>0?o.uniform(i[0],t,{num:i[1]}):o.uniform(i[0],t):o.uniform(i,t)}if("vs"===t){for(let t in e.attribs){const i=e.attribs[t];u[t]=r.isArray(i)?o.input(i[0],t,{loc:i[1]}):o.input(i,t)}if(e.varying)for(let t in e.varying){const i=e.varying[t];c[t]=r.isArray(i)?o.output(i[0],t,{num:i[1]}):o.output(i,t)}}else{if(e.varying)for(let t in e.varying){const i=e.varying[t];u[t]=r.isArray(i)?o.input(i[0],t,{num:i[1]}):o.input(i,t)}const t=e.outputs||h;if(i>="300 es")for(let e in t){const i=t[e];c[e]=r.isArray(i)?o.output(i[0],e,{loc:i[1]}):o.output(i,e)}else for(let e in t){const s=t[e];r.isArray(s)&&"vec4"===s[0]?(n+=`#define ${e} gl_FragData[${s[1]}]\n`,E[e]=o.sym("vec4",e)):a.unsupported(`GLSL ${i} doesn't support output vars`)}}const R=l.targetGLSL({type:t,version:i,prelude:n});return R(o.program([...s.vals(d),...s.vals(u),...s.vals(c),...e[t](R,d,u,Object.assign(Object.assign({},c),E))]))+(e.post?"\n"+e.post:"")},Ae=(e,t,r)=>{const i=te[r],n=Object.assign(Object.assign({},ee),e.declPrefixes),s="vs"===t;let a="";if(a+=`#version ${r}\n`,a+=e.pre?e.replacePrelude?e.pre:e.pre+"\n"+se:se,e.ext)for(let t in e.ext)a+=_e(t,e.ext[t],r);return!1!==e.generateDecls&&(a+=s?fe(e.attribs,i.attrib,n):fe(e.outputs||h,i.output,n),a+=fe(e.varying,i.varying[t],n),a+=fe(e.uniforms,i.uniform,n)),a+=e[t],e.post&&(a+="\n"+e.post),a},me=(e,t,r)=>{const i=e.createShader(t)||I("error creating shader");return e.shaderSource(i,r),e.compileShader(i),e.getShaderParameter(i,e.COMPILE_STATUS)?i:Te(e,i,r)},Te=(e,t,i)=>{const n=i.split("\n"),s=e.getShaderInfoLog(t).split("\n").map(e=>{const t=Ee.exec(e),r=t?t[1]:null;if(r)return`line ${r}: ${t[2]}\n${n[parseInt(r)-1]}`}).filter(r.existsAndNotNull).join("\n");return I(`Error compiling shader:\n${s}`)},ve=(e,t,i)=>{const n={};for(let s in i){const a=i[s],[o,l]=r.isArray(a)?a:[a,null],u=s;null!=l?(e.bindAttribLocation(t,l,u),n[s]={type:o,loc:l}):n[s]={type:o,loc:e.getAttribLocation(t,u)}}return n},be=(t,i,n={})=>{const s={};for(let a in n){const o=n[a];let l,u,c,E,d;r.isArray(o)?([l,u,c]=o,E=l.indexOf("[]")<0?u:c,r.isFunction(E)&&(d=E,E=void 0)):l=o;const R=t.getUniformLocation(i,a);if(null!=R){const e=ce[l];e?s[a]={loc:R,setter:e(t,R,E),defaultFn:d,defaultVal:E,type:l}:I(`invalid uniform type: ${l}`)}else e.LOGGER.warn(`unknown uniform: ${a}`)}return s},pe=(e,t,r)=>[o.defMain(()=>[o.assign(e.gl_Position,o.vec4(r.position,o.FLOAT0,o.FLOAT1))])],Ne=(e,t,r,i)=>[o.defMain(()=>[o.assign(i.v_uv,r.uv),o.assign(e.gl_Position,o.vec4(r.position,o.FLOAT0,o.FLOAT1))])],Oe=(e,t,r,i)=>[o.defMain(()=>[o.assign(i.fragColor,o.$xy(e.gl_FragCoord))])],Se=(e,t,r,i)=>[o.defMain(()=>[o.assign(i.fragColor,o.texture(t.tex,r.v_uv))])],Ie={vs:pe,fs:Oe,attribs:{position:"vec2"},varying:{},uniforms:{},state:{depth:!1},ext:{}},Ge={vs:Ne,fs:Se,attribs:{position:"vec2",uv:"vec2"},varying:{v_uv:"vec2"},uniforms:{tex:"sampler2D"},state:{depth:!1},ext:{}},Fe=(e,t,r="position")=>e.instancePos?o.add(t[r],t[e.instancePos]):t[r],Le=(e,t,r)=>e.instanceColor?o.mul(t[e.instanceColor],r):e.color?o.mul(t[e.color],r):r;e.ALIAS_TEXTURE=ne,e.BLEND_ADD=[770,772],e.BLEND_NORMAL=[770,771],e.DEFAULT_MATERIAL=W,e.DEFAULT_OUTPUT=h,e.EXPORT_FRAGCOL=(e="col",t="o_fragColor")=>ie(300,`${t}=${e};`,`gl_FragColor=${e};`),e.FBO=q,e.FX_SHADER_SPEC=Ie,e.FX_SHADER_SPEC_UV=Ge,e.GLSL_HEADER=se,e.GL_EXT_INFO=_,e.LAMBERT=(e={})=>({vs:(t,r,i,n)=>[o.defMain(()=>[e.uv?o.assign(n.vuv,i[e.uv]):null,o.assign(n.vcolor,Le(e,i,r.diffuseCol)),o.assign(n.vnormal,E.surfaceNormal(i.normal,r.normalMat)),o.assign(t.gl_Position,E.transformMVP(Fe(e,i),r.model,r.view,r.proj))])],fs:(t,r,i,n)=>[o.defMain(()=>[o.assign(n.fragColor,o.vec4(E.diffuseLighting((!1!==e.bidir?E.halfLambert:E.lambert)(o.normalize(i.vnormal),r.lightDir),e.uv?o.mul(o.$(o.texture(r.tex,i.vuv),"xyz"),i.vcolor):i.vcolor,r.lightCol,r.ambientCol),1))])],attribs:Object.assign(Object.assign(Object.assign(Object.assign({position:"vec3",normal:"vec3"},e.uv?{[e.uv]:"vec2"}:null),e.color&&!e.instanceColor?{[e.color]:"vec3"}:null),e.instancePos?{[e.instancePos]:"vec3"}:null),e.instanceColor?{[e.instanceColor]:"vec3"}:null),varying:Object.assign({vcolor:"vec3",vnormal:"vec3"},e.uv?{vuv:"vec2"}:null),uniforms:Object.assign(Object.assign({model:"mat4",view:"mat4",proj:"mat4",normalMat:["mat4",J()],lightDir:["vec3",[0,1,0]],lightCol:["vec3",[1,1,1]]},k(Object.assign({diffuseCol:[1,1,1]},e.material),{specularCol:!1})),e.uv?{tex:"sampler2D"}:null),state:Object.assign({depth:!0},e.state)}),e.NO_PREFIXES=ee,e.PASSTHROUGH_FS=Oe,e.PASSTHROUGH_FS_UV=Se,e.PASSTHROUGH_VS=pe,e.PASSTHROUGH_VS_UV=Ne,e.PHONG=(e={})=>({vs:(t,r,i,n)=>[o.defMain(()=>{let s;return[s=o.sym(o.mul(r.model,o.vec4(Fe(e,i),1))),o.assign(n.vnormal,E.surfaceNormal(i.normal,r.normalMat)),o.assign(n.vlight,o.sub(r.lightPos,o.$(s,"xyz"))),o.assign(n.veye,o.sub(r.eyePos,o.$(s,"xyz"))),o.assign(n.vcolor,Le(e,i,r.diffuseCol)),o.assign(t.gl_Position,o.mul(o.mul(r.proj,r.view),s))]})],fs:(e,t,r,i)=>[o.defMain(()=>{let e,n,s,a;return[e=o.sym(o.normalize(r.vnormal)),n=o.sym(o.normalize(r.vlight)),s=o.sym(o.max(o.dot(e,n),o.FLOAT0)),a=o.sym(o.ternary(o.gt(s,o.FLOAT0),o.pow(o.dot(e,o.normalize(o.add(n,o.normalize(r.veye)))),t.shininess),o.FLOAT0)),o.assign(i.fragColor,o.add(E.diffuseLighting(s,r.vcolor,t.lightCol,t.ambientCol),o.mul(t.specularCol,a)))]})],attribs:Object.assign(Object.assign(Object.assign({position:"vec3",normal:"vec3"},e.color&&!e.instanceColor?{[e.color]:"vec3"}:null),e.instancePos?{[e.instancePos]:"vec3"}:null),e.instanceColor?{[e.instanceColor]:"vec3"}:null),varying:{vnormal:"vec3",veye:"vec3",vlight:"vec3",vcolor:"vec3"},uniforms:Object.assign({model:"mat4",normalMat:["mat4",K()],view:"mat4",proj:"mat4",shininess:["float",32],eyePos:"vec3",lightPos:["vec3",[0,0,2]],lightCol:["vec3",[1,1,1]]},k(e.material)),state:Object.assign({depth:!0},e.state)}),e.PREFIXES={a:"a_",v:"v_",u:"u_",o:"o_"},e.RBO=j,e.SYNTAX=te,e.Shader=de,e.TEX_FORMATS=p,e.Texture=y,e.VERSION_CHECK=ie,e.WebGLArrayBuffer=G,e.WebGLError=S,e.adaptDPI=D,e.autoNormalMatrix1=K,e.autoNormalMatrix2=J,e.bindTextures=M,e.buffer=F,e.checkerboard=e=>{const t=(e=Object.assign({size:16,col1:4294967295,col2:4278190080,cornerCols:[4294901760,4278255360,4278190335,4294967040]},e)).size,r=d.ARGB8888.toABGR(e.col1),i=d.ARGB8888.toABGR(e.col2),{canvas:n,ctx:s,img:a,pixels:o}=d.canvasPixels(t);for(let e=0,n=0;e<t;e++)for(let s=0;s<t;s++,n++)o[n]=1&e^1&s?r:i;if(e.corners){const r=e.cornerCols.map(d.ARGB8888.toABGR);o[0]=r[0],o[t-1]=r[1],o[o.length-t]=r[2],o[o.length-1]=r[3]}return s.putImageData(a,0,0),n},e.colorAttrib=Le,e.compileAttribPool=U,e.compileIndices=x,e.compileModel=L,e.compileShader=me,e.compileVAO=(e,t)=>{if(t.shader){const r=N(e),i=r?null:e.getExtension("OES_vertex_array_object");if(r||i){let n;return r?(n=e.createVertexArray(),e.bindVertexArray(n)):(n=i.createVertexArrayOES(),i.bindVertexArrayOES(n)),n&&I("error creating VAO"),t.shader.bindAttribs(t.attribs),t.indices&&t.indices.buffer.bind(),t.shader.unbind(null),r?e.bindVertexArray(null):i.bindVertexArrayOES(null),n}}},e.cube=e=>{const t=(e=Object.assign({size:1,normal:!0,uv:!0},e)).size,r={attribs:{position:{data:new Float32Array([t,t,-t,t,t,t,t,-t,t,t,-t,-t,-t,t,t,-t,t,-t,-t,-t,-t,-t,-t,t,-t,t,t,t,t,t,t,t,-t,-t,t,-t,-t,-t,-t,t,-t,-t,t,-t,t,-t,-t,t,t,t,t,-t,t,t,-t,-t,t,t,-t,t,-t,t,-t,t,t,-t,t,-t,-t,-t,-t,-t])}},indices:{data:new Uint16Array([0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23])},uniforms:{},shader:null,num:36};return e.normal&&(r.attribs.normal={data:new Float32Array([1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1])}),e.uv&&(r.attribs.uv={data:new Float32Array([1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1]),size:2}),r},e.cubeMap=(e,t,r={})=>{const n=new y(e,{target:e.TEXTURE_CUBE_MAP}),s=i.withoutKeysObj(r,["target","image","filter","mipmap"]);for(let r=0;r<6;r++)s.target=e.TEXTURE_CUBE_MAP_POSITIVE_X+r,s.image=t[r],n.configure(s);return n.configure({filter:r.filter,mipmap:r.mipmap}),n},e.defMaterial=k,e.draw=H,e.error=I,e.fbo=z,e.floatTexture=(e,t,r,i,n,s)=>new y(e,{filter:e.NEAREST,wrap:e.CLAMP_TO_EDGE,format:n||(N(e)?34836:6408),type:s||e.FLOAT,image:t,width:r,height:i}),e.getExtensions=C,e.glCanvas=(e={})=>{const t=e.canvas?r.isString(e.canvas)?document.getElementById(e.canvas):e.canvas:document.createElement("canvas");e.width&&(t.width=e.width),e.height&&(t.height=e.height),!1!==e.autoScale&&D(t,t.width,t.height),e.parent&&e.parent.appendChild(t);const i=t.getContext(2===e.version?"webgl2":"webgl",Object.assign(Object.assign({},B),e.opts));return i||I("WebGL unavailable"),e.onContextLost&&t.addEventListener("webglcontextlost",e.onContextLost),{canvas:t,gl:i,ext:C(i,e.ext)}},e.isFloatTexture=O,e.isGL2Context=N,e.multipass=e=>{const r=e.gl,i=N(r),n=e.passes.length;t.assert(n>0,"require at least one shader pass");const a=Object.keys(e.textures).reduce((t,i)=>(t[i]=w(r,Object.assign({width:e.width,height:e.height,filter:r.NEAREST,wrap:r.CLAMP_TO_EDGE,image:null},e.textures[i])),t),{}),o=L(r,Q(!1)),l=e.passes.map(e=>{const t=e.model?L(r,e.model):Object.assign({},o);return t.shader=(e=>{const t=e.inputs.length,n=e.outputs.length,o={},l={vs:e.vs||pe,fs:e.fs,attribs:e.attribs||{position:"vec2"},varying:e.varying,uniforms:Object.assign(Object.assign({},e.uniforms),t?{inputs:["sampler2D[]",t,[...s.range(t)]]}:null),outputs:n?s.transduce(s.map(e=>[`output${e}`,["vec4",e]]),s.assocObj(),s.range(n)):void 0,state:e.state,pre:e.pre,post:e.post,replacePrelude:e.replacePrelude,generateDecls:e.generateDecls,ext:o},u=s.some(e=>O(a[e]),e.inputs),c=s.some(e=>O(a[e]),e.outputs);return i||(u&&(o.OES_texture_float="require"),n>1&&(o.WEBGL_draw_buffers="require")),c&&(o[i?"EXT_color_buffer_float":"WEBGL_color_buffer_float"]="require"),Re(r,l)})(e),t.uniforms=Object.assign({},e.uniformVals),e.inputs.length>0&&(t.textures=e.inputs.map(e=>a[e])),t}),u=!e.passes[n-1].outputs.length,c=(u?e.passes.slice(0,n-1):e.passes).map(e=>z(r,{tex:e.outputs.map(e=>a[e])})),E=(t,i)=>{const n=e.passes[t],s=l[t],o=s.shader,u=n.outputs.length?a[n.outputs[0]].size:[r.drawingBufferWidth,r.drawingBufferHeight];o.uniforms.resolution&&(s.uniforms.resolution=u),o.uniforms.time&&(s.uniforms.time=i),r.viewport(0,0,u[0],u[1]),H(s)},d=e=>{for(let t=0;t<c.length;t++)c[t].bind(),E(t,e),c[t].unbind();u&&E(n-1,e)},R=()=>{d(.001*(Date.now()-h)),f&&(_=requestAnimationFrame(R))};let f,_,h=Date.now();return{start(){h=Date.now(),f=!0,_=requestAnimationFrame(R)},stop(){f&&(f=!1,cancelAnimationFrame(_))},update(e){d(e)},passes:e.passes,fbos:c,models:l,textures:a}},e.positionAttrib=Fe,e.prepareShaderSource=Ae,e.quad=Q,e.rbo=(e,t)=>new j(e,t),e.readPixels=(e,t,r,i,n,s,a,o)=>(e.readPixels(t,r,i,n,s,a,o),o),e.readTexture=(e,t,r,i,n)=>{const s=new q(e,{tex:[t]});return e.readPixels(0,0,t.size[0],t.size[1],r,i,n),s.unbind(),s.release(),n},e.screen2d=function(e,t){return r.isNumber(e)?n.ortho([],0,e,t,0,-1,1):n.ortho([],0,e.drawingBufferWidth,e.drawingBufferHeight,0,-1,1)},e.setLogger=t=>e.LOGGER=t,e.shader=Re,e.shaderSourceFromAST=ge,e.stripes=e=>{const t=(e=Object.assign({size:16,col1:4294967295,col2:4278190080},e)).size,r=d.ARGB8888.toABGR(e.col1),i=d.ARGB8888.toABGR(e.col2),{canvas:n,ctx:s,img:a,pixels:o}=e.horizontal?d.canvasPixels(1,t):d.canvasPixels(t,1);for(let e=t;--e>=0;)o[e]=1&e?r:i;return s.putImageData(a,0,0),n},e.texture=w,Object.defineProperty(e,"__esModule",{value:!0})}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@thi.ng/api"),require("@thi.ng/checks"),require("@thi.ng/associative"),require("@thi.ng/matrices"),require("@thi.ng/transducers"),require("@thi.ng/errors"),require("@thi.ng/shader-ast"),require("@thi.ng/shader-ast-glsl"),require("@thi.ng/equiv"),require("@thi.ng/vectors"),require("@thi.ng/shader-ast-stdlib"),require("@thi.ng/pixel")):"function"==typeof define&&define.amd?define(["exports","@thi.ng/api","@thi.ng/checks","@thi.ng/associative","@thi.ng/matrices","@thi.ng/transducers","@thi.ng/errors","@thi.ng/shader-ast","@thi.ng/shader-ast-glsl","@thi.ng/equiv","@thi.ng/vectors","@thi.ng/shader-ast-stdlib","@thi.ng/pixel"],t):t(((e=e||self).thi=e.thi||{},e.thi.ng=e.thi.ng||{},e.thi.ng.webgl={}),e.thi.ng.api,e.thi.ng.checks,e.thi.ng.associative,e.thi.ng.matrices,e.thi.ng.transducers,e.thi.ng.errors,e.thi.ng.shaderAst,e.thi.ng.shaderAstGlsl,e.thi.ng.equiv,e.thi.ng.vectors,e.thi.ng.shaderAstStdlib,e.thi.ng.pixel)}(this,(function(e,t,r,i,n,s,a,o,l,u,c,E,R){"use strict";var d,f;(d=e.Blend||(e.Blend={}))[d.ZERO=0]="ZERO",d[d.ONE=1]="ONE",d[d.SRC_COLOR=768]="SRC_COLOR",d[d.ONE_MINUS_SRC_COLOR=769]="ONE_MINUS_SRC_COLOR",d[d.DST_COLOR=774]="DST_COLOR",d[d.ONE_MINUS_DST_COLOR=775]="ONE_MINUS_DST_COLOR",d[d.SRC_ALPHA=770]="SRC_ALPHA",d[d.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",d[d.DST_ALPHA=772]="DST_ALPHA",d[d.ONE_MINUS_DST_ALPHA=773]="ONE_MINUS_DST_ALPHA",d[d.CONSTANT_COLOR=32769]="CONSTANT_COLOR",d[d.ONE_MINUS_CONSTANT_COLOR=32770]="ONE_MINUS_CONSTANT_COLOR",d[d.CONSTANT_ALPHA=32771]="CONSTANT_ALPHA",d[d.ONE_MINUS_CONSTANT_ALPHA=32772]="ONE_MINUS_CONSTANT_ALPHA",d[d.SRC_ALPHA_SATURATE=776]="SRC_ALPHA_SATURATE",(f=e.BlendEquation||(e.BlendEquation={}))[f.FUNC_ADD=32774]="FUNC_ADD",f[f.FUNC_REVERSE_SUBTRACT=32779]="FUNC_REVERSE_SUBTRACT",f[f.FUNC_SUBTRACT=32778]="FUNC_SUBTRACT",f[f.MAX=32776]="MAX",f[f.MIN=32775]="MIN";const _={WEBGL_draw_buffers:{gl:!0,alias:"GL_EXT_draw_buffers"},OES_standard_derivatives:{gl:!0,alias:"GL_OES_standard_derivatives"}};e.LOGGER=t.NULL_LOGGER;const h={fragColor:["vec4",0]};var g,A,m,T,v;(g=e.TextureFormat||(e.TextureFormat={}))[g.ALPHA=6406]="ALPHA",g[g.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",g[g.DEPTH_COMPONENT16=33189]="DEPTH_COMPONENT16",g[g.DEPTH_COMPONENT24=33190]="DEPTH_COMPONENT24",g[g.DEPTH_COMPONENT32F=36012]="DEPTH_COMPONENT32F",g[g.DEPTH_STENCIL=34041]="DEPTH_STENCIL",g[g.DEPTH24_STENCIL8=35056]="DEPTH24_STENCIL8",g[g.DEPTH32F_STENCIL8=36013]="DEPTH32F_STENCIL8",g[g.LUMINANCE=6409]="LUMINANCE",g[g.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",g[g.R11F_G11F_B10F=35898]="R11F_G11F_B10F",g[g.R16F=33325]="R16F",g[g.R16I=33331]="R16I",g[g.R16UI=33332]="R16UI",g[g.R32F=33326]="R32F",g[g.R32I=33333]="R32I",g[g.R32UI=33334]="R32UI",g[g.R8=33321]="R8",g[g.R8_SNORM=36756]="R8_SNORM",g[g.R8I=33329]="R8I",g[g.R8UI=33330]="R8UI",g[g.RED=6403]="RED",g[g.RED_INTEGER=36244]="RED_INTEGER",g[g.RG=33319]="RG",g[g.RG_INTEGER=33320]="RG_INTEGER",g[g.RG16F=33327]="RG16F",g[g.RG16I=33337]="RG16I",g[g.RG16UI=33338]="RG16UI",g[g.RG32F=33328]="RG32F",g[g.RG32I=33339]="RG32I",g[g.RG32UI=33340]="RG32UI",g[g.RG8=33323]="RG8",g[g.RG8_SNORM=36757]="RG8_SNORM",g[g.RG8I=33335]="RG8I",g[g.RG8UI=33336]="RG8UI",g[g.RGB=6407]="RGB",g[g.RGB_INTEGER=36248]="RGB_INTEGER",g[g.RGB10_A2=32857]="RGB10_A2",g[g.RGB10_A2UI=36975]="RGB10_A2UI",g[g.RGB16F=34843]="RGB16F",g[g.RGB16I=36233]="RGB16I",g[g.RGB16UI=36215]="RGB16UI",g[g.RGB32F=34837]="RGB32F",g[g.RGB32I=36227]="RGB32I",g[g.RGB32UI=36209]="RGB32UI",g[g.RGB5_A1=32855]="RGB5_A1",g[g.RGB565=36194]="RGB565",g[g.RGB8=32849]="RGB8",g[g.RGB8_SNORM=36758]="RGB8_SNORM",g[g.RGB8I=36239]="RGB8I",g[g.RGB8UI=36221]="RGB8UI",g[g.RGB9_E5=35901]="RGB9_E5",g[g.RGBA=6408]="RGBA",g[g.RGBA_INTEGER=36249]="RGBA_INTEGER",g[g.RGBA16F=34842]="RGBA16F",g[g.RGBA16I=36232]="RGBA16I",g[g.RGBA16UI=36214]="RGBA16UI",g[g.RGBA32F=34836]="RGBA32F",g[g.RGBA32I=36226]="RGBA32I",g[g.RGBA32UI=36208]="RGBA32UI",g[g.RGBA4=32854]="RGBA4",g[g.RGBA8=32856]="RGBA8",g[g.RGBA8_SNORM=36759]="RGBA8_SNORM",g[g.RGBA8I=36238]="RGBA8I",g[g.RGBA8UI=36220]="RGBA8UI",g[g.SRGB8=35905]="SRGB8",g[g.SRGB8_ALPHA8=35907]="SRGB8_ALPHA8",(A=e.TextureType||(e.TextureType={}))[A.BYTE=5120]="BYTE",A[A.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",A[A.SHORT=5122]="SHORT",A[A.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",A[A.INT=5124]="INT",A[A.UNSIGNED_INT=5125]="UNSIGNED_INT",A[A.FLOAT=5126]="FLOAT",A[A.HALF_FLOAT=5131]="HALF_FLOAT",A[A.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",A[A.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",A[A.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",A[A.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",A[A.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",A[A.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",A[A.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",A[A.HALF_FLOAT_OES=36193]="HALF_FLOAT_OES",A[A.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",(m=e.TextureTarget||(e.TextureTarget={}))[m.TEXTURE_2D=3553]="TEXTURE_2D",m[m.TEXTURE_3D=32879]="TEXTURE_3D",m[m.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",m[m.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",(T=e.TextureFilter||(e.TextureFilter={}))[T.LINEAR=9729]="LINEAR",T[T.NEAREST=9728]="NEAREST",T[T.NEAREST_MIPMAP_NEAREST=9984]="NEAREST_MIPMAP_NEAREST",T[T.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",T[T.NEAREST_MIPMAP_LINEAR=9986]="NEAREST_MIPMAP_LINEAR",T[T.LINEAR_MIPMAP_LINEAR=9987]="LINEAR_MIPMAP_LINEAR",(v=e.TextureRepeat||(e.TextureRepeat={}))[v.REPEAT=10497]="REPEAT",v[v.CLAMP=33071]="CLAMP",v[v.REPEAT_MIRROR=33648]="REPEAT_MIRROR";const b=(e,t,r,i=!1,n=!1,s=i)=>({format:e,types:t,render:i,renderExt:s,filter:n,num:r}),p={6406:b(6406,[5121,1,5131,2,36193,2,5126,4],1,!0,!0),33189:b(6402,[5123,2,5125,4],1,!0),33190:b(6402,[5125,4],1,!0),36012:b(6402,[5126,4],1,!0),35056:b(34041,[34042,4],1,!0),36013:b(34041,[36269,4],1,!0),6410:b(6410,[5121,2,5131,4,36193,4,5126,8],2,!0,!0),6409:b(6409,[5121,1,5131,2,36193,2,5126,4],1,!0,!0),35898:b(6407,[5126,12,5131,6,35899,4],3,!1,!0,!0),33325:b(6403,[5126,4,5131,2],1,!1,!0,!0),33331:b(36244,[5122,2],1,!0),33332:b(36244,[5123,2],1,!0),33326:b(6403,[5126,4],1,!1,!1,!0),33333:b(36244,[5124,4],1,!0),33334:b(36244,[5125,4],1,!0),36756:b(6403,[5120,1],1,!1,!0),33321:b(6403,[5121,1],1,!0,!0),33329:b(36244,[5120,1],1,!0),33330:b(36244,[5121,1],1,!0),33327:b(33319,[5126,8,5131,4],2,!1,!0,!0),33337:b(33320,[5122,4],2,!0),33338:b(33320,[5123,4],2,!0),33328:b(33319,[5126,8],2,!1,!1,!0),33339:b(33320,[5124,8],2,!0),33340:b(33320,[5125,8],2,!0),36757:b(33319,[5120,2],2,!1,!0),33323:b(33319,[5121,2],2,!0,!0),33335:b(33320,[5120,2],2,!0),33336:b(33320,[5121,2],2,!0),6407:b(6407,[5121,3,5131,6,36193,6,5126,12,33635,2],3,!0,!0),32857:b(6408,[33640,4],4,!0,!0),36975:b(36249,[33640,4],4,!0),34843:b(6407,[5126,12,5131,6],3,!1,!0),36233:b(36248,[5122,6],3),36215:b(36248,[5123,6],3),34837:b(6407,[5126,12],3),36227:b(36248,[5124,12],3),36209:b(36248,[5125,12],3),32855:b(6408,[5121,4,32820,2,33640,4],4,!0,!0),36194:b(6407,[5121,3,33635,2],3,!0,!0),36758:b(6407,[5120,3],3,!1,!0),32849:b(6407,[5121,3],3,!0,!0),36239:b(36248,[5120,3],3),36221:b(36248,[5121,3],3),35901:b(6407,[5126,12,5131,6,35902,4],3,!1,!0),6408:b(6408,[5121,4,5131,8,36193,8,5126,16,32819,2,32820,2],4,!0,!0),34842:b(6408,[5126,16,5131,8],4,!1,!0,!0),36232:b(36249,[5122,8],4,!0),36214:b(36249,[5123,8],4,!0),34836:b(6408,[5126,16],4,!1,!1,!0),36226:b(36249,[5124,16],4,!0),36208:b(36249,[5125,16],4,!0),32854:b(6408,[5121,4,32819,2],4,!0,!0),36759:b(6408,[5120,4],4,!1,!0),32856:b(6408,[5121,4],4,!0,!0),36238:b(36249,[5120,4],4,!0),36220:b(36249,[5121,4],4,!0),35907:b(6408,[5121,4],4,!0,!0),35905:b(6407,[5121,3],3,!1,!0)},N=e=>"undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext,O=e=>5126===e.type||5131===e.type||36193===e.type||36269===e.type;class S extends Error{constructor(e){super(`WebGL error ${e?": "+e:""}`)}}const I=e=>{throw new S(e)};class G{constructor(e,t,r=e.ARRAY_BUFFER,i=e.STATIC_DRAW){this.gl=e,this.buffer=e.createBuffer()||I("error creating WebGL buffer"),this.target=r,this.mode=i,t&&this.set(t)}bind(){return this.gl.bindBuffer(this.target,this.buffer),!0}unbind(){return this.gl.bindBuffer(this.target,null),!0}release(){return this.buffer&&(this.gl.deleteBuffer(this.buffer),delete this.buffer),!0}set(e,t=this.mode){this.bind(),this.gl.bufferData(this.target,e,t)}setChunk(e,t=0){this.bind(),this.gl.bufferSubData(this.target,t,e)}}const F=(e,t,r=e.ARRAY_BUFFER,i=e.STATIC_DRAW)=>new G(e,t,r,i),L=(e,t,r=e.STATIC_DRAW)=>(t.attribPool?t.attribs=U(e,t.attribPool,void 0,e.ARRAY_BUFFER,r):P(e,t.attribs,r),t.instances&&P(e,t.instances.attribs,r),x(e,t.indices,r),null==t.mode&&(t.mode=e.TRIANGLES),t),P=(e,t,r)=>{if(t)for(let i in t)if(t.hasOwnProperty(i)){const n=t[i];n.buffer?n.data&&n.buffer.set(n.data):n.buffer=new G(e,n.data,e.ARRAY_BUFFER,r)}return t},x=(e,t,r=e.STATIC_DRAW)=>(t&&(t.buffer?t.data&&t.buffer.set(t.data):t.buffer=new G(e,t.data,e.ELEMENT_ARRAY_BUFFER,r)),t),U=(e,t,r,i=e.ARRAY_BUFFER,n=e.STATIC_DRAW)=>{const s=F(e,t.bytes(),i,n),a={};for(let e of r||Object.keys(t.specs)){const r=t.specs[e];a[e]={buffer:s,size:r.size,type:r.type,stride:t.byteStride,offset:r.byteOffset}}return a},B={alpha:!0,antialias:!0,depth:!0,premultipliedAlpha:!0,preserveDrawingBuffer:!1,stencil:!1},C=(e,t,r=!0)=>{const i={};if(t)for(let n of t)i[n]=e.getExtension(n),r&&!i[n]&&I(`extension ${n} not available`);return i},D=(e,t,r)=>{const i=window.devicePixelRatio||1;return 1!=i&&(e.style.width=`${t}px`,e.style.height=`${r}px`),e.width=t*i,e.height=r*i,i},M=e=>{if(e)for(let t,r=e.length;--r>=0;)(t=e[r])&&t.bind(r)};class y{constructor(e,t={}){this.gl=e,this.tex=e.createTexture()||I("error creating WebGL texture"),this.configure(t)}configure(e={}){const t=this.gl,i=N(t),n=e.target||this.target||3553,s=e.format||this.format||6408,a=p[s],o=a.format,l=e.type||this.type||a.types[0];let u,c,E;if(!this.target&&(this.target=n),this.format=s,this.type=l,t.bindTexture(this.target,this.tex),void 0!==e.flip&&t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flip?1:0),void 0!==e.premultiply&&t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.premultiply?1:0),void 0!==e.image){const r=e.level||0,i=e.pos||[0,0,0];32879===n?e.width&&e.height&&e.depth&&(e.sub?t.texSubImage3D(n,r,i[0],i[1],i[2],e.width,e.height,e.depth,o,l,e.image):(0===r&&(this.size=[e.width,e.height,e.depth]),t.texImage3D(n,r,s,e.width,e.height,e.depth,0,o,l,e.image))):e.width&&e.height?e.sub?t.texSubImage2D(n,r,i[0],i[1],e.width,e.height,o,l,e.image):(0===r&&(this.size=[e.width,e.height]),t.texImage2D(n,r,s,e.width,e.height,0,o,l,e.image)):e.sub?t.texSubImage2D(n,r,i[0],i[1],o,l,e.image):(null!=e.image&&0==r&&(this.size=[e.image.width,e.image.height]),t.texImage2D(n,r,s,o,l,e.image))}if(e.mipmap&&t.generateMipmap(n),e.filter){const i=e.filter;r.isArray(i)?(u=i[0],c=i[1]):u=c=i,u&&t.texParameteri(n,t.TEXTURE_MIN_FILTER,u),c&&t.texParameteri(n,t.TEXTURE_MAG_FILTER,c)}if(e.wrap){const s=e.wrap;r.isArray(s)?(u=s[0],c=s[1],E=s[2]):u=c=E=s,u&&t.texParameteri(n,t.TEXTURE_WRAP_S,u),c&&t.texParameteri(n,t.TEXTURE_WRAP_T,c),E&&i&&n===t.TEXTURE_3D&&t.texParameteri(n,t.TEXTURE_WRAP_R,E)}if(e.lod){const[r,i]=e.lod;r&&t.texParameteri(n,t.TEXTURE_MIN_LOD,r),i&&t.texParameteri(n,t.TEXTURE_MAX_LOD,i)}if(e.minMaxLevel){const[r,i]=e.minMaxLevel;t.texParameteri(n,t.TEXTURE_BASE_LEVEL,r),t.texParameteri(n,t.TEXTURE_MAX_LEVEL,i)}return!0}bind(e=0){const t=this.gl;return t.activeTexture(t.TEXTURE0+e),t.bindTexture(this.target,this.tex),!0}unbind(e=0){const t=this.gl;return t.activeTexture(t.TEXTURE0+e),t.bindTexture(this.target,null),!0}release(){return!!this.tex&&(this.gl.deleteTexture(this.tex),delete this.tex,delete this.gl,!0)}}const w=(e,t)=>new y(e,t),H=e=>{const t=r.isArray(e)?e:[e];for(let e=0,r=t.length;e<r;e++){const r=t[e],i=r.indices,n=r.shader.gl;r.textures&&M(r.textures),r.shader.prepareState(),r.shader.bind(r),i&&i.buffer?(i.buffer.bind(),r.instances?$(n,r):n.drawElements(r.mode,r.num,i.data instanceof Uint32Array?n.UNSIGNED_INT:n.UNSIGNED_SHORT,0)):r.instances?$(n,r):n.drawArrays(r.mode,0,r.num),r.shader.unbind(null)}},$=(e,t)=>{const r=N(e),i=r?void 0:e.getExtension("ANGLE_instanced_arrays");r||i||I("instancing not supported");const n=t.shader.attribs,s=t.instances.attribs;t.shader.bindAttribs(s);for(let t in s){const a=n[t];if(a){let n=s[t].divisor;n=void 0!==n?n:1,r?e.vertexAttribDivisor(a.loc,n):i.vertexAttribDivisorANGLE(a.loc,n)}}if(t.indices){const n=t.indices.data instanceof Uint32Array?e.UNSIGNED_INT:e.UNSIGNED_SHORT;r?e.drawElementsInstanced(t.mode,t.num,n,0,t.instances.num):i.drawElementsInstancedANGLE(t.mode,t.num,n,0,t.instances.num)}else r?e.drawArraysInstanced(t.mode,0,t.num,t.instances.num):i.drawArraysInstancedANGLE(t.mode,0,t.num,t.instances.num);for(let t in s){const s=n[t];s&&(r?e.vertexAttribDivisor(s.loc,0):i.vertexAttribDivisorANGLE(s.loc,0))}t.shader.unbind(null)};class j{constructor(e,t){this.gl=e,this.buffer=e.createRenderbuffer()||I("error creating RBO"),this.configure(t)}bind(){return this.gl.bindRenderbuffer(this.gl.RENDERBUFFER,this.buffer),!0}unbind(){return this.gl.bindRenderbuffer(this.gl.RENDERBUFFER,null),!0}release(){return this.gl.deleteRenderbuffer(this.buffer),delete this.buffer,!0}configure(e){const t=this.gl;return this.bind(),this.format=e.format||t.DEPTH_COMPONENT16,this.width=e.width,this.height=e.height,t.renderbufferStorage(t.RENDERBUFFER,e.format||t.DEPTH_COMPONENT16,e.width,e.height),this.unbind(),!0}}const X=36064,V=36063;class q{constructor(e,t){this.gl=e,this.fbo=e.createFramebuffer()||I("error creating FBO"),this.ext=!N(e)&&t&&t.tex&&t.tex.length>1?e.getExtension("WEBGL_draw_buffers")||I("missing WEBGL_draw_buffers ext"):void 0,this.maxAttachments=e.getParameter(V),t&&this.configure(t)}bind(){return this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,this.fbo),!0}unbind(){return this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null),!0}release(){return this.gl.deleteFramebuffer(this.fbo),delete this.fbo,delete this.ext,!0}configure(e){const r=this.gl;if(this.bind(),e.tex){t.assert(e.tex.length<this.maxAttachments,`too many attachments (max. ${this.maxAttachments})`);const i=[];for(let n=0;n<e.tex.length;n++){const s=e.tex[n];t.assert(!(!p[s.format].render&&!p[s.format].renderExt),`texture #${n} has non-renderable format`);const a=X+n;r.framebufferTexture2D(r.FRAMEBUFFER,a,r.TEXTURE_2D,s.tex,0),i[n]=a}this.ext?this.ext.drawBuffersWEBGL(i):N(r)&&r.drawBuffers(i)}return e.depth&&(e.depth instanceof j?r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,e.depth.buffer):r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,e.depth.tex,0)),this.validate()}validate(){const e=this.gl,t=e.checkFramebufferStatus(e.FRAMEBUFFER);switch(t){case e.FRAMEBUFFER_COMPLETE:return!0;case e.FRAMEBUFFER_UNSUPPORTED:I("FBO unsupported");case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:I("FBO incomplete attachment");case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:I("FBO incomplete dimensions");case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:I("FBO incomplete missing attachment");default:return I(`FBO error: ${t}`)}}}const z=(e,t)=>new q(e,t),W={ambientCol:[.1,.1,.1],diffuseCol:[.8,.8,.8],specularCol:[1,1,1]},Z={ambientCol:"vec3",diffuseCol:"vec3",specularCol:"vec3"},k=(e={},t={},r=W)=>Object.keys(r).reduce((i,n)=>(!1!==t[n]&&(i[n]=[Z[n],e[n]||r[n]]),i),{}),Y=(e,t,r)=>e[r]||t[r].defaultVal||n.IDENT44,K=(e="model")=>(t,r)=>n.normal44([],Y(r,t,e)),J=(e="model",t="view")=>(r,i)=>n.normal44(null,n.mulM44([],Y(i,r,t),Y(i,r,e)));const Q=(e=!0)=>({attribs:Object.assign({position:{data:new Float32Array([-1,-1,1,-1,-1,1,1,1]),size:2}},e?{uv:{data:new Float32Array([0,0,1,0,0,1,1,1]),size:2}}:null),uniforms:{},shader:null,mode:5,num:4}),ee={a:"",v:"",u:"",o:""},te={100:{number:100,attrib:(e,t,i)=>`attribute ${r.isArray(t)?t[0]:t} ${i.a}${e};`,varying:{vs:(e,t,r)=>re("varying",t,r.v+e),fs:(e,t,r)=>re("varying",t,r.v+e)},uniform:(e,t,r)=>re("uniform",t,r.u+e),output:(e,t,i)=>r.isArray(t)?`#define ${i.o}${e} gl_FragData[${t[1]}]`:""},"300 es":{number:300,attrib:(e,t,i)=>r.isArray(t)?`layout(location=${t[1]}) in ${t[0]} ${i.a}${e};`:`in ${t} ${i.a}${e};`,varying:{vs:(e,t,r)=>re("out",t,r.v+e),fs:(e,t,r)=>re("in",t,r.v+e)},uniform:(e,t,r)=>re("uniform",t,r.u+e),output:(e,t,i)=>r.isArray(t)?`layout(location=${t[1]}) out ${t[0]} ${i.o}${e};`:`out ${t} ${i.o}${e};`}},re=(e,t,i)=>{const n=r.isArray(t)?t[0]:t;return n.indexOf("[]")>0?`${e} ${n.replace("[]","")} ${i}[${t[1]}];`:`${e} ${n} ${i};`},ie=(e,t,r="")=>{let i=">=";return t||(t=r,r=null,i="<"),`#if __VERSION__ ${i} ${e}\n${t}${r?`\n#else\n${r}`:""}\n#endif`},ne=ie(300,"","#define texture texture2D"),se="#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp int;\nprecision highp float;\n#else\nprecision mediump int;\nprecision mediump float;\n#endif\n#ifndef PI\n#define PI 3.141592653589793\n#endif\n#ifndef TAU\n#define TAU 6.283185307179586\n#endif\n#ifndef HALF_PI\n#define HALF_PI 1.570796326794896\n#endif\n",ae=e=>(t,r,i=0)=>{let n;return s=>{(s=void 0===s?i:s)!==n&&(t["uniform1"+e](r,s),n=s)}},oe=(e,t)=>(r,i,n=t)=>{let s=[];return t=>{t=void 0===t?n:t,u.equivArrayLike(s,t)||(r["uniform"+e](i,t),s=[...t])}},le=(e,t)=>(r,i,n=t)=>{let s=[];return t=>{t=void 0===t?n:t,u.equivArrayLike(s,t)||(r["uniformMatrix"+e](i,!1,t),s=[...t])}},ue=[0],ce={bool:ae("i"),float:ae("f"),int:ae("i"),uint:ae("ui"),bvec2:oe("2iv",c.ZERO2),bvec3:oe("3iv",c.ZERO3),bvec4:oe("4iv",c.ZERO4),ivec2:oe("2iv",c.ZERO2),ivec3:oe("3iv",c.ZERO3),ivec4:oe("4iv",c.ZERO4),vec2:oe("2fv",c.ZERO2),vec3:oe("3fv",c.ZERO3),vec4:oe("4fv",c.ZERO4),mat2:le("2fv",n.IDENT22),mat3:le("3fv",n.IDENT33),mat4:le("4fv",n.IDENT44),sampler2D:ae("i"),sampler2DShadow:ae("i"),sampler3D:ae("i"),samplerCube:ae("i"),samplerCubeShadow:ae("i"),"bool[]":oe("1iv",ue),"float[]":oe("1fv",ue),"int[]":oe("1iv",ue),"uint[]":oe("1uiv",ue),"bvec2[]":oe("2iv",c.ZERO2),"bvec3[]":oe("3iv",c.ZERO3),"bvec4[]":oe("4iv",c.ZERO4),"ivec2[]":oe("2iv",c.ZERO2),"ivec3[]":oe("3iv",c.ZERO3),"ivec4[]":oe("4iv",c.ZERO4),"vec2[]":oe("2fv",c.ZERO2),"vec3[]":oe("3fv",c.ZERO3),"vec4[]":oe("4fv",c.ZERO4),"mat2[]":le("2fv",c.ZERO2),"mat3[]":le("3fv",c.ZERO3),"mat4[]":le("4fv",c.ZERO4),"sampler2D[]":oe("1iv",ue),"sampler2DShadow[]":oe("1iv",ue),"sampler3D[]":oe("1iv",ue),"samplerCube[]":oe("1iv",ue),"samplerCubeShadow[]":oe("1iv",ue)},Ee=/ERROR: \d+:(\d+): (.*)/;class Re{constructor(e,t,r,i,n){this.gl=e,this.program=t,this.attribs=r,this.uniforms=i,this.state=n||{}}bind(e){return!!this.program&&(this.gl.useProgram(this.program),this.bindAttribs(e.attribs),this.bindUniforms(e.uniforms),!0)}unbind(){return this.gl.useProgram(null),!0}release(){return!!this.program&&(this.gl.deleteProgram(this.program),delete this.program,!0)}bindAttribs(t){const r=this.gl;let i;for(let n in t)if(i=this.attribs[n]){const e=t[n];e.buffer.bind(),r.enableVertexAttribArray(i.loc),r.vertexAttribPointer(i.loc,e.size||3,e.type||r.FLOAT,e.normalized||!1,e.stride||0,e.offset||0)}else e.LOGGER.warn(`unknown attrib: ${n}`)}bindUniforms(t={}){const i=this.uniforms;for(let n in t){const s=i[n];if(s){let e=t[n];e=r.isFunction(e)?e(i,t):r.implementsFunction(e,"deref")?e.deref():e,s.setter(e)}else e.LOGGER.warn(`unknown uniform: ${n}`)}for(let e in i)if(i.hasOwnProperty(e)&&(!t||!r.existsAndNotNull(t[e]))){const r=i[e],n=r.defaultFn?r.defaultFn(i,t):r.defaultVal;r.setter(n)}}prepareState(e=this.state){const t=this.gl;void 0!==e.depth&&this.setState(t.DEPTH_TEST,e.depth),void 0!==e.cull&&(this.setState(t.CULL_FACE,e.cull),e.cullMode&&t.cullFace(e.cullMode)),void 0!==e.blend&&(this.setState(t.BLEND,e.blend),e.blendFn&&t.blendFunc(e.blendFn[0],e.blendFn[1]),void 0!==e.blendEq&&t.blendEquation(e.blendEq)),void 0!==e.stencil&&(this.setState(t.STENCIL_TEST,e.stencil),e.stencilFn&&t.stencilFunc(e.stencilFn[0],e.stencilFn[1],e.stencilFn[2]),e.stencilOp&&t.stencilOp(e.stencilOp[0],e.stencilOp[1],e.stencilOp[2]),void 0!==e.stencilMask&&t.stencilMask(e.stencilMask))}setState(e,t){t?this.gl.enable(e):this.gl.disable(e)}}const de=(e,t)=>{const i=N(e)?"300 es":"100",n=r.isFunction(t.vs)?ge(t,"vs",i):Ae(t,"vs",i),s=r.isFunction(t.fs)?ge(t,"fs",i):Ae(t,"fs",i);console.log(n),console.log(s),he(e,t.ext);const a=me(e,e.VERTEX_SHADER,n),o=me(e,e.FRAGMENT_SHADER,s),l=e.createProgram()||I("error creating shader program");if(e.attachShader(l,a),e.attachShader(l,o),e.linkProgram(l),e.getProgramParameter(l,e.LINK_STATUS)){const r=ve(e,l,t.attribs),i=be(e,l,t.uniforms);return e.deleteShader(a),e.deleteShader(o),new Re(e,l,r,i,t.state)}throw new Error(`Error linking shader: ${e.getProgramInfoLog(l)}`)},fe=(e,t,r)=>{let i=[];for(let n in e)e.hasOwnProperty(n)&&i.push(t(n,e[n],r));return i.push(""),i.join("\n")},_e=(e,t,i)=>{const n=_[e],s="300 es"===i;return n&&(!s&&n.gl||s&&n.gl2)?`#extension ${n&&n.alias||e} : ${r.isBoolean(t)?t?"enable":"disable":t}\n`:""},he=(e,t)=>{if(t)for(let r in t){const i=t[r];!0!==i&&"require"!==i||C(e,[r],"require"===i)}},ge=(e,t,i)=>{let n="";if(n+=e.pre?e.replacePrelude?e.pre:e.pre+"\n"+se:se,e.ext)for(let t in e.ext)n+=_e(t,e.ext[t],i);const u={},c={},E={},R={};if(e.uniforms)for(let t in e.uniforms){const i=e.uniforms[t];R[t]=r.isArray(i)?i[0].indexOf("[]")>0?o.uniform(i[0],t,{num:i[1]}):o.uniform(i[0],t):o.uniform(i,t)}if("vs"===t){for(let t in e.attribs){const i=e.attribs[t];u[t]=r.isArray(i)?o.input(i[0],t,{loc:i[1]}):o.input(i,t)}if(e.varying)for(let t in e.varying){const i=e.varying[t];c[t]=r.isArray(i)?o.output(i[0],t,{num:i[1]}):o.output(i,t)}}else{if(e.varying)for(let t in e.varying){const i=e.varying[t];u[t]=r.isArray(i)?o.input(i[0],t,{num:i[1]}):o.input(i,t)}const t=e.outputs||h;if(i>="300 es")for(let e in t){const i=t[e];c[e]=r.isArray(i)?o.output(i[0],e,{loc:i[1]}):o.output(i,e)}else for(let e in t){const s=t[e];r.isArray(s)&&"vec4"===s[0]?(n+=`#define ${e} gl_FragData[${s[1]}]\n`,E[e]=o.sym("vec4",e)):a.unsupported(`GLSL ${i} doesn't support output vars`)}}const d=l.targetGLSL({type:t,version:i,prelude:n});return d(o.program([...s.vals(R),...s.vals(u),...s.vals(c),...e[t](d,R,u,Object.assign(Object.assign({},c),E))]))+(e.post?"\n"+e.post:"")},Ae=(e,t,r)=>{const i=te[r],n=Object.assign(Object.assign({},ee),e.declPrefixes),s="vs"===t;let a="";if(a+=`#version ${r}\n`,a+=e.pre?e.replacePrelude?e.pre:e.pre+"\n"+se:se,e.ext)for(let t in e.ext)a+=_e(t,e.ext[t],r);return!1!==e.generateDecls&&(a+=s?fe(e.attribs,i.attrib,n):fe(e.outputs||h,i.output,n),a+=fe(e.varying,i.varying[t],n),a+=fe(e.uniforms,i.uniform,n)),a+=e[t],e.post&&(a+="\n"+e.post),a},me=(e,t,r)=>{const i=e.createShader(t)||I("error creating shader");return e.shaderSource(i,r),e.compileShader(i),e.getShaderParameter(i,e.COMPILE_STATUS)?i:Te(e,i,r)},Te=(e,t,i)=>{const n=i.split("\n"),s=e.getShaderInfoLog(t).split("\n").map(e=>{const t=Ee.exec(e),r=t?t[1]:null;if(r)return`line ${r}: ${t[2]}\n${n[parseInt(r)-1]}`}).filter(r.existsAndNotNull).join("\n");return I(`Error compiling shader:\n${s}`)},ve=(e,t,i)=>{const n={};for(let s in i){const a=i[s],[o,l]=r.isArray(a)?a:[a,null],u=s;null!=l?(e.bindAttribLocation(t,l,u),n[s]={type:o,loc:l}):n[s]={type:o,loc:e.getAttribLocation(t,u)}}return n},be=(t,i,n={})=>{const s={};for(let a in n){const o=n[a];let l,u,c,E,R;r.isArray(o)?([l,u,c]=o,E=l.indexOf("[]")<0?u:c,r.isFunction(E)&&(R=E,E=void 0)):l=o;const d=t.getUniformLocation(i,a);if(null!=d){const e=ce[l];e?s[a]={loc:d,setter:e(t,d,E),defaultFn:R,defaultVal:E,type:l}:I(`invalid uniform type: ${l}`)}else e.LOGGER.warn(`unknown uniform: ${a}`)}return s},pe=(e,t,r)=>[o.defMain(()=>[o.assign(e.gl_Position,o.vec4(r.position,o.FLOAT0,o.FLOAT1))])],Ne=(e,t,r,i)=>[o.defMain(()=>[o.assign(i.v_uv,r.uv),o.assign(e.gl_Position,o.vec4(r.position,o.FLOAT0,o.FLOAT1))])],Oe=(e,t,r,i)=>[o.defMain(()=>[o.assign(i.fragColor,o.$xy(e.gl_FragCoord))])],Se=(e,t,r,i)=>[o.defMain(()=>[o.assign(i.fragColor,o.texture(t.tex,r.v_uv))])],Ie={vs:pe,fs:Oe,attribs:{position:"vec2"},varying:{},uniforms:{},state:{depth:!1},ext:{}},Ge={vs:Ne,fs:Se,attribs:{position:"vec2",uv:"vec2"},varying:{v_uv:"vec2"},uniforms:{tex:"sampler2D"},state:{depth:!1},ext:{}},Fe=(e,t,r="position")=>e.instancePos?o.add(t[r],t[e.instancePos]):t[r],Le=(e,t,r)=>e.instanceColor?o.mul(t[e.instanceColor],r):e.color?o.mul(t[e.color],r):r;e.ALIAS_TEXTURE=ne,e.BLEND_ADD=[770,772],e.BLEND_NORMAL=[770,771],e.DEFAULT_MATERIAL=W,e.DEFAULT_OUTPUT=h,e.EXPORT_FRAGCOL=(e="col",t="o_fragColor")=>ie(300,`${t}=${e};`,`gl_FragColor=${e};`),e.FBO=q,e.FX_SHADER_SPEC=Ie,e.FX_SHADER_SPEC_UV=Ge,e.GLSL_HEADER=se,e.GL_EXT_INFO=_,e.LAMBERT=(e={})=>({vs:(t,r,i,n)=>[o.defMain(()=>[e.uv?o.assign(n.vuv,i[e.uv]):null,o.assign(n.vcolor,Le(e,i,r.diffuseCol)),o.assign(n.vnormal,E.surfaceNormal(i.normal,r.normalMat)),o.assign(t.gl_Position,E.transformMVP(Fe(e,i),r.model,r.view,r.proj))])],fs:(t,r,i,n)=>[o.defMain(()=>[o.assign(n.fragColor,o.vec4(E.diffuseLighting((!1!==e.bidir?E.halfLambert:E.lambert)(o.normalize(i.vnormal),r.lightDir),e.uv?o.mul(o.$(o.texture(r.tex,i.vuv),"xyz"),i.vcolor):i.vcolor,r.lightCol,r.ambientCol),1))])],attribs:Object.assign(Object.assign(Object.assign(Object.assign({position:"vec3",normal:"vec3"},e.uv?{[e.uv]:"vec2"}:null),e.color&&!e.instanceColor?{[e.color]:"vec3"}:null),e.instancePos?{[e.instancePos]:"vec3"}:null),e.instanceColor?{[e.instanceColor]:"vec3"}:null),varying:Object.assign({vcolor:"vec3",vnormal:"vec3"},e.uv?{vuv:"vec2"}:null),uniforms:Object.assign(Object.assign({model:"mat4",view:"mat4",proj:"mat4",normalMat:["mat4",J()],lightDir:["vec3",[0,1,0]],lightCol:["vec3",[1,1,1]]},k(Object.assign({diffuseCol:[1,1,1]},e.material),{specularCol:!1})),e.uv?{tex:"sampler2D"}:null),state:Object.assign({depth:!0,cull:!0},e.state)}),e.NO_PREFIXES=ee,e.PASSTHROUGH_FS=Oe,e.PASSTHROUGH_FS_UV=Se,e.PASSTHROUGH_VS=pe,e.PASSTHROUGH_VS_UV=Ne,e.PHONG=(e={})=>({vs:(t,r,i,n)=>[o.defMain(()=>{let s;return[s=o.sym(o.mul(r.model,o.vec4(Fe(e,i),1))),o.assign(n.vnormal,E.surfaceNormal(i.normal,r.normalMat)),o.assign(n.vlight,o.sub(r.lightPos,o.$(s,"xyz"))),o.assign(n.veye,o.sub(r.eyePos,o.$(s,"xyz"))),o.assign(n.vcolor,Le(e,i,r.diffuseCol)),o.assign(t.gl_Position,o.mul(o.mul(r.proj,r.view),s))]})],fs:(e,t,r,i)=>[o.defMain(()=>{let e,n,s,a;return[e=o.sym(o.normalize(r.vnormal)),n=o.sym(o.normalize(r.vlight)),s=o.sym(o.max(o.dot(e,n),o.FLOAT0)),a=o.sym(o.ternary(o.gt(s,o.FLOAT0),o.pow(o.dot(e,o.normalize(o.add(n,o.normalize(r.veye)))),t.shininess),o.FLOAT0)),o.assign(i.fragColor,o.vec4(o.add(E.diffuseLighting(s,r.vcolor,t.lightCol,t.ambientCol),o.mul(t.specularCol,a)),1))]})],attribs:Object.assign(Object.assign(Object.assign({position:"vec3",normal:"vec3"},e.color&&!e.instanceColor?{[e.color]:"vec3"}:null),e.instancePos?{[e.instancePos]:"vec3"}:null),e.instanceColor?{[e.instanceColor]:"vec3"}:null),varying:{vnormal:"vec3",veye:"vec3",vlight:"vec3",vcolor:"vec3"},uniforms:Object.assign({model:"mat4",normalMat:["mat4",K()],view:"mat4",proj:"mat4",shininess:["float",32],eyePos:"vec3",lightPos:["vec3",[0,0,2]],lightCol:["vec3",[1,1,1]]},k(e.material)),state:Object.assign({depth:!0,cull:!0},e.state)}),e.PREFIXES={a:"a_",v:"v_",u:"u_",o:"o_"},e.RBO=j,e.SYNTAX=te,e.Shader=Re,e.TEX_FORMATS=p,e.Texture=y,e.VERSION_CHECK=ie,e.WebGLArrayBuffer=G,e.WebGLError=S,e.adaptDPI=D,e.autoNormalMatrix1=K,e.autoNormalMatrix2=J,e.bindTextures=M,e.buffer=F,e.checkerboard=e=>{const t=(e=Object.assign({size:16,col1:4294967295,col2:4278190080,cornerCols:[4294901760,4278255360,4278190335,4294967040]},e)).size,r=R.ARGB8888.toABGR(e.col1),i=R.ARGB8888.toABGR(e.col2),{canvas:n,ctx:s,img:a,pixels:o}=R.canvasPixels(t);for(let e=0,n=0;e<t;e++)for(let s=0;s<t;s++,n++)o[n]=1&e^1&s?r:i;if(e.corners){const r=e.cornerCols.map(R.ARGB8888.toABGR);o[0]=r[0],o[t-1]=r[1],o[o.length-t]=r[2],o[o.length-1]=r[3]}return s.putImageData(a,0,0),n},e.colorAttrib=Le,e.compileAttribPool=U,e.compileIndices=x,e.compileModel=L,e.compileShader=me,e.compileVAO=(e,t)=>{if(t.shader){const r=N(e),i=r?null:e.getExtension("OES_vertex_array_object");if(r||i){let n;return r?(n=e.createVertexArray(),e.bindVertexArray(n)):(n=i.createVertexArrayOES(),i.bindVertexArrayOES(n)),n&&I("error creating VAO"),t.shader.bindAttribs(t.attribs),t.indices&&t.indices.buffer.bind(),t.shader.unbind(null),r?e.bindVertexArray(null):i.bindVertexArrayOES(null),n}}},e.cube=e=>{const t=(e=Object.assign({size:1,normal:!0,uv:!0},e)).size,r={attribs:{position:{data:new Float32Array([t,t,-t,t,t,t,t,-t,t,t,-t,-t,-t,t,t,-t,t,-t,-t,-t,-t,-t,-t,t,-t,t,t,t,t,t,t,t,-t,-t,t,-t,-t,-t,-t,t,-t,-t,t,-t,t,-t,-t,t,t,t,t,-t,t,t,-t,-t,t,t,-t,t,-t,t,-t,t,t,-t,t,-t,-t,-t,-t,-t])}},indices:{data:new Uint16Array([0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23])},uniforms:{},shader:null,num:36};return e.normal&&(r.attribs.normal={data:new Float32Array([1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1])}),e.uv&&(r.attribs.uv={data:new Float32Array([1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1]),size:2}),r},e.cubeMap=(e,t,r={})=>{const n=new y(e,{target:e.TEXTURE_CUBE_MAP}),s=i.withoutKeysObj(r,["target","image","filter","mipmap"]);for(let r=0;r<6;r++)s.target=e.TEXTURE_CUBE_MAP_POSITIVE_X+r,s.image=t[r],n.configure(s);return n.configure({filter:r.filter,mipmap:r.mipmap}),n},e.defMaterial=k,e.draw=H,e.error=I,e.fbo=z,e.floatTexture=(e,t,r,i,n,s)=>new y(e,{filter:e.NEAREST,wrap:e.CLAMP_TO_EDGE,format:n||(N(e)?34836:6408),type:s||e.FLOAT,image:t,width:r,height:i}),e.getExtensions=C,e.glCanvas=(e={})=>{const t=e.canvas?r.isString(e.canvas)?document.getElementById(e.canvas):e.canvas:document.createElement("canvas");e.width&&(t.width=e.width),e.height&&(t.height=e.height),!1!==e.autoScale&&D(t,t.width,t.height),e.parent&&e.parent.appendChild(t);const i=t.getContext(2===e.version?"webgl2":"webgl",Object.assign(Object.assign({},B),e.opts));return i||I("WebGL unavailable"),e.onContextLost&&t.addEventListener("webglcontextlost",e.onContextLost),{canvas:t,gl:i,ext:C(i,e.ext)}},e.isFloatTexture=O,e.isGL2Context=N,e.multipass=e=>{const r=e.gl,i=N(r),n=e.passes.length;t.assert(n>0,"require at least one shader pass");const a=Object.keys(e.textures).reduce((t,i)=>(t[i]=w(r,Object.assign({width:e.width,height:e.height,filter:r.NEAREST,wrap:r.CLAMP_TO_EDGE,image:null},e.textures[i])),t),{}),o=L(r,Q(!1)),l=e.passes.map(e=>{const t=e.model?L(r,e.model):Object.assign({},o);return t.shader=(e=>{const t=e.inputs.length,n=e.outputs.length,o={},l={vs:e.vs||pe,fs:e.fs,attribs:e.attribs||{position:"vec2"},varying:e.varying,uniforms:Object.assign(Object.assign({},e.uniforms),t?{inputs:["sampler2D[]",t,[...s.range(t)]]}:null),outputs:n?s.transduce(s.map(e=>[`output${e}`,["vec4",e]]),s.assocObj(),s.range(n)):void 0,state:e.state,pre:e.pre,post:e.post,replacePrelude:e.replacePrelude,generateDecls:e.generateDecls,ext:o},u=s.some(e=>O(a[e]),e.inputs),c=s.some(e=>O(a[e]),e.outputs);return i||(u&&(o.OES_texture_float="require"),n>1&&(o.WEBGL_draw_buffers="require")),c&&(o[i?"EXT_color_buffer_float":"WEBGL_color_buffer_float"]="require"),de(r,l)})(e),t.uniforms=Object.assign({},e.uniformVals),e.inputs.length>0&&(t.textures=e.inputs.map(e=>a[e])),t}),u=!e.passes[n-1].outputs.length,c=(u?e.passes.slice(0,n-1):e.passes).map(e=>z(r,{tex:e.outputs.map(e=>a[e])})),E=(t,i)=>{const n=e.passes[t],s=l[t],o=s.shader,u=n.outputs.length?a[n.outputs[0]].size:[r.drawingBufferWidth,r.drawingBufferHeight];o.uniforms.resolution&&(s.uniforms.resolution=u),o.uniforms.time&&(s.uniforms.time=i),r.viewport(0,0,u[0],u[1]),H(s)},R=e=>{for(let t=0;t<c.length;t++)c[t].bind(),E(t,e),c[t].unbind();u&&E(n-1,e)},d=()=>{R(.001*(Date.now()-h)),f&&(_=requestAnimationFrame(d))};let f,_,h=Date.now();return{start(){h=Date.now(),f=!0,_=requestAnimationFrame(d)},stop(){f&&(f=!1,cancelAnimationFrame(_))},update(e){R(e)},passes:e.passes,fbos:c,models:l,textures:a}},e.positionAttrib=Fe,e.prepareShaderSource=Ae,e.quad=Q,e.rbo=(e,t)=>new j(e,t),e.readPixels=(e,t,r,i,n,s,a,o)=>(e.readPixels(t,r,i,n,s,a,o),o),e.readTexture=(e,t,r,i,n)=>{const s=new q(e,{tex:[t]});return e.readPixels(0,0,t.size[0],t.size[1],r,i,n),s.unbind(),s.release(),n},e.screen2d=function(e,t){return r.isNumber(e)?n.ortho([],0,e,t,0,-1,1):n.ortho([],0,e.drawingBufferWidth,e.drawingBufferHeight,0,-1,1)},e.setLogger=t=>e.LOGGER=t,e.shader=de,e.shaderSourceFromAST=ge,e.stripes=e=>{const t=(e=Object.assign({size:16,col1:4294967295,col2:4278190080},e)).size,r=R.ARGB8888.toABGR(e.col1),i=R.ARGB8888.toABGR(e.col2),{canvas:n,ctx:s,img:a,pixels:o}=e.horizontal?R.canvasPixels(1,t):R.canvasPixels(t,1);for(let e=t;--e>=0;)o[e]=1&e?r:i;return s.putImageData(a,0,0),n},e.texture=w,Object.defineProperty(e,"__esModule",{value:!0})}));
import { Material } from "./api/material";
import { ShaderUniformSpecs } from "./api/shader";
export declare const DEFAULT_MATERIAL: Material;
export declare const defMaterial: (mat?: Partial<Material>, flags?: Partial<Record<"ambientCol" | "diffuseCol" | "specularCol", boolean>>, base?: Material) => import("@thi.ng/api").IObjectOf<import("./api/shader").UniformDecl>;
export declare const defMaterial: (mat?: Partial<Material>, flags?: Partial<Record<"ambientCol" | "diffuseCol" | "specularCol", boolean>>, base?: Material) => ShaderUniformSpecs;
import { IObjectOf } from "@thi.ng/api";
import { GLMat4 } from "./api/glsl";
import { ShaderUniforms } from "./api/shader";
/**

@@ -9,3 +10,3 @@ * Computes the inverse transpose of given 4x4 matrix uniform, i.e.

*/
export declare const autoNormalMatrix1: (model?: string) => (shaderU: IObjectOf<import("./api/shader").ShaderUniform>, specU: IObjectOf<number | import("@thi.ng/api").ArrayLikeIterable<number>>) => GLMat4;
export declare const autoNormalMatrix1: (model?: string) => (shaderU: ShaderUniforms, specU: IObjectOf<number | import("@thi.ng/api").ArrayLikeIterable<number>>) => GLMat4;
/**

@@ -18,3 +19,3 @@ * Computes the inverse transpose of the matrix product of given 4x4

*/
export declare const autoNormalMatrix2: (model?: string, view?: string) => (shaderU: IObjectOf<import("./api/shader").ShaderUniform>, specU: IObjectOf<number | import("@thi.ng/api").ArrayLikeIterable<number>>) => GLMat4;
export declare const autoNormalMatrix2: (model?: string, view?: string) => (shaderU: ShaderUniforms, specU: IObjectOf<number | import("@thi.ng/api").ArrayLikeIterable<number>>) => GLMat4;
/**

@@ -21,0 +22,0 @@ * Constructs a orthographic projection matrix for using 2D screen

{
"name": "@thi.ng/webgl",
"version": "0.2.1",
"description": "WebGL abstraction layer",
"version": "0.2.2",
"description": "WebGL & GLSL abstraction layer",
"module": "./index.js",

@@ -21,31 +21,34 @@ "main": "./lib/index.js",

"build:test": "rimraf build && tsc -p test/tsconfig.json",
"test": "yarn build:test && mocha build/test/*.js",
"cover": "yarn build:test && nyc mocha build/test/*.js && nyc report --reporter=lcov",
"test": "mocha test",
"cover": "nyc mocha test && nyc report --reporter=lcov",
"clean": "rimraf *.js *.d.ts .nyc_output build coverage doc lib api geo shaders textures",
"doc": "node_modules/.bin/typedoc --mode modules --out doc --ignoreCompilerErrors src",
"doc:readme": "../../scripts/generate-readme",
"doc": "node_modules/.bin/typedoc --mode modules --out doc src",
"pub": "yarn build:release && yarn publish --access public"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^0.1.3",
"@types/mocha": "^5.2.6",
"@types/node": "^12.6.3",
"mocha": "^6.1.4",
"@types/node": "^12.12.11",
"mocha": "^6.2.2",
"nyc": "^14.0.0",
"typedoc": "^0.15.0",
"typescript": "^3.6.4"
"ts-node": "^8.5.2",
"typedoc": "^0.15.2",
"typescript": "^3.7.2"
},
"dependencies": {
"@thi.ng/api": "^6.5.0",
"@thi.ng/associative": "^3.1.0",
"@thi.ng/binary": "^1.1.1",
"@thi.ng/checks": "^2.4.1",
"@thi.ng/equiv": "^1.0.10",
"@thi.ng/errors": "^1.2.1",
"@thi.ng/matrices": "^0.5.9",
"@thi.ng/pixel": "^0.1.5",
"@thi.ng/shader-ast": "^0.3.2",
"@thi.ng/shader-ast-glsl": "^0.1.8",
"@thi.ng/shader-ast-stdlib": "^0.3.1",
"@thi.ng/transducers": "^6.0.0",
"@thi.ng/vector-pools": "^1.0.9",
"@thi.ng/vectors": "^4.0.0"
"@thi.ng/api": "^6.6.0",
"@thi.ng/associative": "^3.1.1",
"@thi.ng/binary": "^1.2.0",
"@thi.ng/checks": "^2.4.2",
"@thi.ng/equiv": "^1.0.11",
"@thi.ng/errors": "^1.2.2",
"@thi.ng/matrices": "^0.5.10",
"@thi.ng/pixel": "^0.1.6",
"@thi.ng/shader-ast": "^0.3.3",
"@thi.ng/shader-ast-glsl": "^0.1.9",
"@thi.ng/shader-ast-stdlib": "^0.3.2",
"@thi.ng/transducers": "^6.1.0",
"@thi.ng/vector-pools": "^1.0.10",
"@thi.ng/vectors": "^4.0.1"
},

@@ -68,3 +71,17 @@ "keywords": [

"sideEffects": false,
"gitHead": "97add769f24aa32a1a5e13c5c941605e1b9eb569"
"thi.ng": {
"related": [
"ecs",
"geom",
"imgui",
"matrices",
"shader-ast",
"soa",
"vectors",
"vector-pools"
],
"status": "beta",
"year": 2014
},
"gitHead": "36c4d9e967bd80ccdbfa0f4a42f594080f95f105"
}

@@ -0,4 +1,6 @@

<!-- This file is generated - DO NOT EDIT! -->
# @thi.ng/webgl
[![npm (scoped)](https://img.shields.io/npm/v/@thi.ng/webgl.svg)](https://www.npmjs.com/package/@thi.ng/webgl)
[![npm version](https://img.shields.io/npm/v/@thi.ng/webgl.svg)](https://www.npmjs.com/package/@thi.ng/webgl)
![npm downloads](https://img.shields.io/npm/dm/@thi.ng/webgl.svg)

@@ -10,19 +12,20 @@ [![Twitter Follow](https://img.shields.io/twitter/follow/thing_umbrella.svg?style=flat-square&label=twitter)](https://twitter.com/thing_umbrella)

<!-- TOC depthFrom:2 depthTo:3 -->
- [About](#about)
- [Features](#features)
- [Features](#features)
- [Status](#status)
- [Support packages](#support-packages)
- [Related packages](#related-packages)
- [Installation](#installation)
- [Dependencies](#dependencies)
- [Support packages](#support-packages)
- [Usage examples](#usage-examples)
- [API](#api)
- [Authors](#authors)
- [License](#license)
<!-- /TOC -->
## About
Declarative WebGL 1.0 / 2.0 abstraction layer, partially ported &
updated from Clojure/ClojureScript versions of
WebGL & GLSL abstraction layer.
Largely declarative WebGL 1.0 / 2.0 abstraction layer, partially ported
& updated from Clojure/ClojureScript versions of
[thi.ng/geom](http://thi.ng/geom).

@@ -54,4 +57,22 @@

Status: Alpha / WIP
### Status
**BETA** - possibly breaking changes forthcoming
### Support packages
- [@thi.ng/webgl-msdf](https://github.com/thi-ng/umbrella/tree/master/packages/webgl-msdf) - Multi-channel SDF font rendering & basic text layout for WebGL
- [@thi.ng/webgl-shadertoy](https://github.com/thi-ng/umbrella/tree/master/packages/webgl-shadertoy) - Basic WebGL scaffolding for running interactive fragment shaders via [@thi.ng/shader-ast](https://github.com/thi-ng/umbrella/tree/master/packages/shader-ast)
### Related packages
- [@thi.ng/ecs](https://github.com/thi-ng/umbrella/tree/master/packages/ecs) - Entity Component System based around typed arrays & sparse sets
- [@thi.ng/geom](https://github.com/thi-ng/umbrella/tree/master/packages/geom) - Functional, polymorphic API for 2D geometry types & SVG generation
- [@thi.ng/imgui](https://github.com/thi-ng/umbrella/tree/master/packages/imgui) - Immediate mode GUI with flexible state handling & data only shape output
- [@thi.ng/matrices](https://github.com/thi-ng/umbrella/tree/master/packages/matrices) - Matrix & quaternion operations for 2D/3D geometry processing
- [@thi.ng/shader-ast](https://github.com/thi-ng/umbrella/tree/master/packages/shader-ast) - DSL to define shader code in TypeScript and cross-compile to GLSL, JS and other targets
- [@thi.ng/soa](https://github.com/thi-ng/umbrella/tree/master/packages/soa) - SOA & AOS memory mapped structured views with optional & extensible serialization
- [@thi.ng/vectors](https://github.com/thi-ng/umbrella/tree/master/packages/vectors) - Optimized 2d/3d/4d and arbitrary length vector operations
- [@thi.ng/vector-pools](https://github.com/thi-ng/umbrella/tree/master/packages/vector-pools) - Data structures for managing & working with strided, memory mapped vectors
## Installation

@@ -69,4 +90,6 @@

- [@thi.ng/checks](https://github.com/thi-ng/umbrella/tree/master/packages/checks)
- [@thi.ng/equiv](https://github.com/thi-ng/umbrella/tree/master/packages/equiv)
- [@thi.ng/errors](https://github.com/thi-ng/umbrella/tree/master/packages/errors)
- [@thi.ng/matrices](https://github.com/thi-ng/umbrella/tree/master/packages/matrices)
- [@thi.ng/pixel](https://github.com/thi-ng/umbrella/tree/master/packages/pixel)
- [@thi.ng/shader-ast](https://github.com/thi-ng/umbrella/tree/master/packages/shader-ast)

@@ -79,27 +102,83 @@ - [@thi.ng/shader-ast-glsl](https://github.com/thi-ng/umbrella/tree/master/packages/shader-ast-glsl)

## Support packages
## Usage examples
- [@thi.ng/shader-ast-stdlib](https://github.com/thi-ng/umbrella/tree/master/packages/shader-ast-stdlib) (also see readme for reference)
- [@thi.ng/webgl-msdf](https://github.com/thi-ng/umbrella/tree/master/packages/webgl-msdf)
- [@thi.ng/webgl-shadertoy](https://github.com/thi-ng/umbrella/tree/master/packages/webgl-shadertoy)
Several demos in this repo's
[/examples](https://github.com/thi-ng/umbrella/tree/master/examples)
directory are using this package.
## Usage examples
A selection:
Several examples are included in the [/examples](https://github.com/thi-ng/umbrella/tree/master/examples)
folder of this repo...
### shader-ast-evo <!-- NOTOC -->
- [2D SDF](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-sdf2d)
- [Raymarching](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-raymarch)
- [Simplex noise](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-noise)
- [Textured tunnel](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-tunnel)
- [Cubemap](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-cubemap)
- [Grid instancing](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-grid)
- [Multipass / GPGPU](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-multipass)
- [MSDF font rendering](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-msdf)
- [Minimal shadertoy](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-shadertoy)
- [SSAO deferred rendering](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-ssao)
![screenshot](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/examples/shader-ast-evo.jpg)
[Live demo](https://demo.thi.ng/umbrella/shader-ast-evo/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-evo)
### shader-ast-noise <!-- NOTOC -->
[Live demo](https://demo.thi.ng/umbrella/shader-ast-noise/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-noise)
### shader-ast-raymarch <!-- NOTOC -->
![screenshot](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/shader-ast/shader-ast-raymarch.jpg)
[Live demo](https://demo.thi.ng/umbrella/shader-ast-raymarch/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-raymarch)
### shader-ast-sdf2 <!-- NOTOC -->
[Live demo](https://demo.thi.ng/umbrella/shader-ast-sdf2/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-sdf2)
### shader-ast-tunnel <!-- NOTOC -->
[Live demo](https://demo.thi.ng/umbrella/shader-ast-tunnel/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/shader-ast-tunnel)
### soa-ecs <!-- NOTOC -->
![screenshot](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/examples/soa-ecs-100k.png)
[Live demo](https://demo.thi.ng/umbrella/soa-ecs/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/soa-ecs)
### webgl-cube <!-- NOTOC -->
[Live demo](https://demo.thi.ng/umbrella/webgl-cube/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-cube)
### webgl-cubemap <!-- NOTOC -->
[Live demo](https://demo.thi.ng/umbrella/webgl-cubemap/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-cubemap)
### webgl-grid <!-- NOTOC -->
![screenshot](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/examples/webgl-grid.jpg)
[Live demo](https://demo.thi.ng/umbrella/webgl-grid/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-grid)
### webgl-msdf <!-- NOTOC -->
![screenshot](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/examples/webgl-msdf.jpg)
[Live demo](https://demo.thi.ng/umbrella/webgl-msdf/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-msdf)
### webgl-multipass <!-- NOTOC -->
[Live demo](https://demo.thi.ng/umbrella/webgl-multipass/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-multipass)
### webgl-shadertoy <!-- NOTOC -->
[Live demo](https://demo.thi.ng/umbrella/webgl-shadertoy/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-shadertoy)
### webgl-ssao <!-- NOTOC -->
![screenshot](https://raw.githubusercontent.com/thi-ng/umbrella/master/assets/examples/webgl-ssao.jpg)
[Live demo](https://demo.thi.ng/umbrella/webgl-ssao/) | [Source](https://github.com/thi-ng/umbrella/tree/master/examples/webgl-ssao)
## API
[Generated API docs](https://docs.thi.ng/umbrella/webgl/)
TODO
## Authors
- Karsten Schmidt
Karsten Schmidt

@@ -106,0 +185,0 @@ ## License

@@ -55,3 +55,3 @@ import { existsAndNotNull, implementsFunction, isArray, isBoolean, isFunction } from "@thi.ng/checks";

else {
console.warn(`unknown attrib: ${id}`);
LOGGER.warn(`unknown attrib: ${id}`);
}

@@ -75,3 +75,3 @@ }

else {
console.warn(`unknown uniform: ${id}`);
LOGGER.warn(`unknown uniform: ${id}`);
}

@@ -78,0 +78,0 @@ }

@@ -28,3 +28,3 @@ import { $, assign, defMain, mul, normalize, texture, vec4 } from "@thi.ng/shader-ast";

uniforms: Object.assign(Object.assign({ model: "mat4", view: "mat4", proj: "mat4", normalMat: ["mat4", autoNormalMatrix2()], lightDir: ["vec3", [0, 1, 0]], lightCol: ["vec3", [1, 1, 1]] }, defMaterial(Object.assign({ diffuseCol: [1, 1, 1] }, opts.material), { specularCol: false })), (opts.uv ? { tex: "sampler2D" } : null)),
state: Object.assign({ depth: true }, opts.state)
state: Object.assign({ depth: true, cull: true }, opts.state)
});
import { Material } from "../api/material";
import { ShaderOpts, ShaderSpec } from "../api/shader";
export declare type PhongOpts = ShaderOpts<Pick<Material, "ambientCol" | "diffuseCol" | "specularCol">>;
export declare const PHONG: (opts?: Partial<ShaderOpts<Pick<Material, "ambientCol" | "diffuseCol" | "specularCol">>>) => ShaderSpec;
export declare const PHONG: (opts?: Partial<PhongOpts>) => ShaderSpec;

@@ -31,3 +31,3 @@ import { $, add, assign, defMain, dot, FLOAT0, gt, max, mul, normalize, pow, sub, sym, ternary, vec4 } from "@thi.ng/shader-ast";

(specular = sym(ternary(gt(directional, FLOAT0), pow(dot(normal, normalize(add(light, normalize(ins.veye)))), unis.shininess), FLOAT0))),
assign(outs.fragColor, add(diffuseLighting(directional, ins.vcolor, unis.lightCol, unis.ambientCol), mul(unis.specularCol, specular)))
assign(outs.fragColor, vec4(add(diffuseLighting(directional, ins.vcolor, unis.lightCol, unis.ambientCol), mul(unis.specularCol, specular)), 1))
];

@@ -46,3 +46,3 @@ })

uniforms: Object.assign({ model: "mat4", normalMat: ["mat4", autoNormalMatrix1()], view: "mat4", proj: "mat4", shininess: ["float", 32], eyePos: "vec3", lightPos: ["vec3", [0, 0, 2]], lightCol: ["vec3", [1, 1, 1]] }, defMaterial(opts.material)),
state: Object.assign({ depth: true }, opts.state)
state: Object.assign({ depth: true, cull: true }, opts.state)
});

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc