@luma.gl/webgl 8.5.11 → 8.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.js +80 -11
- package/dist/dist.min.js +1 -1
- package/dist/es5/classes/buffer.js +9 -2
- package/dist/es5/classes/buffer.js.map +1 -1
- package/dist/es5/classes/framebuffer.js +5 -0
- package/dist/es5/classes/framebuffer.js.map +1 -1
- package/dist/es5/classes/program.js +9 -2
- package/dist/es5/classes/program.js.map +1 -1
- package/dist/es5/classes/query.js +6 -1
- package/dist/es5/classes/query.js.map +1 -1
- package/dist/es5/classes/renderbuffer.js +6 -1
- package/dist/es5/classes/renderbuffer.js.map +1 -1
- package/dist/es5/classes/resource.js +13 -6
- package/dist/es5/classes/resource.js.map +1 -1
- package/dist/es5/classes/shader.js +20 -1
- package/dist/es5/classes/shader.js.map +1 -1
- package/dist/es5/classes/texture-2d.js +6 -1
- package/dist/es5/classes/texture-2d.js.map +1 -1
- package/dist/es5/classes/texture-3d.js +6 -1
- package/dist/es5/classes/texture-3d.js.map +1 -1
- package/dist/es5/classes/texture-cube.js +9 -2
- package/dist/es5/classes/texture-cube.js.map +1 -1
- package/dist/es5/classes/texture.js +11 -2
- package/dist/es5/classes/texture.js.map +1 -1
- package/dist/es5/classes/transform-feedback.js +6 -1
- package/dist/es5/classes/transform-feedback.js.map +1 -1
- package/dist/es5/classes/vertex-array-object.js +6 -1
- package/dist/es5/classes/vertex-array-object.js.map +1 -1
- package/dist/es5/init.js +1 -1
- package/dist/esm/classes/buffer.js +4 -0
- package/dist/esm/classes/buffer.js.map +1 -1
- package/dist/esm/classes/framebuffer.js +4 -0
- package/dist/esm/classes/framebuffer.js.map +1 -1
- package/dist/esm/classes/program.js +4 -0
- package/dist/esm/classes/program.js.map +1 -1
- package/dist/esm/classes/query.js +4 -0
- package/dist/esm/classes/query.js.map +1 -1
- package/dist/esm/classes/renderbuffer.js +4 -0
- package/dist/esm/classes/renderbuffer.js.map +1 -1
- package/dist/esm/classes/resource.js +10 -6
- package/dist/esm/classes/resource.js.map +1 -1
- package/dist/esm/classes/shader.js +12 -0
- package/dist/esm/classes/shader.js.map +1 -1
- package/dist/esm/classes/texture-2d.js +4 -0
- package/dist/esm/classes/texture-2d.js.map +1 -1
- package/dist/esm/classes/texture-3d.js +4 -0
- package/dist/esm/classes/texture-3d.js.map +1 -1
- package/dist/esm/classes/texture-cube.js +4 -0
- package/dist/esm/classes/texture-cube.js.map +1 -1
- package/dist/esm/classes/texture.js +9 -1
- package/dist/esm/classes/texture.js.map +1 -1
- package/dist/esm/classes/transform-feedback.js +4 -0
- package/dist/esm/classes/transform-feedback.js.map +1 -1
- package/dist/esm/classes/vertex-array-object.js +4 -0
- package/dist/esm/classes/vertex-array-object.js.map +1 -1
- package/dist/esm/init.js +1 -1
- package/package.json +4 -4
- package/src/classes/buffer.js +4 -0
- package/src/classes/framebuffer.js +4 -0
- package/src/classes/program.js +4 -0
- package/src/classes/query.js +4 -0
- package/src/classes/renderbuffer.js +4 -0
- package/src/classes/resource.js +10 -6
- package/src/classes/shader.js +14 -0
- package/src/classes/texture-2d.js +5 -0
- package/src/classes/texture-3d.js +5 -0
- package/src/classes/texture-cube.js +5 -0
- package/src/classes/texture.js +10 -2
- package/src/classes/transform-feedback.js +4 -0
- package/src/classes/vertex-array-object.js +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/texture.js"],"names":["NPOT_MIN_FILTERS","WebGLBuffer","globalThis","Texture","gl","opts","format","linearFiltering","supported","props","id","handle","target","textureUnit","undefined","loaded","width","height","depth","type","dataFormat","border","mipmaps","data","Promise","then","resolvedImageData","initialize","Object","assign","pixels","isVideo","HTMLVideoElement","readyState","HAVE_METADATA","_video","addEventListener","recreate","parameters","pixelStore","compressed","_deduceParameters","Number","isFinite","activeTexture","bindTexture","_isNPOT","log","warn","_updateForNPOT","setImageData","generateMipmap","setParameters","video","lastTime","HAVE_CURRENT_DATA","currentTime","setSubImageData","params","options","_trackDeallocatedMemory","level","offset","dataType","_getDataType","gl2","texImage2D","bindBuffer","entries","levelIndex","levelData","compressedTexImage2D","byteLength","_trackAllocatedMemory","channels","DATA_FORMAT_CHANNELS","channelSize","TYPE_SIZES","x","y","ndarray","shape","Buffer","compressedTexSubImage2D","texSubImage2D","ArrayBuffer","isView","error","getParameter","textureFormat","TEXTURE_FORMATS","types","_deduceImageSize","size","ImageData","HTMLImageElement","naturalWidth","naturalHeight","HTMLCanvasElement","ImageBitmap","videoWidth","videoHeight","createTexture","deleteTexture","pname","value","getTexParameter","param","_getNPOTParam","texParameterf","texParameteri","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","indexOf","Resource"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AACA;;AACA;;AAOA;;AACA;;;;;;;;;;;;AAGA,IAAMA,gBAAgB,GAAG,YAAzB;;AAIA,IAAMC,WAAW,GAAGC,UAAU,CAACD,WAAX,IAA0B,SAASA,WAAT,GAAuB,CAAE,CAAvE;;IAEqBE,O;;;;;;;gCACAC,E,EAAe;AAAA,UAAXC,IAAW,uEAAJ,EAAI;AAAA,UACzBC,MADyB,GACED,IADF,CACzBC,MADyB;AAAA,UACjBC,eADiB,GACEF,IADF,CACjBE,eADiB;AAEhC,UAAIC,SAAS,GAAG,IAAhB;;AACA,UAAIF,MAAJ,EAAY;AACVE,QAAAA,SAAS,GAAGA,SAAS,IAAI,uCAAkBJ,EAAlB,EAAsBE,MAAtB,CAAzB;AACAE,QAAAA,SAAS,GAAGA,SAAS,KAAK,CAACD,eAAD,IAAoB,gDAA2BH,EAA3B,EAA+BE,MAA/B,CAAzB,CAArB;AACD;;AACD,aAAOE,SAAP;AACD;;;AAYD,mBAAYJ,EAAZ,EAAgBK,KAAhB,EAAuB;AAAA;;AAAA;AAAA,oBAMjBA,KANiB,CAEnBC,EAFmB;AAAA,QAEnBA,EAFmB,0BAEd,gBAAI,SAAJ,CAFc;AAAA,QAGnBC,MAHmB,GAMjBF,KANiB,CAGnBE,MAHmB;AAAA,QAInBC,MAJmB,GAMjBH,KANiB,CAInBG,MAJmB;AAQrB,8BAAMR,EAAN,EAAU;AAACM,MAAAA,EAAE,EAAFA,EAAD;AAAKC,MAAAA,MAAM,EAANA;AAAL,KAAV;AAEA,UAAKC,MAAL,GAAcA,MAAd;AACA,UAAKC,WAAL,GAAmBC,SAAnB;AAKA,UAAKC,MAAL,GAAc,KAAd;AAEA,UAAKC,KAAL,GAAaF,SAAb;AACA,UAAKG,MAAL,GAAcH,SAAd;AACA,UAAKI,KAAL,GAAaJ,SAAb;AACA,UAAKR,MAAL,GAAcQ,SAAd;AACA,UAAKK,IAAL,GAAYL,SAAZ;AACA,UAAKM,UAAL,GAAkBN,SAAlB;AACA,UAAKO,MAAL,GAAcP,SAAd;AACA,UAAKD,WAAL,GAAmBC,SAAnB;AACA,UAAKQ,OAAL,GAAeR,SAAf;AA1BqB;AA2BtB;;;;+BAEU;AACT,+BAAkB,KAAKJ,EAAvB,cAA6B,KAAKM,KAAlC,cAA2C,KAAKC,MAAhD;AACD;;;iCAGsB;AAAA;;AAAA,UAAZR,KAAY,uEAAJ,EAAI;AACrB,UAAIc,IAAI,GAAGd,KAAK,CAACc,IAAjB;;AAEA,UAAIA,IAAI,YAAYC,OAApB,EAA6B;AAC3BD,QAAAA,IAAI,CAACE,IAAL,CAAU,UAAAC,iBAAiB;AAAA,iBACzB,MAAI,CAACC,UAAL,CACEC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBpB,KAAlB,EAAyB;AACvBqB,YAAAA,MAAM,EAAEJ,iBADe;AAEvBH,YAAAA,IAAI,EAAEG;AAFiB,WAAzB,CADF,CADyB;AAAA,SAA3B;AAQA,eAAO,IAAP;AACD;;AACD,UAAMK,OAAO,GAAG,OAAOC,gBAAP,KAA4B,WAA5B,IAA2CT,IAAI,YAAYS,gBAA3E;;AAEA,UAAID,OAAO,IAAIR,IAAI,CAACU,UAAL,GAAkBD,gBAAgB,CAACE,aAAlD,EAAiE;AAC/D,aAAKC,MAAL,GAAc,IAAd;AACAZ,QAAAA,IAAI,CAACa,gBAAL,CAAsB,YAAtB,EAAoC;AAAA,iBAAM,MAAI,CAACT,UAAL,CAAgBlB,KAAhB,CAAN;AAAA,SAApC;AACA,eAAO,IAAP;AACD;;AApBoB,0BA8BjBA,KA9BiB,CAuBnBqB,MAvBmB;AAAA,UAuBnBA,MAvBmB,8BAuBV,IAvBU;AAAA,0BA8BjBrB,KA9BiB,CAwBnBH,MAxBmB;AAAA,UAwBnBA,MAxBmB;AAAA,0BA8BjBG,KA9BiB,CAyBnBY,MAzBmB;AAAA,UAyBnBA,MAzBmB,8BAyBV,CAzBU;AAAA,4BA8BjBZ,KA9BiB,CA0BnB4B,QA1BmB;AAAA,UA0BnBA,QA1BmB,gCA0BR,KA1BQ;AAAA,8BA8BjB5B,KA9BiB,CA2BnB6B,UA3BmB;AAAA,UA2BnBA,UA3BmB,kCA2BN,EA3BM;AAAA,8BA8BjB7B,KA9BiB,CA4BnB8B,UA5BmB;AAAA,UA4BnBA,UA5BmB,kCA4BN,EA5BM;AAAA,+BA8BjB9B,KA9BiB,CA6BnBI,WA7BmB;AAAA,UA6BnBA,WA7BmB,mCA6BLC,SA7BK;;AAiCrB,UAAI,CAACS,IAAL,EAAW;AAITA,QAAAA,IAAI,GAAGO,MAAP;AACD;;AAtCoB,UAwChBd,KAxCgB,GAwCuDP,KAxCvD,CAwChBO,KAxCgB;AAAA,UAwCTC,MAxCS,GAwCuDR,KAxCvD,CAwCTQ,MAxCS;AAAA,UAwCDG,UAxCC,GAwCuDX,KAxCvD,CAwCDW,UAxCC;AAAA,UAwCWD,IAxCX,GAwCuDV,KAxCvD,CAwCWU,IAxCX;AAAA,8BAwCuDV,KAxCvD,CAwCiB+B,UAxCjB;AAAA,UAwCiBA,UAxCjB,kCAwC8B,KAxC9B;AAAA,2BAwCuD/B,KAxCvD,CAwCqCa,OAxCrC;AAAA,UAwCqCA,OAxCrC,+BAwC+C,IAxC/C;AAAA,yBAyCDb,KAzCC,CAyCdS,KAzCc;AAAA,UAyCdA,KAzCc,6BAyCN,CAzCM;;AAAA,kCA4C4B,KAAKuB,iBAAL,CAAuB;AACtEnC,QAAAA,MAAM,EAANA,MADsE;AAEtEa,QAAAA,IAAI,EAAJA,IAFsE;AAGtEC,QAAAA,UAAU,EAAVA,UAHsE;AAItEoB,QAAAA,UAAU,EAAVA,UAJsE;AAKtEjB,QAAAA,IAAI,EAAJA,IALsE;AAMtEP,QAAAA,KAAK,EAALA,KANsE;AAOtEC,QAAAA,MAAM,EAANA;AAPsE,OAAvB,CA5C5B;;AA4CnBD,MAAAA,KA5CmB,yBA4CnBA,KA5CmB;AA4CZC,MAAAA,MA5CY,yBA4CZA,MA5CY;AA4CJuB,MAAAA,UA5CI,yBA4CJA,UA5CI;AA4CQpB,MAAAA,UA5CR,yBA4CQA,UA5CR;AA4CoBD,MAAAA,IA5CpB,yBA4CoBA,IA5CpB;AAuDrB,WAAKH,KAAL,GAAaA,KAAb;AACA,WAAKC,MAAL,GAAcA,MAAd;AACA,WAAKC,KAAL,GAAaA,KAAb;AACA,WAAKZ,MAAL,GAAcA,MAAd;AACA,WAAKa,IAAL,GAAYA,IAAZ;AACA,WAAKC,UAAL,GAAkBA,UAAlB;AACA,WAAKC,MAAL,GAAcA,MAAd;AACA,WAAKR,WAAL,GAAmBA,WAAnB;;AAEA,UAAI6B,MAAM,CAACC,QAAP,CAAgB,KAAK9B,WAArB,CAAJ,EAAuC;AACrC,aAAKT,EAAL,CAAQwC,aAAR,CAAsB,QAAc,KAAK/B,WAAzC;AACA,aAAKT,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AACD;;AAED,UAAIW,OAAO,IAAI,KAAKwB,OAAL,EAAf,EAA+B;AAC7BC,qBAAIC,IAAJ,oBAAqB,IAArB;;AACA1B,QAAAA,OAAO,GAAG,KAAV;;AAEA,aAAK2B,cAAL,CAAoBX,UAApB;AACD;;AAED,WAAKhB,OAAL,GAAeA,OAAf;AAEA,WAAK4B,YAAL,CAAkB;AAChB3B,QAAAA,IAAI,EAAJA,IADgB;AAEhBP,QAAAA,KAAK,EAALA,KAFgB;AAGhBC,QAAAA,MAAM,EAANA,MAHgB;AAIhBC,QAAAA,KAAK,EAALA,KAJgB;AAKhBZ,QAAAA,MAAM,EAANA,MALgB;AAMhBa,QAAAA,IAAI,EAAJA,IANgB;AAOhBC,QAAAA,UAAU,EAAVA,UAPgB;AAQhBC,QAAAA,MAAM,EAANA,MARgB;AAShBC,QAAAA,OAAO,EAAPA,OATgB;AAUhBgB,QAAAA,UAAU,EAAEC,UAVI;AAWhBC,QAAAA,UAAU,EAAVA;AAXgB,OAAlB;;AAcA,UAAIlB,OAAJ,EAAa;AACX,aAAK6B,cAAL;AACD;;AAGD,WAAKC,aAAL,CAAmBd,UAAnB;;AAGA,UAAID,QAAJ,EAAc;AACZ,aAAKd,IAAL,GAAYA,IAAZ;AACD;;AACD,UAAIQ,OAAJ,EAAa;AACX,aAAKI,MAAL,GAAc;AACZkB,UAAAA,KAAK,EAAE9B,IADK;AAEZe,UAAAA,UAAU,EAAVA,UAFY;AAIZgB,UAAAA,QAAQ,EAAE/B,IAAI,CAACU,UAAL,IAAmBD,gBAAgB,CAACuB,iBAApC,GAAwDhC,IAAI,CAACiC,WAA7D,GAA2E,CAAC;AAJ1E,SAAd;AAMD;;AAED,aAAO,IAAP;AACD;;;6BAEQ;AACP,UAAI,KAAKrB,MAAT,EAAiB;AAAA,2BACuB,KAAKA,MAD5B;AAAA,YACRkB,KADQ,gBACRA,KADQ;AAAA,YACDf,UADC,gBACDA,UADC;AAAA,YACWgB,QADX,gBACWA,QADX;;AAGf,YAAIA,QAAQ,KAAKD,KAAK,CAACG,WAAnB,IAAkCH,KAAK,CAACpB,UAAN,GAAmBD,gBAAgB,CAACuB,iBAA1E,EAA6F;AAC3F;AACD;;AACD,aAAKE,eAAL,CAAqB;AACnBlC,UAAAA,IAAI,EAAE8B,KADa;AAEnBf,UAAAA,UAAU,EAAVA;AAFmB,SAArB;;AAIA,YAAI,KAAKhB,OAAT,EAAkB;AAChB,eAAK6B,cAAL;AACD;;AACD,aAAKhB,MAAL,CAAYmB,QAAZ,GAAuBD,KAAK,CAACG,WAA7B;AACD;AACF;;;iCAIwC;AAAA,UAAjCvC,MAAiC,QAAjCA,MAAiC;AAAA,UAAzBD,KAAyB,QAAzBA,KAAyB;AAAA,8BAAlBM,OAAkB;AAAA,UAAlBA,OAAkB,6BAAR,KAAQ;;AACvC,UAAIN,KAAK,KAAK,KAAKA,KAAf,IAAwBC,MAAM,KAAK,KAAKA,MAA5C,EAAoD;AAClD,eAAO,KAAKU,UAAL,CAAgB;AACrBX,UAAAA,KAAK,EAALA,KADqB;AAErBC,UAAAA,MAAM,EAANA,MAFqB;AAGrBX,UAAAA,MAAM,EAAE,KAAKA,MAHQ;AAIrBa,UAAAA,IAAI,EAAE,KAAKA,IAJU;AAKrBC,UAAAA,UAAU,EAAE,KAAKA,UALI;AAMrBC,UAAAA,MAAM,EAAE,KAAKA,MANQ;AAOrBC,UAAAA,OAAO,EAAPA;AAPqB,SAAhB,CAAP;AASD;;AACD,aAAO,IAAP;AACD;;;qCAG2B;AAAA;;AAAA,UAAboC,MAAa,uEAAJ,EAAI;;AAC1B,UAAI,KAAKZ,OAAL,EAAJ,EAAoB;AAClBC,qBAAIC,IAAJ,oBAAqB,IAArB;;AACA,eAAO,IAAP;AACD;;AAED,WAAK1B,OAAL,GAAe,IAAf;AAEA,WAAKlB,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AACA,mCAAe,KAAKP,EAApB,EAAwBsD,MAAxB,EAAgC,YAAM;AACpC,QAAA,MAAI,CAACtD,EAAL,CAAQ+C,cAAR,CAAuB,MAAI,CAACvC,MAA5B;AACD,OAFD;AAGA,WAAKR,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,IAAjC;AACA,aAAO,IAAP;AACD;;;iCAwBY+C,O,EAAS;AACpB,WAAKC,uBAAL,CAA6B,SAA7B;;AADoB,4BAWhBD,OAXgB,CAIlB/C,MAJkB;AAAA,UAIlBA,MAJkB,gCAIT,KAAKA,MAJI;AAAA,4BAWhB+C,OAXgB,CAKlB7B,MALkB;AAAA,UAKlBA,MALkB,gCAKT,IALS;AAAA,2BAWhB6B,OAXgB,CAMlBE,KANkB;AAAA,UAMlBA,KANkB,+BAMV,CANU;AAAA,4BAWhBF,OAXgB,CAOlBrD,MAPkB;AAAA,UAOlBA,MAPkB,gCAOT,KAAKA,MAPI;AAAA,4BAWhBqD,OAXgB,CAQlBtC,MARkB;AAAA,UAQlBA,MARkB,gCAQT,KAAKA,MARI;AAAA,4BAWhBsC,OAXgB,CASlBG,MATkB;AAAA,UASlBA,MATkB,gCAST,CATS;AAAA,gCAWhBH,OAXgB,CAUlBrB,UAVkB;AAAA,UAUlBA,UAVkB,oCAUL,EAVK;AAAA,0BAoBhBqB,OApBgB,CAclBpC,IAdkB;AAAA,UAclBA,IAdkB,8BAcX,IAdW;AAAA,0BAoBhBoC,OApBgB,CAelBxC,IAfkB;AAAA,UAelBA,IAfkB,8BAeX,KAAKA,IAfM;AAAA,2BAoBhBwC,OApBgB,CAgBlB3C,KAhBkB;AAAA,UAgBlBA,KAhBkB,+BAgBV,KAAKA,KAhBK;AAAA,4BAoBhB2C,OApBgB,CAiBlB1C,MAjBkB;AAAA,UAiBlBA,MAjBkB,gCAiBT,KAAKA,MAjBI;AAAA,gCAoBhB0C,OApBgB,CAkBlBvC,UAlBkB;AAAA,UAkBlBA,UAlBkB,oCAkBL,KAAKA,UAlBA;AAAA,gCAoBhBuC,OApBgB,CAmBlBnB,UAnBkB;AAAA,UAmBlBA,UAnBkB,oCAmBL,KAnBK;;AAuBpB,UAAI,CAACjB,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGO,MAAP;AACD;;AAzBmB,mCA2B6B,KAAKW,iBAAL,CAAuB;AACtEnC,QAAAA,MAAM,EAANA,MADsE;AAEtEa,QAAAA,IAAI,EAAJA,IAFsE;AAGtEC,QAAAA,UAAU,EAAVA,UAHsE;AAItEoB,QAAAA,UAAU,EAAVA,UAJsE;AAKtEjB,QAAAA,IAAI,EAAJA,IALsE;AAMtEP,QAAAA,KAAK,EAALA,KANsE;AAOtEC,QAAAA,MAAM,EAANA;AAPsE,OAAvB,CA3B7B;;AA2BlBE,MAAAA,IA3BkB,0BA2BlBA,IA3BkB;AA2BZC,MAAAA,UA3BY,0BA2BZA,UA3BY;AA2BAoB,MAAAA,UA3BA,0BA2BAA,UA3BA;AA2BYxB,MAAAA,KA3BZ,0BA2BYA,KA3BZ;AA2BmBC,MAAAA,MA3BnB,0BA2BmBA,MA3BnB;AAAA,UAqCbb,EArCa,GAqCP,IArCO,CAqCbA,EArCa;AAsCpBA,MAAAA,EAAE,CAACyC,WAAH,CAAe,KAAKjC,MAApB,EAA4B,KAAKD,MAAjC;AAEA,UAAIoD,QAAQ,GAAG,IAAf;;AAxCoB,+BAyCA,KAAKC,YAAL,CAAkB;AAACzC,QAAAA,IAAI,EAAJA,IAAD;AAAOiB,QAAAA,UAAU,EAAVA;AAAP,OAAlB,CAzCA;;AAyClBjB,MAAAA,IAzCkB,sBAyClBA,IAzCkB;AAyCZwC,MAAAA,QAzCY,sBAyCZA,QAzCY;AA2CpB,UAAIE,GAAJ;AAEA,mCAAe,KAAK7D,EAApB,EAAwBkC,UAAxB,EAAoC,YAAM;AACxC,gBAAQyB,QAAR;AACE,eAAK,MAAL;AACE3D,YAAAA,EAAE,CAAC8D,UAAH,CAActD,MAAd,EAAsBiD,KAAtB,EAA6BvD,MAA7B,EAAqCU,KAArC,EAA4CC,MAA5C,EAAoDI,MAApD,EAA4DD,UAA5D,EAAwED,IAAxE,EAA8EI,IAA9E;AACA;;AACF,eAAK,aAAL;AAIEnB,YAAAA,EAAE,CAAC8D,UAAH,CACEtD,MADF,EAEEiD,KAFF,EAGEvD,MAHF,EAIEU,KAJF,EAKEC,MALF,EAMEI,MANF,EAOED,UAPF,EAQED,IARF,EASEI,IATF,EAWEuC,MAXF;AAaA;;AACF,eAAK,QAAL;AAEEG,YAAAA,GAAG,GAAG,kCAAoB7D,EAApB,CAAN;AACA6D,YAAAA,GAAG,CAACE,UAAJ,QAAuC5C,IAAI,CAACZ,MAAL,IAAeY,IAAtD;AACA0C,YAAAA,GAAG,CAACC,UAAJ,CAAetD,MAAf,EAAuBiD,KAAvB,EAA8BvD,MAA9B,EAAsCU,KAAtC,EAA6CC,MAA7C,EAAqDI,MAArD,EAA6DD,UAA7D,EAAyED,IAAzE,EAA+E2C,MAA/E;AACAG,YAAAA,GAAG,CAACE,UAAJ,QAAuC,IAAvC;AACA;;AACF,eAAK,gBAAL;AACE,gBAAI,uBAAS/D,EAAT,CAAJ,EAAkB;AAChBA,cAAAA,EAAE,CAAC8D,UAAH,CAActD,MAAd,EAAsBiD,KAAtB,EAA6BvD,MAA7B,EAAqCU,KAArC,EAA4CC,MAA5C,EAAoDI,MAApD,EAA4DD,UAA5D,EAAwED,IAAxE,EAA8EI,IAA9E;AACD,aAFD,MAEO;AACLnB,cAAAA,EAAE,CAAC8D,UAAH,CAActD,MAAd,EAAsBiD,KAAtB,EAA6BvD,MAA7B,EAAqCc,UAArC,EAAiDD,IAAjD,EAAuDI,IAAvD;AACD;;AACD;;AACF,eAAK,YAAL;AAAA,uDACwCA,IAAI,CAAC6C,OAAL,EADxC;AAAA;;AAAA;AACE,kEAAsD;AAAA;AAAA,oBAA1CC,UAA0C;AAAA,oBAA9BC,SAA8B;;AACpDlE,gBAAAA,EAAE,CAACmE,oBAAH,CACE3D,MADF,EAEEyD,UAFF,EAGEC,SAAS,CAAChE,MAHZ,EAIEgE,SAAS,CAACtD,KAJZ,EAKEsD,SAAS,CAACrD,MALZ,EAMEI,MANF,EAOEiD,SAAS,CAAC/C,IAPZ;AASD;AAXH;AAAA;AAAA;AAAA;AAAA;;AAaE;;AACF;AACE,gCAAO,KAAP,EAAc,yBAAd;AAnDJ;AAqDD,OAtDD;;AAwDA,UAAIA,IAAI,IAAIA,IAAI,CAACiD,UAAjB,EAA6B;AAC3B,aAAKC,qBAAL,CAA2BlD,IAAI,CAACiD,UAAhC,EAA4C,SAA5C;AACD,OAFD,MAEO;AAEL,YAAME,QAAQ,GAAGC,qCAAqB,KAAKvD,UAA1B,KAAyC,CAA1D;AACA,YAAMwD,WAAW,GAAGC,2BAAW,KAAK1D,IAAhB,KAAyB,CAA7C;;AAEA,aAAKsD,qBAAL,CAA2B,KAAKzD,KAAL,GAAa,KAAKC,MAAlB,GAA2ByD,QAA3B,GAAsCE,WAAjE,EAA8E,SAA9E;AACD;;AAED,WAAK7D,MAAL,GAAc,IAAd;AAEA,aAAO,IAAP;AACD;;;2CA+CE;AAAA;;AAAA,+BAfDH,MAeC;AAAA,UAfDA,MAeC,6BAfQ,KAAKA,MAeb;AAAA,+BAdDkB,MAcC;AAAA,UAdDA,MAcC,6BAdQ,IAcR;AAAA,6BAbDP,IAaC;AAAA,UAbDA,IAaC,2BAbM,IAaN;AAAA,0BAZDuD,CAYC;AAAA,UAZDA,CAYC,wBAZG,CAYH;AAAA,0BAXDC,CAWC;AAAA,UAXDA,CAWC,wBAXG,CAWH;AAAA,8BAVD/D,KAUC;AAAA,UAVDA,KAUC,4BAVO,KAAKA,KAUZ;AAAA,+BATDC,MASC;AAAA,UATDA,MASC,6BATQ,KAAKA,MASb;AAAA,8BARD4C,KAQC;AAAA,UARDA,KAQC,4BARO,CAQP;AAAA,+BAPDvD,MAOC;AAAA,UAPDA,MAOC,6BAPQ,KAAKA,MAOb;AAAA,6BANDa,IAMC;AAAA,UANDA,IAMC,2BANM,KAAKA,IAMX;AAAA,mCALDC,UAKC;AAAA,UALDA,UAKC,iCALY,KAAKA,UAKjB;AAAA,mCAJDoB,UAIC;AAAA,UAJDA,UAIC,iCAJY,KAIZ;AAAA,+BAHDsB,MAGC;AAAA,UAHDA,MAGC,6BAHQ,CAGR;AAAA,+BAFDzC,MAEC;AAAA,UAFDA,MAEC,6BAFQ,KAAKA,MAEb;AAAA,mCADDiB,UACC;AAAA,UADDA,UACC,iCADY,EACZ;;AAAA,mCACgD,KAAKG,iBAAL,CAAuB;AACtEnC,QAAAA,MAAM,EAANA,MADsE;AAEtEa,QAAAA,IAAI,EAAJA,IAFsE;AAGtEC,QAAAA,UAAU,EAAVA,UAHsE;AAItEoB,QAAAA,UAAU,EAAVA,UAJsE;AAKtEjB,QAAAA,IAAI,EAAJA,IALsE;AAMtEP,QAAAA,KAAK,EAALA,KANsE;AAOtEC,QAAAA,MAAM,EAANA;AAPsE,OAAvB,CADhD;;AACCE,MAAAA,IADD,0BACCA,IADD;AACOC,MAAAA,UADP,0BACOA,UADP;AACmBoB,MAAAA,UADnB,0BACmBA,UADnB;AAC+BxB,MAAAA,KAD/B,0BAC+BA,KAD/B;AACsCC,MAAAA,MADtC,0BACsCA,MADtC;AAWD,0BAAO,KAAKC,KAAL,KAAe,CAAtB,EAAyB,2CAAzB;;AAGA,UAAI,CAACK,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGO,MAAP;AACD;;AAGD,UAAIP,IAAI,IAAIA,IAAI,CAACA,IAAjB,EAAuB;AACrB,YAAMyD,OAAO,GAAGzD,IAAhB;AACAA,QAAAA,IAAI,GAAGyD,OAAO,CAACzD,IAAf;AACAP,QAAAA,KAAK,GAAGgE,OAAO,CAACC,KAAR,CAAc,CAAd,CAAR;AACAhE,QAAAA,MAAM,GAAG+D,OAAO,CAACC,KAAR,CAAc,CAAd,CAAT;AACD;;AAGD,UAAI1D,IAAI,YAAY2D,eAApB,EAA4B;AAC1B3D,QAAAA,IAAI,GAAGA,IAAI,CAACZ,MAAZ;AACD;;AAED,WAAKP,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AAEA,mCAAe,KAAKP,EAApB,EAAwBkC,UAAxB,EAAoC,YAAM;AAExC,YAAIE,UAAJ,EAAgB;AACd,UAAA,MAAI,CAACpC,EAAL,CAAQ+E,uBAAR,CAAgCvE,MAAhC,EAAwCiD,KAAxC,EAA+CiB,CAA/C,EAAkDC,CAAlD,EAAqD/D,KAArD,EAA4DC,MAA5D,EAAoEX,MAApE,EAA4EiB,IAA5E;AACD,SAFD,MAEO,IAAIA,IAAI,KAAK,IAAb,EAAmB;AACxB,UAAA,MAAI,CAACnB,EAAL,CAAQgF,aAAR,CAAsBxE,MAAtB,EAA8BiD,KAA9B,EAAqCiB,CAArC,EAAwCC,CAAxC,EAA2C/D,KAA3C,EAAkDC,MAAlD,EAA0DG,UAA1D,EAAsED,IAAtE,EAA4E,IAA5E;AACD,SAFM,MAEA,IAAIkE,WAAW,CAACC,MAAZ,CAAmB/D,IAAnB,CAAJ,EAA8B;AAGnC,UAAA,MAAI,CAACnB,EAAL,CAAQgF,aAAR,CAAsBxE,MAAtB,EAA8BiD,KAA9B,EAAqCiB,CAArC,EAAwCC,CAAxC,EAA2C/D,KAA3C,EAAkDC,MAAlD,EAA0DG,UAA1D,EAAsED,IAAtE,EAA4EI,IAA5E,EAAkFuC,MAAlF;AACD,SAJM,MAIA,IAAIvC,IAAI,YAAYtB,WAApB,EAAiC;AAEtC,cAAMgE,GAAG,GAAG,kCAAoB,MAAI,CAAC7D,EAAzB,CAAZ;AAEA6D,UAAAA,GAAG,CAACE,UAAJ,QAAuC5C,IAAvC;AACA0C,UAAAA,GAAG,CAACmB,aAAJ,CAAkBxE,MAAlB,EAA0BiD,KAA1B,EAAiCiB,CAAjC,EAAoCC,CAApC,EAAuC/D,KAAvC,EAA8CC,MAA9C,EAAsDG,UAAtD,EAAkED,IAAlE,EAAwE2C,MAAxE;AACAG,UAAAA,GAAG,CAACE,UAAJ,QAAuC,IAAvC;AACD,SAPM,MAOA,IAAI,uBAAS,MAAI,CAAC/D,EAAd,CAAJ,EAAuB;AAE5B,cAAM6D,GAAG,GAAG,kCAAoB,MAAI,CAAC7D,EAAzB,CAAZ;;AACA6D,UAAAA,GAAG,CAACmB,aAAJ,CAAkBxE,MAAlB,EAA0BiD,KAA1B,EAAiCiB,CAAjC,EAAoCC,CAApC,EAAuC/D,KAAvC,EAA8CC,MAA9C,EAAsDG,UAAtD,EAAkED,IAAlE,EAAwEI,IAAxE;AACD,SAJM,MAIA;AACL,UAAA,MAAI,CAACnB,EAAL,CAAQgF,aAAR,CAAsBxE,MAAtB,EAA8BiD,KAA9B,EAAqCiB,CAArC,EAAwCC,CAAxC,EAA2C3D,UAA3C,EAAuDD,IAAvD,EAA6DI,IAA7D;AACD;AACF,OAxBD;AA0BA,WAAKnB,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,IAAjC;AACD;;;sCAW0B;AAAA,UAAXP,IAAW,uEAAJ,EAAI;;AACzB0C,mBAAIwC,KAAJ,CACE,iGADF;;AAGA,aAAO,IAAP;AACD;;;oCAEe;AACd,aAAO,KAAKnF,EAAL,CAAQoF,YAAR,eAAP;AACD;;;2BAaoC;AAAA,UAAhC3E,WAAgC,uEAAlB,KAAKA,WAAa;AAAA,UAC5BT,EAD4B,GACtB,IADsB,CAC5BA,EAD4B;;AAGnC,UAAIS,WAAW,KAAKC,SAApB,EAA+B;AAC7B,aAAKD,WAAL,GAAmBA,WAAnB;AACAT,QAAAA,EAAE,CAACwC,aAAH,CAAiB,QAAc/B,WAA/B;AACD;;AAEDT,MAAAA,EAAE,CAACyC,WAAH,CAAe,KAAKjC,MAApB,EAA4B,KAAKD,MAAjC;AACA,aAAOE,WAAP;AACD;;;6BAEsC;AAAA,UAAhCA,WAAgC,uEAAlB,KAAKA,WAAa;AAAA,UAC9BT,EAD8B,GACxB,IADwB,CAC9BA,EAD8B;;AAGrC,UAAIS,WAAW,KAAKC,SAApB,EAA+B;AAC7B,aAAKD,WAAL,GAAmBA,WAAnB;AACAT,QAAAA,EAAE,CAACwC,aAAH,CAAiB,QAAc/B,WAA/B;AACD;;AAEDT,MAAAA,EAAE,CAACyC,WAAH,CAAe,KAAKjC,MAApB,EAA4B,IAA5B;AACA,aAAOC,WAAP;AACD;;;wCAIwC;AAAA,UAA3BU,IAA2B,SAA3BA,IAA2B;AAAA,mCAArBiB,UAAqB;AAAA,UAArBA,UAAqB,iCAAR,KAAQ;;AACvC,UAAIA,UAAJ,EAAgB;AACd,eAAO;AAACjB,UAAAA,IAAI,EAAJA,IAAD;AAAOwC,UAAAA,QAAQ,EAAE;AAAjB,SAAP;AACD;;AACD,UAAIxC,IAAI,KAAK,IAAb,EAAmB;AACjB,eAAO;AAACA,UAAAA,IAAI,EAAJA,IAAD;AAAOwC,UAAAA,QAAQ,EAAE;AAAjB,SAAP;AACD;;AACD,UAAIsB,WAAW,CAACC,MAAZ,CAAmB/D,IAAnB,CAAJ,EAA8B;AAC5B,eAAO;AAACA,UAAAA,IAAI,EAAJA,IAAD;AAAOwC,UAAAA,QAAQ,EAAE;AAAjB,SAAP;AACD;;AACD,UAAIxC,IAAI,YAAY2D,eAApB,EAA4B;AAC1B,eAAO;AAAC3D,UAAAA,IAAI,EAAEA,IAAI,CAACZ,MAAZ;AAAoBoD,UAAAA,QAAQ,EAAE;AAA9B,SAAP;AACD;;AACD,UAAIxC,IAAI,YAAYtB,WAApB,EAAiC;AAC/B,eAAO;AAACsB,UAAAA,IAAI,EAAJA,IAAD;AAAOwC,UAAAA,QAAQ,EAAE;AAAjB,SAAP;AACD;;AAED,aAAO;AAACxC,QAAAA,IAAI,EAAJA,IAAD;AAAOwC,QAAAA,QAAQ,EAAE;AAAjB,OAAP;AACD;;;sCA+EiB1D,I,EAAM;AAAA,UACfC,MADe,GACCD,IADD,CACfC,MADe;AAAA,UACPiB,IADO,GACClB,IADD,CACPkB,IADO;AAAA,UAEjBP,KAFiB,GAE8BX,IAF9B,CAEjBW,KAFiB;AAAA,UAEVC,MAFU,GAE8BZ,IAF9B,CAEVY,MAFU;AAAA,UAEFG,UAFE,GAE8Bf,IAF9B,CAEFe,UAFE;AAAA,UAEUD,IAFV,GAE8Bd,IAF9B,CAEUc,IAFV;AAAA,UAEgBqB,UAFhB,GAE8BnC,IAF9B,CAEgBmC,UAFhB;AAKtB,UAAMiD,aAAa,GAAGC,gCAAgBpF,MAAhB,CAAtB;AACAc,MAAAA,UAAU,GAAGA,UAAU,IAAKqE,aAAa,IAAIA,aAAa,CAACrE,UAA3D;AACAD,MAAAA,IAAI,GAAGA,IAAI,IAAKsE,aAAa,IAAIA,aAAa,CAACE,KAAd,CAAoB,CAApB,CAAjC;AAGAnD,MAAAA,UAAU,GAAGA,UAAU,IAAKiD,aAAa,IAAIA,aAAa,CAACjD,UAA3D;;AAVsB,kCAYH,KAAKoD,gBAAL,CAAsBrE,IAAtB,EAA4BP,KAA5B,EAAmCC,MAAnC,CAZG;;AAYpBD,MAAAA,KAZoB,yBAYpBA,KAZoB;AAYbC,MAAAA,MAZa,yBAYbA,MAZa;AActB,aAAO;AAACG,QAAAA,UAAU,EAAVA,UAAD;AAAaD,QAAAA,IAAI,EAAJA,IAAb;AAAmBqB,QAAAA,UAAU,EAAVA,UAAnB;AAA+BxB,QAAAA,KAAK,EAALA,KAA/B;AAAsCC,QAAAA,MAAM,EAANA,MAAtC;AAA8CX,QAAAA,MAAM,EAANA,MAA9C;AAAsDiB,QAAAA,IAAI,EAAJA;AAAtD,OAAP;AACD;;;qCAGgBA,I,EAAMP,K,EAAOC,M,EAAQ;AACpC,UAAI4E,IAAJ;;AAEA,UAAI,OAAOC,SAAP,KAAqB,WAArB,IAAoCvE,IAAI,YAAYuE,SAAxD,EAAmE;AACjED,QAAAA,IAAI,GAAG;AAAC7E,UAAAA,KAAK,EAAEO,IAAI,CAACP,KAAb;AAAoBC,UAAAA,MAAM,EAAEM,IAAI,CAACN;AAAjC,SAAP;AACD,OAFD,MAEO,IAAI,OAAO8E,gBAAP,KAA4B,WAA5B,IAA2CxE,IAAI,YAAYwE,gBAA/D,EAAiF;AACtFF,QAAAA,IAAI,GAAG;AAAC7E,UAAAA,KAAK,EAAEO,IAAI,CAACyE,YAAb;AAA2B/E,UAAAA,MAAM,EAAEM,IAAI,CAAC0E;AAAxC,SAAP;AACD,OAFM,MAEA,IAAI,OAAOC,iBAAP,KAA6B,WAA7B,IAA4C3E,IAAI,YAAY2E,iBAAhE,EAAmF;AACxFL,QAAAA,IAAI,GAAG;AAAC7E,UAAAA,KAAK,EAAEO,IAAI,CAACP,KAAb;AAAoBC,UAAAA,MAAM,EAAEM,IAAI,CAACN;AAAjC,SAAP;AACD,OAFM,MAEA,IAAI,OAAOkF,WAAP,KAAuB,WAAvB,IAAsC5E,IAAI,YAAY4E,WAA1D,EAAuE;AAC5EN,QAAAA,IAAI,GAAG;AAAC7E,UAAAA,KAAK,EAAEO,IAAI,CAACP,KAAb;AAAoBC,UAAAA,MAAM,EAAEM,IAAI,CAACN;AAAjC,SAAP;AACD,OAFM,MAEA,IAAI,OAAOe,gBAAP,KAA4B,WAA5B,IAA2CT,IAAI,YAAYS,gBAA/D,EAAiF;AACtF6D,QAAAA,IAAI,GAAG;AAAC7E,UAAAA,KAAK,EAAEO,IAAI,CAAC6E,UAAb;AAAyBnF,UAAAA,MAAM,EAAEM,IAAI,CAAC8E;AAAtC,SAAP;AACD,OAFM,MAEA,IAAI,CAAC9E,IAAL,EAAW;AAChBsE,QAAAA,IAAI,GAAG;AAAC7E,UAAAA,KAAK,EAAEA,KAAK,IAAI,CAAT,GAAaA,KAAb,GAAqB,CAA7B;AAAgCC,UAAAA,MAAM,EAAEA,MAAM,IAAI,CAAV,GAAcA,MAAd,GAAuB;AAA/D,SAAP;AACD,OAFM,MAEA;AACL4E,QAAAA,IAAI,GAAG;AAAC7E,UAAAA,KAAK,EAALA,KAAD;AAAQC,UAAAA,MAAM,EAANA;AAAR,SAAP;AACD;;AAED,0BAAO4E,IAAP,EAAa,gCAAb;AACA,0BACE7E,KAAK,KAAKF,SAAV,IAAuB+E,IAAI,CAAC7E,KAAL,KAAeA,KADxC,EAEE,qDAFF;AAIA,0BACEC,MAAM,KAAKH,SAAX,IAAwB+E,IAAI,CAAC5E,MAAL,KAAgBA,MAD1C,EAEE,uDAFF;AAKA,aAAO4E,IAAP;AACD;;;oCAIe;AACd,aAAO,KAAKzF,EAAL,CAAQkG,aAAR,EAAP;AACD;;;oCAEe;AACd,WAAKlG,EAAL,CAAQmG,aAAR,CAAsB,KAAK5F,MAA3B;;AACA,WAAKiD,uBAAL,CAA6B,SAA7B;AACD;;;kCAEa4C,K,EAAO;AACnB,cAAQA,KAAR;AACE;AACE,iBAAO,KAAKxF,KAAZ;;AACF;AACE,iBAAO,KAAKC,MAAZ;;AACF;AACE,eAAKb,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AACA,cAAM8F,KAAK,GAAG,KAAKrG,EAAL,CAAQsG,eAAR,CAAwB,KAAK9F,MAA7B,EAAqC4F,KAArC,CAAd;AACA,eAAKpG,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,IAAjC;AACA,iBAAO6F,KAAP;AATJ;AAWD;;;kCAEaD,K,EAAOG,K,EAAO;AAC1B,WAAKvG,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AAGAgG,MAAAA,KAAK,GAAG,KAAKC,aAAL,CAAmBJ,KAAnB,EAA0BG,KAA1B,CAAR;;AAKA,cAAQH,KAAR;AACE;AACA;AACE,eAAKpG,EAAL,CAAQyG,aAAR,CAAsB,KAAKlG,MAA3B,EAAmC6F,KAAnC,EAA0CG,KAA1C;AACA;;AAEF;AACA;AACE,8BAAO,KAAP;AACA;;AAEF;AACE,eAAKvG,EAAL,CAAQ0G,aAAR,CAAsB,KAAKlG,MAA3B,EAAmC4F,KAAnC,EAA0CG,KAA1C;AACA;AAbJ;;AAgBA,WAAKvG,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,IAAjC;AACA,aAAO,IAAP;AACD;;;8BAES;AACR,UAAI,uBAAS,KAAKR,EAAd,CAAJ,EAAuB;AAErB,eAAO,KAAP;AACD;;AAED,UAAI,CAAC,KAAKY,KAAN,IAAe,CAAC,KAAKC,MAAzB,EAAiC;AAC/B,eAAO,KAAP;AACD;;AACD,aAAO,CAAC,yBAAa,KAAKD,KAAlB,CAAD,IAA6B,CAAC,yBAAa,KAAKC,MAAlB,CAArC;AACD;;;mCAGcqB,U,EAAY;AACzB,UAAIA,UAAU,CAAC,KAAKlC,EAAL,CAAQ2G,kBAAT,CAAV,KAA2CjG,SAA/C,EAA0D;AAExDwB,QAAAA,UAAU,CAAC,KAAKlC,EAAL,CAAQ2G,kBAAT,CAAV,GAAyC,KAAK3G,EAAL,CAAQ4G,MAAjD;AACD;;AACD,UAAI1E,UAAU,CAAC,KAAKlC,EAAL,CAAQ6G,cAAT,CAAV,KAAuCnG,SAA3C,EAAsD;AAEpDwB,QAAAA,UAAU,CAAC,KAAKlC,EAAL,CAAQ6G,cAAT,CAAV,GAAqC,KAAK7G,EAAL,CAAQ8G,aAA7C;AACD;;AACD,UAAI5E,UAAU,CAAC,KAAKlC,EAAL,CAAQ+G,cAAT,CAAV,KAAuCrG,SAA3C,EAAsD;AAEpDwB,QAAAA,UAAU,CAAC,KAAKlC,EAAL,CAAQ+G,cAAT,CAAV,GAAqC,KAAK/G,EAAL,CAAQ8G,aAA7C;AACD;AACF;;;kCAEaV,K,EAAOG,K,EAAO;AAC1B,UAAI,KAAK7D,OAAL,EAAJ,EAAoB;AAClB,gBAAQ0D,KAAR;AACE;AACE,gBAAIxG,gBAAgB,CAACoH,OAAjB,CAAyBT,KAAzB,MAAoC,CAAC,CAAzC,EAA4C;AAE1CA,cAAAA,KAAK,OAAL;AACD;;AACD;;AACF;AACA;AACE,gBAAIA,KAAK,UAAT,EAAgC;AAE9BA,cAAAA,KAAK,QAAL;AACD;;AACD;;AACF;AACE;AAfJ;AAiBD;;AACD,aAAOA,KAAP;AACD;;;EAtwBkCU,iB","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, withParameters, log} from '@luma.gl/gltools';\n\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {\n TEXTURE_FORMATS,\n DATA_FORMAT_CHANNELS,\n TYPE_SIZES,\n isFormatSupported,\n isLinearFilteringSupported\n} from './texture-formats';\nimport {assert} from '../utils/assert';\nimport {uid, isPowerOfTwo} from '../utils/utils';\n\n// Supported min filters for NPOT texture.\nconst NPOT_MIN_FILTERS = [GL.LINEAR, GL.NEAREST];\n\n// Polyfill\n// Note (Tarek): Do we really need to support this API?\nconst WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};\n\nexport default class Texture extends Resource {\n static isSupported(gl, opts = {}) {\n const {format, linearFiltering} = opts;\n let supported = true;\n if (format) {\n supported = supported && isFormatSupported(gl, format);\n supported = supported && (!linearFiltering || isLinearFilteringSupported(gl, format));\n }\n return supported;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n constructor(gl, props) {\n const {\n id = uid('texture'),\n handle,\n target\n // , magFilter, minFilter, wrapS, wrapT\n } = props;\n\n super(gl, {id, handle});\n\n this.target = target;\n this.textureUnit = undefined;\n\n // Program.draw() checks the loaded flag of all textures to avoid\n // Textures that are still loading from promises\n // Set to true as soon as texture has been initialized with valid data\n this.loaded = false;\n\n this.width = undefined;\n this.height = undefined;\n this.depth = undefined;\n this.format = undefined;\n this.type = undefined;\n this.dataFormat = undefined;\n this.border = undefined;\n this.textureUnit = undefined;\n this.mipmaps = undefined;\n }\n\n toString() {\n return `Texture(${this.id},${this.width}x${this.height})`;\n }\n\n /* eslint-disable max-len, max-statements */\n initialize(props = {}) {\n let data = props.data;\n\n if (data instanceof Promise) {\n data.then(resolvedImageData =>\n this.initialize(\n Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })\n )\n );\n return this;\n }\n const isVideo = typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement;\n // @ts-ignore\n if (isVideo && data.readyState < HTMLVideoElement.HAVE_METADATA) {\n this._video = null; // Declare member before the object is sealed\n data.addEventListener('loadeddata', () => this.initialize(props));\n return this;\n }\n\n const {\n pixels = null,\n format = GL.RGBA,\n border = 0,\n recreate = false,\n parameters = {},\n pixelStore = {},\n textureUnit = undefined\n } = props;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n // TODO - This looks backwards? Commenting out for now until we decide\n // which prop to use\n // log.deprecated('data', 'pixels')();\n data = pixels;\n }\n\n let {width, height, dataFormat, type, compressed = false, mipmaps = true} = props;\n const {depth = 0} = props;\n\n // Deduce width and height\n ({width, height, compressed, dataFormat, type} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n // Store opts for accessors\n this.width = width;\n this.height = height;\n this.depth = depth;\n this.format = format;\n this.type = type;\n this.dataFormat = dataFormat;\n this.border = border;\n this.textureUnit = textureUnit;\n\n if (Number.isFinite(this.textureUnit)) {\n this.gl.activeTexture(GL.TEXTURE0 + this.textureUnit);\n this.gl.bindTexture(this.target, this.handle);\n }\n\n if (mipmaps && this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n mipmaps = false;\n\n this._updateForNPOT(parameters);\n }\n\n this.mipmaps = mipmaps;\n\n this.setImageData({\n data,\n width,\n height,\n depth,\n format,\n type,\n dataFormat,\n border,\n mipmaps,\n parameters: pixelStore,\n compressed\n });\n\n if (mipmaps) {\n this.generateMipmap();\n }\n\n // Set texture sampler parameters\n this.setParameters(parameters);\n\n // TODO - Store data to enable auto recreate on context loss\n if (recreate) {\n this.data = data;\n }\n if (isVideo) {\n this._video = {\n video: data,\n parameters,\n // @ts-ignore\n lastTime: data.readyState >= HTMLVideoElement.HAVE_CURRENT_DATA ? data.currentTime : -1\n };\n }\n\n return this;\n }\n\n update() {\n if (this._video) {\n const {video, parameters, lastTime} = this._video;\n // @ts-ignore\n if (lastTime === video.currentTime || video.readyState < HTMLVideoElement.HAVE_CURRENT_DATA) {\n return;\n }\n this.setSubImageData({\n data: video,\n parameters\n });\n if (this.mipmaps) {\n this.generateMipmap();\n }\n this._video.lastTime = video.currentTime;\n }\n }\n\n // If size has changed, reinitializes with current format\n // note clears image and mipmaps\n resize({height, width, mipmaps = false}) {\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n format: this.format,\n type: this.type,\n dataFormat: this.dataFormat,\n border: this.border,\n mipmaps\n });\n }\n return this;\n }\n\n // Call to regenerate mipmaps after modifying texture(s)\n generateMipmap(params = {}) {\n if (this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n return this;\n }\n\n this.mipmaps = true;\n\n this.gl.bindTexture(this.target, this.handle);\n withParameters(this.gl, params, () => {\n this.gl.generateMipmap(this.target);\n });\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n /*\n * Allocates storage\n * @param {*} pixels -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} width -\n * @param {GLint} height -\n * @param {GLint} mipMapLevel -\n * @param {GLenum} format - format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n /* eslint-disable max-len, max-statements, complexity */\n setImageData(options) {\n this._trackDeallocatedMemory('Texture');\n\n const {\n target = this.target,\n pixels = null,\n level = 0,\n format = this.format,\n border = this.border,\n offset = 0,\n parameters = {}\n } = options;\n\n let {\n data = null,\n type = this.type,\n width = this.width,\n height = this.height,\n dataFormat = this.dataFormat,\n compressed = false\n } = options;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n const {gl} = this;\n gl.bindTexture(this.target, this.handle);\n\n let dataType = null;\n ({data, dataType} = this._getDataType({data, compressed}));\n\n let gl2;\n\n withParameters(this.gl, parameters, () => {\n switch (dataType) {\n case 'null':\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n break;\n case 'typed-array':\n // Looks like this assert is not necessary, as offset is ignored under WebGL1\n // assert((offset === 0 || isWebGL2(gl)), 'offset supported in WebGL2 only');\n // @ts-ignore\n gl.texImage2D(\n target,\n level,\n format,\n width,\n height,\n border,\n dataFormat,\n type,\n data,\n // @ts-ignore\n offset\n );\n break;\n case 'buffer':\n // WebGL2 enables creating textures directly from a WebGL buffer\n gl2 = assertWebGL2Context(gl);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);\n gl2.texImage2D(target, level, format, width, height, border, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n break;\n case 'browser-object':\n if (isWebGL2(gl)) {\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n } else {\n gl.texImage2D(target, level, format, dataFormat, type, data);\n }\n break;\n case 'compressed':\n for (const [levelIndex, levelData] of data.entries()) {\n gl.compressedTexImage2D(\n target,\n levelIndex,\n levelData.format,\n levelData.width,\n levelData.height,\n border,\n levelData.data\n );\n }\n\n break;\n default:\n assert(false, 'Unknown image data type');\n }\n });\n\n if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(this.width * this.height * channels * channelSize, 'Texture');\n }\n\n this.loaded = true;\n\n return this;\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Redefines an area of an existing texture\n * Note: does not allocate storage\n */\n /*\n * Redefines an area of an existing texture\n * @param {*} pixels, data -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} x - xOffset from where texture to be updated\n * @param {GLint} y - yOffset from where texture to be updated\n * @param {GLint} width - width of the sub image to be updated\n * @param {GLint} height - height of the sub image to be updated\n * @param {GLint} level - mip level to be updated\n * @param {GLenum} format - internal format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer or ArrayBufferView\n * @param {GLenum} dataFormat - format of image data.\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n setSubImageData({\n target = this.target,\n pixels = null,\n data = null,\n x = 0,\n y = 0,\n width = this.width,\n height = this.height,\n level = 0,\n format = this.format,\n type = this.type,\n dataFormat = this.dataFormat,\n compressed = false,\n offset = 0,\n border = this.border,\n parameters = {}\n }) {\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n assert(this.depth === 0, 'texSubImage not supported for 3D textures');\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n // Support ndarrays\n if (data && data.data) {\n const ndarray = data;\n data = ndarray.data;\n width = ndarray.shape[0];\n height = ndarray.shape[1];\n }\n\n // Support buffers\n if (data instanceof Buffer) {\n data = data.handle;\n }\n\n this.gl.bindTexture(this.target, this.handle);\n\n withParameters(this.gl, parameters, () => {\n // TODO - x,y parameters\n if (compressed) {\n this.gl.compressedTexSubImage2D(target, level, x, y, width, height, format, data);\n } else if (data === null) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);\n } else if (ArrayBuffer.isView(data)) {\n // const gl2 = assertWebGL2Context(this.gl);\n // @ts-ignore last offset parameter is ignored under WebGL1\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);\n } else if (data instanceof WebGLBuffer) {\n // WebGL2 allows us to create texture directly from a WebGL buffer\n const gl2 = assertWebGL2Context(this.gl);\n // This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n } else if (isWebGL2(this.gl)) {\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n const gl2 = assertWebGL2Context(this.gl);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);\n } else {\n this.gl.texSubImage2D(target, level, x, y, dataFormat, type, data);\n }\n });\n\n this.gl.bindTexture(this.target, null);\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Defines a two-dimensional texture image or cube-map texture image with\n * pixels from the current framebuffer (rather than from client memory).\n * (gl.copyTexImage2D wrapper)\n *\n * Note that binding a texture into a Framebuffer's color buffer and\n * rendering can be faster.\n */\n copyFramebuffer(opts = {}) {\n log.error(\n 'Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})'\n )();\n return null;\n }\n\n getActiveUnit() {\n return this.gl.getParameter(GL.ACTIVE_TEXTURE) - GL.TEXTURE0;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n\n bind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, this.handle);\n return textureUnit;\n }\n\n unbind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, null);\n return textureUnit;\n }\n\n // PRIVATE METHODS\n\n _getDataType({data, compressed = false}) {\n if (compressed) {\n return {data, dataType: 'compressed'};\n }\n if (data === null) {\n return {data, dataType: 'null'};\n }\n if (ArrayBuffer.isView(data)) {\n return {data, dataType: 'typed-array'};\n }\n if (data instanceof Buffer) {\n return {data: data.handle, dataType: 'buffer'};\n }\n if (data instanceof WebGLBuffer) {\n return {data, dataType: 'buffer'};\n }\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n return {data, dataType: 'browser-object'};\n }\n\n /* Copied from texture-2d.js\n // WebGL2\n setPixels(opts = {}) {\n const {\n buffer,\n width = null,\n height = null,\n mipmapLevel = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n\n // This signature of texImage2D uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, buffer.target);\n // And as always, we must also bind the texture itself\n this.bind();\n\n gl.texImage2D(gl.TEXTURE_2D,\n mipmapLevel, format, width, height, border, format, type, buffer.target);\n\n this.unbind();\n gl.bindBuffer(GL.GL.PIXEL_UNPACK_BUFFER, null);\n return this;\n }\n\n setImageDataFromCompressedBuffer(opts) {\n const {\n buffer,\n // offset = 0,\n width = null,\n height = null,\n mipmapLevel = 0,\n internalFormat = GL.RGBA,\n // format = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n gl.compressedTexImage2D(this.target,\n mipmapLevel, internalFormat, width, height, border, buffer);\n // gl.compressedTexSubImage2D(target,\n // level, xoffset, yoffset, width, height, format, ArrayBufferView? pixels);\n return this;\n }\n\n copySubImage(opts) {\n const {\n // pixels,\n // offset = 0,\n // x,\n // y,\n // width,\n // height,\n // mipmapLevel = 0,\n // internalFormat = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n // border = 0\n } = opts;\n\n // if (pixels instanceof ArrayBufferView) {\n // gl.texSubImage2D(target, level, x, y, width, height, format, type, pixels);\n // }\n // gl.texSubImage2D(target, level, x, y, format, type, ? pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLImageElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLCanvasElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLVideoElement pixels);\n // // Additional signature in a WebGL 2 context:\n // gl.texSubImage2D(target, level, x, y, format, type, GLintptr offset);\n }\n */\n\n // HELPER METHODS\n\n _deduceParameters(opts) {\n const {format, data} = opts;\n let {width, height, dataFormat, type, compressed} = opts;\n\n // Deduce format and type from format\n const textureFormat = TEXTURE_FORMATS[format];\n dataFormat = dataFormat || (textureFormat && textureFormat.dataFormat);\n type = type || (textureFormat && textureFormat.types[0]);\n\n // Deduce compression from format\n compressed = compressed || (textureFormat && textureFormat.compressed);\n\n ({width, height} = this._deduceImageSize(data, width, height));\n\n return {dataFormat, type, compressed, width, height, format, data};\n }\n\n // eslint-disable-next-line complexity\n _deduceImageSize(data, width, height) {\n let size;\n\n if (typeof ImageData !== 'undefined' && data instanceof ImageData) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {\n size = {width: data.naturalWidth, height: data.naturalHeight};\n } else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {\n size = {width: data.width, height: data.height};\n } else if (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {\n size = {width: data.videoWidth, height: data.videoHeight};\n } else if (!data) {\n size = {width: width >= 0 ? width : 1, height: height >= 0 ? height : 1};\n } else {\n size = {width, height};\n }\n\n assert(size, 'Could not deduced texture size');\n assert(\n width === undefined || size.width === width,\n 'Deduced texture width does not match supplied width'\n );\n assert(\n height === undefined || size.height === height,\n 'Deduced texture height does not match supplied height'\n );\n\n return size;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createTexture();\n }\n\n _deleteHandle() {\n this.gl.deleteTexture(this.handle);\n this._trackDeallocatedMemory('Texture');\n }\n\n _getParameter(pname) {\n switch (pname) {\n case GL.TEXTURE_WIDTH:\n return this.width;\n case GL.TEXTURE_HEIGHT:\n return this.height;\n default:\n this.gl.bindTexture(this.target, this.handle);\n const value = this.gl.getTexParameter(this.target, pname);\n this.gl.bindTexture(this.target, null);\n return value;\n }\n }\n\n _setParameter(pname, param) {\n this.gl.bindTexture(this.target, this.handle);\n\n // NOTE: Apply NPOT workaround\n param = this._getNPOTParam(pname, param);\n\n // Apparently there are some integer/float conversion rules that made\n // the WebGL committe expose two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n switch (pname) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.gl.texParameterf(this.handle, pname, param);\n break;\n\n case GL.TEXTURE_WIDTH:\n case GL.TEXTURE_HEIGHT:\n assert(false);\n break;\n\n default:\n this.gl.texParameteri(this.target, pname, param);\n break;\n }\n\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n _isNPOT() {\n if (isWebGL2(this.gl)) {\n // NPOT restriction is only for WebGL1\n return false;\n }\n // Width and height not available, consider it is not NPOT texture\n if (!this.width || !this.height) {\n return false;\n }\n return !isPowerOfTwo(this.width) || !isPowerOfTwo(this.height);\n }\n\n // Update default settings which are not supported by NPOT textures.\n _updateForNPOT(parameters) {\n if (parameters[this.gl.TEXTURE_MIN_FILTER] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;\n }\n if (parameters[this.gl.TEXTURE_WRAP_S] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\n }\n if (parameters[this.gl.TEXTURE_WRAP_T] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_T to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\n }\n }\n\n _getNPOTParam(pname, param) {\n if (this._isNPOT()) {\n switch (pname) {\n case GL.TEXTURE_MIN_FILTER:\n if (NPOT_MIN_FILTERS.indexOf(param) === -1) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n param = GL.LINEAR;\n }\n break;\n case GL.TEXTURE_WRAP_S:\n case GL.TEXTURE_WRAP_T:\n if (param !== GL.CLAMP_TO_EDGE) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, ${getKey(this.gl, pname)} to CLAMP_TO_EDGE`)();\n param = GL.CLAMP_TO_EDGE;\n }\n break;\n default:\n break;\n }\n }\n return param;\n }\n}\n"],"file":"texture.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/texture.js"],"names":["NPOT_MIN_FILTERS","WebGLBuffer","globalThis","Texture","Symbol","toStringTag","gl","opts","format","linearFiltering","supported","props","id","handle","target","textureUnit","undefined","loaded","width","height","depth","type","dataFormat","border","mipmaps","data","Promise","then","resolvedImageData","initialize","Object","assign","pixels","isVideo","HTMLVideoElement","readyState","HAVE_METADATA","_video","addEventListener","recreate","parameters","pixelStore","compressed","_deduceParameters","Number","isFinite","activeTexture","bindTexture","_isNPOT","log","warn","_updateForNPOT","setImageData","generateMipmap","setParameters","video","lastTime","HAVE_CURRENT_DATA","currentTime","setSubImageData","params","options","_trackDeallocatedMemory","level","offset","dataType","_getDataType","gl2","compressedTextureSize","texImage2D","bindBuffer","entries","levelIndex","levelData","compressedTexImage2D","levelSize","_trackAllocatedMemory","byteLength","channels","DATA_FORMAT_CHANNELS","channelSize","TYPE_SIZES","x","y","ndarray","shape","Buffer","compressedTexSubImage2D","texSubImage2D","ArrayBuffer","isView","error","getParameter","textureFormat","TEXTURE_FORMATS","types","_deduceImageSize","size","ImageData","HTMLImageElement","naturalWidth","naturalHeight","HTMLCanvasElement","ImageBitmap","videoWidth","videoHeight","createTexture","deleteTexture","pname","value","getTexParameter","param","_getNPOTParam","texParameterf","texParameteri","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","indexOf","Resource"],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AACA;;AACA;;AAOA;;AACA;;;;;;;;;;;;AAGA,IAAMA,gBAAgB,GAAG,YAAzB;;AAIA,IAAMC,WAAW,GAAGC,UAAU,CAACD,WAAX,IAA0B,SAASA,WAAT,GAAuB,CAAE,CAAvE;;IAEqBE,O;;;;;;SAEdC,MAAM,CAACC,W;wBAAe;AACzB,aAAO,SAAP;AACD;;;gCACkBC,E,EAAe;AAAA,UAAXC,IAAW,uEAAJ,EAAI;AAAA,UACzBC,MADyB,GACED,IADF,CACzBC,MADyB;AAAA,UACjBC,eADiB,GACEF,IADF,CACjBE,eADiB;AAEhC,UAAIC,SAAS,GAAG,IAAhB;;AACA,UAAIF,MAAJ,EAAY;AACVE,QAAAA,SAAS,GAAGA,SAAS,IAAI,uCAAkBJ,EAAlB,EAAsBE,MAAtB,CAAzB;AACAE,QAAAA,SAAS,GAAGA,SAAS,KAAK,CAACD,eAAD,IAAoB,gDAA2BH,EAA3B,EAA+BE,MAA/B,CAAzB,CAArB;AACD;;AACD,aAAOE,SAAP;AACD;;;AAYD,mBAAYJ,EAAZ,EAAgBK,KAAhB,EAAuB;AAAA;;AAAA;AAAA,oBAMjBA,KANiB,CAEnBC,EAFmB;AAAA,QAEnBA,EAFmB,0BAEd,gBAAI,SAAJ,CAFc;AAAA,QAGnBC,MAHmB,GAMjBF,KANiB,CAGnBE,MAHmB;AAAA,QAInBC,MAJmB,GAMjBH,KANiB,CAInBG,MAJmB;AAQrB,8BAAMR,EAAN,EAAU;AAACM,MAAAA,EAAE,EAAFA,EAAD;AAAKC,MAAAA,MAAM,EAANA;AAAL,KAAV;AAEA,UAAKC,MAAL,GAAcA,MAAd;AACA,UAAKC,WAAL,GAAmBC,SAAnB;AAKA,UAAKC,MAAL,GAAc,KAAd;AAEA,UAAKC,KAAL,GAAaF,SAAb;AACA,UAAKG,MAAL,GAAcH,SAAd;AACA,UAAKI,KAAL,GAAaJ,SAAb;AACA,UAAKR,MAAL,GAAcQ,SAAd;AACA,UAAKK,IAAL,GAAYL,SAAZ;AACA,UAAKM,UAAL,GAAkBN,SAAlB;AACA,UAAKO,MAAL,GAAcP,SAAd;AACA,UAAKD,WAAL,GAAmBC,SAAnB;AACA,UAAKQ,OAAL,GAAeR,SAAf;AA1BqB;AA2BtB;;;;+BAEU;AACT,+BAAkB,KAAKJ,EAAvB,cAA6B,KAAKM,KAAlC,cAA2C,KAAKC,MAAhD;AACD;;;iCAGsB;AAAA;;AAAA,UAAZR,KAAY,uEAAJ,EAAI;AACrB,UAAIc,IAAI,GAAGd,KAAK,CAACc,IAAjB;;AAEA,UAAIA,IAAI,YAAYC,OAApB,EAA6B;AAC3BD,QAAAA,IAAI,CAACE,IAAL,CAAU,UAAAC,iBAAiB;AAAA,iBACzB,MAAI,CAACC,UAAL,CACEC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBpB,KAAlB,EAAyB;AACvBqB,YAAAA,MAAM,EAAEJ,iBADe;AAEvBH,YAAAA,IAAI,EAAEG;AAFiB,WAAzB,CADF,CADyB;AAAA,SAA3B;AAQA,eAAO,IAAP;AACD;;AACD,UAAMK,OAAO,GAAG,OAAOC,gBAAP,KAA4B,WAA5B,IAA2CT,IAAI,YAAYS,gBAA3E;;AAEA,UAAID,OAAO,IAAIR,IAAI,CAACU,UAAL,GAAkBD,gBAAgB,CAACE,aAAlD,EAAiE;AAC/D,aAAKC,MAAL,GAAc,IAAd;AACAZ,QAAAA,IAAI,CAACa,gBAAL,CAAsB,YAAtB,EAAoC;AAAA,iBAAM,MAAI,CAACT,UAAL,CAAgBlB,KAAhB,CAAN;AAAA,SAApC;AACA,eAAO,IAAP;AACD;;AApBoB,0BA8BjBA,KA9BiB,CAuBnBqB,MAvBmB;AAAA,UAuBnBA,MAvBmB,8BAuBV,IAvBU;AAAA,0BA8BjBrB,KA9BiB,CAwBnBH,MAxBmB;AAAA,UAwBnBA,MAxBmB;AAAA,0BA8BjBG,KA9BiB,CAyBnBY,MAzBmB;AAAA,UAyBnBA,MAzBmB,8BAyBV,CAzBU;AAAA,4BA8BjBZ,KA9BiB,CA0BnB4B,QA1BmB;AAAA,UA0BnBA,QA1BmB,gCA0BR,KA1BQ;AAAA,8BA8BjB5B,KA9BiB,CA2BnB6B,UA3BmB;AAAA,UA2BnBA,UA3BmB,kCA2BN,EA3BM;AAAA,8BA8BjB7B,KA9BiB,CA4BnB8B,UA5BmB;AAAA,UA4BnBA,UA5BmB,kCA4BN,EA5BM;AAAA,+BA8BjB9B,KA9BiB,CA6BnBI,WA7BmB;AAAA,UA6BnBA,WA7BmB,mCA6BLC,SA7BK;;AAiCrB,UAAI,CAACS,IAAL,EAAW;AAITA,QAAAA,IAAI,GAAGO,MAAP;AACD;;AAtCoB,UAwChBd,KAxCgB,GAwCuDP,KAxCvD,CAwChBO,KAxCgB;AAAA,UAwCTC,MAxCS,GAwCuDR,KAxCvD,CAwCTQ,MAxCS;AAAA,UAwCDG,UAxCC,GAwCuDX,KAxCvD,CAwCDW,UAxCC;AAAA,UAwCWD,IAxCX,GAwCuDV,KAxCvD,CAwCWU,IAxCX;AAAA,8BAwCuDV,KAxCvD,CAwCiB+B,UAxCjB;AAAA,UAwCiBA,UAxCjB,kCAwC8B,KAxC9B;AAAA,2BAwCuD/B,KAxCvD,CAwCqCa,OAxCrC;AAAA,UAwCqCA,OAxCrC,+BAwC+C,IAxC/C;AAAA,yBAyCDb,KAzCC,CAyCdS,KAzCc;AAAA,UAyCdA,KAzCc,6BAyCN,CAzCM;;AAAA,kCA4C4B,KAAKuB,iBAAL,CAAuB;AACtEnC,QAAAA,MAAM,EAANA,MADsE;AAEtEa,QAAAA,IAAI,EAAJA,IAFsE;AAGtEC,QAAAA,UAAU,EAAVA,UAHsE;AAItEoB,QAAAA,UAAU,EAAVA,UAJsE;AAKtEjB,QAAAA,IAAI,EAAJA,IALsE;AAMtEP,QAAAA,KAAK,EAALA,KANsE;AAOtEC,QAAAA,MAAM,EAANA;AAPsE,OAAvB,CA5C5B;;AA4CnBD,MAAAA,KA5CmB,yBA4CnBA,KA5CmB;AA4CZC,MAAAA,MA5CY,yBA4CZA,MA5CY;AA4CJuB,MAAAA,UA5CI,yBA4CJA,UA5CI;AA4CQpB,MAAAA,UA5CR,yBA4CQA,UA5CR;AA4CoBD,MAAAA,IA5CpB,yBA4CoBA,IA5CpB;AAuDrB,WAAKH,KAAL,GAAaA,KAAb;AACA,WAAKC,MAAL,GAAcA,MAAd;AACA,WAAKC,KAAL,GAAaA,KAAb;AACA,WAAKZ,MAAL,GAAcA,MAAd;AACA,WAAKa,IAAL,GAAYA,IAAZ;AACA,WAAKC,UAAL,GAAkBA,UAAlB;AACA,WAAKC,MAAL,GAAcA,MAAd;AACA,WAAKR,WAAL,GAAmBA,WAAnB;;AAEA,UAAI6B,MAAM,CAACC,QAAP,CAAgB,KAAK9B,WAArB,CAAJ,EAAuC;AACrC,aAAKT,EAAL,CAAQwC,aAAR,CAAsB,QAAc,KAAK/B,WAAzC;AACA,aAAKT,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AACD;;AAED,UAAIW,OAAO,IAAI,KAAKwB,OAAL,EAAf,EAA+B;AAC7BC,qBAAIC,IAAJ,oBAAqB,IAArB;;AACA1B,QAAAA,OAAO,GAAG,KAAV;;AAEA,aAAK2B,cAAL,CAAoBX,UAApB;AACD;;AAED,WAAKhB,OAAL,GAAeA,OAAf;AAEA,WAAK4B,YAAL,CAAkB;AAChB3B,QAAAA,IAAI,EAAJA,IADgB;AAEhBP,QAAAA,KAAK,EAALA,KAFgB;AAGhBC,QAAAA,MAAM,EAANA,MAHgB;AAIhBC,QAAAA,KAAK,EAALA,KAJgB;AAKhBZ,QAAAA,MAAM,EAANA,MALgB;AAMhBa,QAAAA,IAAI,EAAJA,IANgB;AAOhBC,QAAAA,UAAU,EAAVA,UAPgB;AAQhBC,QAAAA,MAAM,EAANA,MARgB;AAShBC,QAAAA,OAAO,EAAPA,OATgB;AAUhBgB,QAAAA,UAAU,EAAEC,UAVI;AAWhBC,QAAAA,UAAU,EAAVA;AAXgB,OAAlB;;AAcA,UAAIlB,OAAJ,EAAa;AACX,aAAK6B,cAAL;AACD;;AAGD,WAAKC,aAAL,CAAmBd,UAAnB;;AAGA,UAAID,QAAJ,EAAc;AACZ,aAAKd,IAAL,GAAYA,IAAZ;AACD;;AACD,UAAIQ,OAAJ,EAAa;AACX,aAAKI,MAAL,GAAc;AACZkB,UAAAA,KAAK,EAAE9B,IADK;AAEZe,UAAAA,UAAU,EAAVA,UAFY;AAIZgB,UAAAA,QAAQ,EAAE/B,IAAI,CAACU,UAAL,IAAmBD,gBAAgB,CAACuB,iBAApC,GAAwDhC,IAAI,CAACiC,WAA7D,GAA2E,CAAC;AAJ1E,SAAd;AAMD;;AAED,aAAO,IAAP;AACD;;;6BAEQ;AACP,UAAI,KAAKrB,MAAT,EAAiB;AAAA,2BACuB,KAAKA,MAD5B;AAAA,YACRkB,KADQ,gBACRA,KADQ;AAAA,YACDf,UADC,gBACDA,UADC;AAAA,YACWgB,QADX,gBACWA,QADX;;AAGf,YAAIA,QAAQ,KAAKD,KAAK,CAACG,WAAnB,IAAkCH,KAAK,CAACpB,UAAN,GAAmBD,gBAAgB,CAACuB,iBAA1E,EAA6F;AAC3F;AACD;;AACD,aAAKE,eAAL,CAAqB;AACnBlC,UAAAA,IAAI,EAAE8B,KADa;AAEnBf,UAAAA,UAAU,EAAVA;AAFmB,SAArB;;AAIA,YAAI,KAAKhB,OAAT,EAAkB;AAChB,eAAK6B,cAAL;AACD;;AACD,aAAKhB,MAAL,CAAYmB,QAAZ,GAAuBD,KAAK,CAACG,WAA7B;AACD;AACF;;;iCAIwC;AAAA,UAAjCvC,MAAiC,QAAjCA,MAAiC;AAAA,UAAzBD,KAAyB,QAAzBA,KAAyB;AAAA,8BAAlBM,OAAkB;AAAA,UAAlBA,OAAkB,6BAAR,KAAQ;;AACvC,UAAIN,KAAK,KAAK,KAAKA,KAAf,IAAwBC,MAAM,KAAK,KAAKA,MAA5C,EAAoD;AAClD,eAAO,KAAKU,UAAL,CAAgB;AACrBX,UAAAA,KAAK,EAALA,KADqB;AAErBC,UAAAA,MAAM,EAANA,MAFqB;AAGrBX,UAAAA,MAAM,EAAE,KAAKA,MAHQ;AAIrBa,UAAAA,IAAI,EAAE,KAAKA,IAJU;AAKrBC,UAAAA,UAAU,EAAE,KAAKA,UALI;AAMrBC,UAAAA,MAAM,EAAE,KAAKA,MANQ;AAOrBC,UAAAA,OAAO,EAAPA;AAPqB,SAAhB,CAAP;AASD;;AACD,aAAO,IAAP;AACD;;;qCAG2B;AAAA;;AAAA,UAAboC,MAAa,uEAAJ,EAAI;;AAC1B,UAAI,KAAKZ,OAAL,EAAJ,EAAoB;AAClBC,qBAAIC,IAAJ,oBAAqB,IAArB;;AACA,eAAO,IAAP;AACD;;AAED,WAAK1B,OAAL,GAAe,IAAf;AAEA,WAAKlB,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AACA,mCAAe,KAAKP,EAApB,EAAwBsD,MAAxB,EAAgC,YAAM;AACpC,QAAA,MAAI,CAACtD,EAAL,CAAQ+C,cAAR,CAAuB,MAAI,CAACvC,MAA5B;AACD,OAFD;AAGA,WAAKR,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,IAAjC;AACA,aAAO,IAAP;AACD;;;iCAwBY+C,O,EAAS;AACpB,WAAKC,uBAAL,CAA6B,SAA7B;;AADoB,4BAWhBD,OAXgB,CAIlB/C,MAJkB;AAAA,UAIlBA,MAJkB,gCAIT,KAAKA,MAJI;AAAA,4BAWhB+C,OAXgB,CAKlB7B,MALkB;AAAA,UAKlBA,MALkB,gCAKT,IALS;AAAA,2BAWhB6B,OAXgB,CAMlBE,KANkB;AAAA,UAMlBA,KANkB,+BAMV,CANU;AAAA,4BAWhBF,OAXgB,CAOlBrD,MAPkB;AAAA,UAOlBA,MAPkB,gCAOT,KAAKA,MAPI;AAAA,4BAWhBqD,OAXgB,CAQlBtC,MARkB;AAAA,UAQlBA,MARkB,gCAQT,KAAKA,MARI;AAAA,4BAWhBsC,OAXgB,CASlBG,MATkB;AAAA,UASlBA,MATkB,gCAST,CATS;AAAA,gCAWhBH,OAXgB,CAUlBrB,UAVkB;AAAA,UAUlBA,UAVkB,oCAUL,EAVK;AAAA,0BAoBhBqB,OApBgB,CAclBpC,IAdkB;AAAA,UAclBA,IAdkB,8BAcX,IAdW;AAAA,0BAoBhBoC,OApBgB,CAelBxC,IAfkB;AAAA,UAelBA,IAfkB,8BAeX,KAAKA,IAfM;AAAA,2BAoBhBwC,OApBgB,CAgBlB3C,KAhBkB;AAAA,UAgBlBA,KAhBkB,+BAgBV,KAAKA,KAhBK;AAAA,4BAoBhB2C,OApBgB,CAiBlB1C,MAjBkB;AAAA,UAiBlBA,MAjBkB,gCAiBT,KAAKA,MAjBI;AAAA,gCAoBhB0C,OApBgB,CAkBlBvC,UAlBkB;AAAA,UAkBlBA,UAlBkB,oCAkBL,KAAKA,UAlBA;AAAA,gCAoBhBuC,OApBgB,CAmBlBnB,UAnBkB;AAAA,UAmBlBA,UAnBkB,oCAmBL,KAnBK;;AAuBpB,UAAI,CAACjB,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGO,MAAP;AACD;;AAzBmB,mCA2B6B,KAAKW,iBAAL,CAAuB;AACtEnC,QAAAA,MAAM,EAANA,MADsE;AAEtEa,QAAAA,IAAI,EAAJA,IAFsE;AAGtEC,QAAAA,UAAU,EAAVA,UAHsE;AAItEoB,QAAAA,UAAU,EAAVA,UAJsE;AAKtEjB,QAAAA,IAAI,EAAJA,IALsE;AAMtEP,QAAAA,KAAK,EAALA,KANsE;AAOtEC,QAAAA,MAAM,EAANA;AAPsE,OAAvB,CA3B7B;;AA2BlBE,MAAAA,IA3BkB,0BA2BlBA,IA3BkB;AA2BZC,MAAAA,UA3BY,0BA2BZA,UA3BY;AA2BAoB,MAAAA,UA3BA,0BA2BAA,UA3BA;AA2BYxB,MAAAA,KA3BZ,0BA2BYA,KA3BZ;AA2BmBC,MAAAA,MA3BnB,0BA2BmBA,MA3BnB;AAAA,UAqCbb,EArCa,GAqCP,IArCO,CAqCbA,EArCa;AAsCpBA,MAAAA,EAAE,CAACyC,WAAH,CAAe,KAAKjC,MAApB,EAA4B,KAAKD,MAAjC;AAEA,UAAIoD,QAAQ,GAAG,IAAf;;AAxCoB,+BAyCA,KAAKC,YAAL,CAAkB;AAACzC,QAAAA,IAAI,EAAJA,IAAD;AAAOiB,QAAAA,UAAU,EAAVA;AAAP,OAAlB,CAzCA;;AAyClBjB,MAAAA,IAzCkB,sBAyClBA,IAzCkB;AAyCZwC,MAAAA,QAzCY,sBAyCZA,QAzCY;AA2CpB,UAAIE,GAAJ;AAEA,UAAIC,qBAAqB,GAAG,CAA5B;AAEA,mCAAe,KAAK9D,EAApB,EAAwBkC,UAAxB,EAAoC,YAAM;AACxC,gBAAQyB,QAAR;AACE,eAAK,MAAL;AACE3D,YAAAA,EAAE,CAAC+D,UAAH,CAAcvD,MAAd,EAAsBiD,KAAtB,EAA6BvD,MAA7B,EAAqCU,KAArC,EAA4CC,MAA5C,EAAoDI,MAApD,EAA4DD,UAA5D,EAAwED,IAAxE,EAA8EI,IAA9E;AACA;;AACF,eAAK,aAAL;AAIEnB,YAAAA,EAAE,CAAC+D,UAAH,CACEvD,MADF,EAEEiD,KAFF,EAGEvD,MAHF,EAIEU,KAJF,EAKEC,MALF,EAMEI,MANF,EAOED,UAPF,EAQED,IARF,EASEI,IATF,EAWEuC,MAXF;AAaA;;AACF,eAAK,QAAL;AAEEG,YAAAA,GAAG,GAAG,kCAAoB7D,EAApB,CAAN;AACA6D,YAAAA,GAAG,CAACG,UAAJ,QAAuC7C,IAAI,CAACZ,MAAL,IAAeY,IAAtD;AACA0C,YAAAA,GAAG,CAACE,UAAJ,CAAevD,MAAf,EAAuBiD,KAAvB,EAA8BvD,MAA9B,EAAsCU,KAAtC,EAA6CC,MAA7C,EAAqDI,MAArD,EAA6DD,UAA7D,EAAyED,IAAzE,EAA+E2C,MAA/E;AACAG,YAAAA,GAAG,CAACG,UAAJ,QAAuC,IAAvC;AACA;;AACF,eAAK,gBAAL;AACE,gBAAI,uBAAShE,EAAT,CAAJ,EAAkB;AAChBA,cAAAA,EAAE,CAAC+D,UAAH,CAAcvD,MAAd,EAAsBiD,KAAtB,EAA6BvD,MAA7B,EAAqCU,KAArC,EAA4CC,MAA5C,EAAoDI,MAApD,EAA4DD,UAA5D,EAAwED,IAAxE,EAA8EI,IAA9E;AACD,aAFD,MAEO;AACLnB,cAAAA,EAAE,CAAC+D,UAAH,CAAcvD,MAAd,EAAsBiD,KAAtB,EAA6BvD,MAA7B,EAAqCc,UAArC,EAAiDD,IAAjD,EAAuDI,IAAvD;AACD;;AACD;;AACF,eAAK,YAAL;AAAA,uDACwCA,IAAI,CAAC8C,OAAL,EADxC;AAAA;;AAAA;AACE,kEAAsD;AAAA;AAAA,oBAA1CC,UAA0C;AAAA,oBAA9BC,SAA8B;;AACpDnE,gBAAAA,EAAE,CAACoE,oBAAH,CACE5D,MADF,EAEE0D,UAFF,EAGEC,SAAS,CAACjE,MAHZ,EAIEiE,SAAS,CAACvD,KAJZ,EAKEuD,SAAS,CAACtD,MALZ,EAMEI,MANF,EAOEkD,SAAS,CAAChD,IAPZ;AASA2C,gBAAAA,qBAAqB,IAAIK,SAAS,CAACE,SAAnC;AACD;AAZH;AAAA;AAAA;AAAA;AAAA;;AAaE;;AACF;AACE,gCAAO,KAAP,EAAc,yBAAd;AAnDJ;AAqDD,OAtDD;;AAwDA,UAAIV,QAAQ,KAAK,YAAjB,EAA+B;AAC7B,aAAKW,qBAAL,CAA2BR,qBAA3B,EAAkD,SAAlD;AACD,OAFD,MAEO,IAAI3C,IAAI,IAAIA,IAAI,CAACoD,UAAjB,EAA6B;AAClC,aAAKD,qBAAL,CAA2BnD,IAAI,CAACoD,UAAhC,EAA4C,SAA5C;AACD,OAFM,MAEA;AAEL,YAAMC,QAAQ,GAAGC,qCAAqB,KAAKzD,UAA1B,KAAyC,CAA1D;AACA,YAAM0D,WAAW,GAAGC,2BAAW,KAAK5D,IAAhB,KAAyB,CAA7C;;AAEA,aAAKuD,qBAAL,CAA2B,KAAK1D,KAAL,GAAa,KAAKC,MAAlB,GAA2B2D,QAA3B,GAAsCE,WAAjE,EAA8E,SAA9E;AACD;;AAED,WAAK/D,MAAL,GAAc,IAAd;AAEA,aAAO,IAAP;AACD;;;2CA+CE;AAAA;;AAAA,+BAfDH,MAeC;AAAA,UAfDA,MAeC,6BAfQ,KAAKA,MAeb;AAAA,+BAdDkB,MAcC;AAAA,UAdDA,MAcC,6BAdQ,IAcR;AAAA,6BAbDP,IAaC;AAAA,UAbDA,IAaC,2BAbM,IAaN;AAAA,0BAZDyD,CAYC;AAAA,UAZDA,CAYC,wBAZG,CAYH;AAAA,0BAXDC,CAWC;AAAA,UAXDA,CAWC,wBAXG,CAWH;AAAA,8BAVDjE,KAUC;AAAA,UAVDA,KAUC,4BAVO,KAAKA,KAUZ;AAAA,+BATDC,MASC;AAAA,UATDA,MASC,6BATQ,KAAKA,MASb;AAAA,8BARD4C,KAQC;AAAA,UARDA,KAQC,4BARO,CAQP;AAAA,+BAPDvD,MAOC;AAAA,UAPDA,MAOC,6BAPQ,KAAKA,MAOb;AAAA,6BANDa,IAMC;AAAA,UANDA,IAMC,2BANM,KAAKA,IAMX;AAAA,mCALDC,UAKC;AAAA,UALDA,UAKC,iCALY,KAAKA,UAKjB;AAAA,mCAJDoB,UAIC;AAAA,UAJDA,UAIC,iCAJY,KAIZ;AAAA,+BAHDsB,MAGC;AAAA,UAHDA,MAGC,6BAHQ,CAGR;AAAA,+BAFDzC,MAEC;AAAA,UAFDA,MAEC,6BAFQ,KAAKA,MAEb;AAAA,mCADDiB,UACC;AAAA,UADDA,UACC,iCADY,EACZ;;AAAA,mCACgD,KAAKG,iBAAL,CAAuB;AACtEnC,QAAAA,MAAM,EAANA,MADsE;AAEtEa,QAAAA,IAAI,EAAJA,IAFsE;AAGtEC,QAAAA,UAAU,EAAVA,UAHsE;AAItEoB,QAAAA,UAAU,EAAVA,UAJsE;AAKtEjB,QAAAA,IAAI,EAAJA,IALsE;AAMtEP,QAAAA,KAAK,EAALA,KANsE;AAOtEC,QAAAA,MAAM,EAANA;AAPsE,OAAvB,CADhD;;AACCE,MAAAA,IADD,0BACCA,IADD;AACOC,MAAAA,UADP,0BACOA,UADP;AACmBoB,MAAAA,UADnB,0BACmBA,UADnB;AAC+BxB,MAAAA,KAD/B,0BAC+BA,KAD/B;AACsCC,MAAAA,MADtC,0BACsCA,MADtC;AAWD,0BAAO,KAAKC,KAAL,KAAe,CAAtB,EAAyB,2CAAzB;;AAGA,UAAI,CAACK,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGO,MAAP;AACD;;AAGD,UAAIP,IAAI,IAAIA,IAAI,CAACA,IAAjB,EAAuB;AACrB,YAAM2D,OAAO,GAAG3D,IAAhB;AACAA,QAAAA,IAAI,GAAG2D,OAAO,CAAC3D,IAAf;AACAP,QAAAA,KAAK,GAAGkE,OAAO,CAACC,KAAR,CAAc,CAAd,CAAR;AACAlE,QAAAA,MAAM,GAAGiE,OAAO,CAACC,KAAR,CAAc,CAAd,CAAT;AACD;;AAGD,UAAI5D,IAAI,YAAY6D,eAApB,EAA4B;AAC1B7D,QAAAA,IAAI,GAAGA,IAAI,CAACZ,MAAZ;AACD;;AAED,WAAKP,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AAEA,mCAAe,KAAKP,EAApB,EAAwBkC,UAAxB,EAAoC,YAAM;AAExC,YAAIE,UAAJ,EAAgB;AACd,UAAA,MAAI,CAACpC,EAAL,CAAQiF,uBAAR,CAAgCzE,MAAhC,EAAwCiD,KAAxC,EAA+CmB,CAA/C,EAAkDC,CAAlD,EAAqDjE,KAArD,EAA4DC,MAA5D,EAAoEX,MAApE,EAA4EiB,IAA5E;AACD,SAFD,MAEO,IAAIA,IAAI,KAAK,IAAb,EAAmB;AACxB,UAAA,MAAI,CAACnB,EAAL,CAAQkF,aAAR,CAAsB1E,MAAtB,EAA8BiD,KAA9B,EAAqCmB,CAArC,EAAwCC,CAAxC,EAA2CjE,KAA3C,EAAkDC,MAAlD,EAA0DG,UAA1D,EAAsED,IAAtE,EAA4E,IAA5E;AACD,SAFM,MAEA,IAAIoE,WAAW,CAACC,MAAZ,CAAmBjE,IAAnB,CAAJ,EAA8B;AAGnC,UAAA,MAAI,CAACnB,EAAL,CAAQkF,aAAR,CAAsB1E,MAAtB,EAA8BiD,KAA9B,EAAqCmB,CAArC,EAAwCC,CAAxC,EAA2CjE,KAA3C,EAAkDC,MAAlD,EAA0DG,UAA1D,EAAsED,IAAtE,EAA4EI,IAA5E,EAAkFuC,MAAlF;AACD,SAJM,MAIA,IAAIvC,IAAI,YAAYxB,WAApB,EAAiC;AAEtC,cAAMkE,GAAG,GAAG,kCAAoB,MAAI,CAAC7D,EAAzB,CAAZ;AAEA6D,UAAAA,GAAG,CAACG,UAAJ,QAAuC7C,IAAvC;AACA0C,UAAAA,GAAG,CAACqB,aAAJ,CAAkB1E,MAAlB,EAA0BiD,KAA1B,EAAiCmB,CAAjC,EAAoCC,CAApC,EAAuCjE,KAAvC,EAA8CC,MAA9C,EAAsDG,UAAtD,EAAkED,IAAlE,EAAwE2C,MAAxE;AACAG,UAAAA,GAAG,CAACG,UAAJ,QAAuC,IAAvC;AACD,SAPM,MAOA,IAAI,uBAAS,MAAI,CAAChE,EAAd,CAAJ,EAAuB;AAE5B,cAAM6D,GAAG,GAAG,kCAAoB,MAAI,CAAC7D,EAAzB,CAAZ;;AACA6D,UAAAA,GAAG,CAACqB,aAAJ,CAAkB1E,MAAlB,EAA0BiD,KAA1B,EAAiCmB,CAAjC,EAAoCC,CAApC,EAAuCjE,KAAvC,EAA8CC,MAA9C,EAAsDG,UAAtD,EAAkED,IAAlE,EAAwEI,IAAxE;AACD,SAJM,MAIA;AACL,UAAA,MAAI,CAACnB,EAAL,CAAQkF,aAAR,CAAsB1E,MAAtB,EAA8BiD,KAA9B,EAAqCmB,CAArC,EAAwCC,CAAxC,EAA2C7D,UAA3C,EAAuDD,IAAvD,EAA6DI,IAA7D;AACD;AACF,OAxBD;AA0BA,WAAKnB,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,IAAjC;AACD;;;sCAW0B;AAAA,UAAXP,IAAW,uEAAJ,EAAI;;AACzB0C,mBAAI0C,KAAJ,CACE,iGADF;;AAGA,aAAO,IAAP;AACD;;;oCAEe;AACd,aAAO,KAAKrF,EAAL,CAAQsF,YAAR,eAAP;AACD;;;2BAaoC;AAAA,UAAhC7E,WAAgC,uEAAlB,KAAKA,WAAa;AAAA,UAC5BT,EAD4B,GACtB,IADsB,CAC5BA,EAD4B;;AAGnC,UAAIS,WAAW,KAAKC,SAApB,EAA+B;AAC7B,aAAKD,WAAL,GAAmBA,WAAnB;AACAT,QAAAA,EAAE,CAACwC,aAAH,CAAiB,QAAc/B,WAA/B;AACD;;AAEDT,MAAAA,EAAE,CAACyC,WAAH,CAAe,KAAKjC,MAApB,EAA4B,KAAKD,MAAjC;AACA,aAAOE,WAAP;AACD;;;6BAEsC;AAAA,UAAhCA,WAAgC,uEAAlB,KAAKA,WAAa;AAAA,UAC9BT,EAD8B,GACxB,IADwB,CAC9BA,EAD8B;;AAGrC,UAAIS,WAAW,KAAKC,SAApB,EAA+B;AAC7B,aAAKD,WAAL,GAAmBA,WAAnB;AACAT,QAAAA,EAAE,CAACwC,aAAH,CAAiB,QAAc/B,WAA/B;AACD;;AAEDT,MAAAA,EAAE,CAACyC,WAAH,CAAe,KAAKjC,MAApB,EAA4B,IAA5B;AACA,aAAOC,WAAP;AACD;;;wCAIwC;AAAA,UAA3BU,IAA2B,SAA3BA,IAA2B;AAAA,mCAArBiB,UAAqB;AAAA,UAArBA,UAAqB,iCAAR,KAAQ;;AACvC,UAAIA,UAAJ,EAAgB;AACd,eAAO;AAACjB,UAAAA,IAAI,EAAJA,IAAD;AAAOwC,UAAAA,QAAQ,EAAE;AAAjB,SAAP;AACD;;AACD,UAAIxC,IAAI,KAAK,IAAb,EAAmB;AACjB,eAAO;AAACA,UAAAA,IAAI,EAAJA,IAAD;AAAOwC,UAAAA,QAAQ,EAAE;AAAjB,SAAP;AACD;;AACD,UAAIwB,WAAW,CAACC,MAAZ,CAAmBjE,IAAnB,CAAJ,EAA8B;AAC5B,eAAO;AAACA,UAAAA,IAAI,EAAJA,IAAD;AAAOwC,UAAAA,QAAQ,EAAE;AAAjB,SAAP;AACD;;AACD,UAAIxC,IAAI,YAAY6D,eAApB,EAA4B;AAC1B,eAAO;AAAC7D,UAAAA,IAAI,EAAEA,IAAI,CAACZ,MAAZ;AAAoBoD,UAAAA,QAAQ,EAAE;AAA9B,SAAP;AACD;;AACD,UAAIxC,IAAI,YAAYxB,WAApB,EAAiC;AAC/B,eAAO;AAACwB,UAAAA,IAAI,EAAJA,IAAD;AAAOwC,UAAAA,QAAQ,EAAE;AAAjB,SAAP;AACD;;AAED,aAAO;AAACxC,QAAAA,IAAI,EAAJA,IAAD;AAAOwC,QAAAA,QAAQ,EAAE;AAAjB,OAAP;AACD;;;sCA+EiB1D,I,EAAM;AAAA,UACfC,MADe,GACCD,IADD,CACfC,MADe;AAAA,UACPiB,IADO,GACClB,IADD,CACPkB,IADO;AAAA,UAEjBP,KAFiB,GAE8BX,IAF9B,CAEjBW,KAFiB;AAAA,UAEVC,MAFU,GAE8BZ,IAF9B,CAEVY,MAFU;AAAA,UAEFG,UAFE,GAE8Bf,IAF9B,CAEFe,UAFE;AAAA,UAEUD,IAFV,GAE8Bd,IAF9B,CAEUc,IAFV;AAAA,UAEgBqB,UAFhB,GAE8BnC,IAF9B,CAEgBmC,UAFhB;AAKtB,UAAMmD,aAAa,GAAGC,gCAAgBtF,MAAhB,CAAtB;AACAc,MAAAA,UAAU,GAAGA,UAAU,IAAKuE,aAAa,IAAIA,aAAa,CAACvE,UAA3D;AACAD,MAAAA,IAAI,GAAGA,IAAI,IAAKwE,aAAa,IAAIA,aAAa,CAACE,KAAd,CAAoB,CAApB,CAAjC;AAGArD,MAAAA,UAAU,GAAGA,UAAU,IAAKmD,aAAa,IAAIA,aAAa,CAACnD,UAA3D;;AAVsB,kCAYH,KAAKsD,gBAAL,CAAsBvE,IAAtB,EAA4BP,KAA5B,EAAmCC,MAAnC,CAZG;;AAYpBD,MAAAA,KAZoB,yBAYpBA,KAZoB;AAYbC,MAAAA,MAZa,yBAYbA,MAZa;AActB,aAAO;AAACG,QAAAA,UAAU,EAAVA,UAAD;AAAaD,QAAAA,IAAI,EAAJA,IAAb;AAAmBqB,QAAAA,UAAU,EAAVA,UAAnB;AAA+BxB,QAAAA,KAAK,EAALA,KAA/B;AAAsCC,QAAAA,MAAM,EAANA,MAAtC;AAA8CX,QAAAA,MAAM,EAANA,MAA9C;AAAsDiB,QAAAA,IAAI,EAAJA;AAAtD,OAAP;AACD;;;qCAGgBA,I,EAAMP,K,EAAOC,M,EAAQ;AACpC,UAAI8E,IAAJ;;AAEA,UAAI,OAAOC,SAAP,KAAqB,WAArB,IAAoCzE,IAAI,YAAYyE,SAAxD,EAAmE;AACjED,QAAAA,IAAI,GAAG;AAAC/E,UAAAA,KAAK,EAAEO,IAAI,CAACP,KAAb;AAAoBC,UAAAA,MAAM,EAAEM,IAAI,CAACN;AAAjC,SAAP;AACD,OAFD,MAEO,IAAI,OAAOgF,gBAAP,KAA4B,WAA5B,IAA2C1E,IAAI,YAAY0E,gBAA/D,EAAiF;AACtFF,QAAAA,IAAI,GAAG;AAAC/E,UAAAA,KAAK,EAAEO,IAAI,CAAC2E,YAAb;AAA2BjF,UAAAA,MAAM,EAAEM,IAAI,CAAC4E;AAAxC,SAAP;AACD,OAFM,MAEA,IAAI,OAAOC,iBAAP,KAA6B,WAA7B,IAA4C7E,IAAI,YAAY6E,iBAAhE,EAAmF;AACxFL,QAAAA,IAAI,GAAG;AAAC/E,UAAAA,KAAK,EAAEO,IAAI,CAACP,KAAb;AAAoBC,UAAAA,MAAM,EAAEM,IAAI,CAACN;AAAjC,SAAP;AACD,OAFM,MAEA,IAAI,OAAOoF,WAAP,KAAuB,WAAvB,IAAsC9E,IAAI,YAAY8E,WAA1D,EAAuE;AAC5EN,QAAAA,IAAI,GAAG;AAAC/E,UAAAA,KAAK,EAAEO,IAAI,CAACP,KAAb;AAAoBC,UAAAA,MAAM,EAAEM,IAAI,CAACN;AAAjC,SAAP;AACD,OAFM,MAEA,IAAI,OAAOe,gBAAP,KAA4B,WAA5B,IAA2CT,IAAI,YAAYS,gBAA/D,EAAiF;AACtF+D,QAAAA,IAAI,GAAG;AAAC/E,UAAAA,KAAK,EAAEO,IAAI,CAAC+E,UAAb;AAAyBrF,UAAAA,MAAM,EAAEM,IAAI,CAACgF;AAAtC,SAAP;AACD,OAFM,MAEA,IAAI,CAAChF,IAAL,EAAW;AAChBwE,QAAAA,IAAI,GAAG;AAAC/E,UAAAA,KAAK,EAAEA,KAAK,IAAI,CAAT,GAAaA,KAAb,GAAqB,CAA7B;AAAgCC,UAAAA,MAAM,EAAEA,MAAM,IAAI,CAAV,GAAcA,MAAd,GAAuB;AAA/D,SAAP;AACD,OAFM,MAEA;AACL8E,QAAAA,IAAI,GAAG;AAAC/E,UAAAA,KAAK,EAALA,KAAD;AAAQC,UAAAA,MAAM,EAANA;AAAR,SAAP;AACD;;AAED,0BAAO8E,IAAP,EAAa,gCAAb;AACA,0BACE/E,KAAK,KAAKF,SAAV,IAAuBiF,IAAI,CAAC/E,KAAL,KAAeA,KADxC,EAEE,qDAFF;AAIA,0BACEC,MAAM,KAAKH,SAAX,IAAwBiF,IAAI,CAAC9E,MAAL,KAAgBA,MAD1C,EAEE,uDAFF;AAKA,aAAO8E,IAAP;AACD;;;oCAIe;AACd,aAAO,KAAK3F,EAAL,CAAQoG,aAAR,EAAP;AACD;;;oCAEe;AACd,WAAKpG,EAAL,CAAQqG,aAAR,CAAsB,KAAK9F,MAA3B;;AACA,WAAKiD,uBAAL,CAA6B,SAA7B;AACD;;;kCAEa8C,K,EAAO;AACnB,cAAQA,KAAR;AACE;AACE,iBAAO,KAAK1F,KAAZ;;AACF;AACE,iBAAO,KAAKC,MAAZ;;AACF;AACE,eAAKb,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AACA,cAAMgG,KAAK,GAAG,KAAKvG,EAAL,CAAQwG,eAAR,CAAwB,KAAKhG,MAA7B,EAAqC8F,KAArC,CAAd;AACA,eAAKtG,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,IAAjC;AACA,iBAAO+F,KAAP;AATJ;AAWD;;;kCAEaD,K,EAAOG,K,EAAO;AAC1B,WAAKzG,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,KAAKD,MAAtC;AAGAkG,MAAAA,KAAK,GAAG,KAAKC,aAAL,CAAmBJ,KAAnB,EAA0BG,KAA1B,CAAR;;AAKA,cAAQH,KAAR;AACE;AACA;AACE,eAAKtG,EAAL,CAAQ2G,aAAR,CAAsB,KAAKpG,MAA3B,EAAmC+F,KAAnC,EAA0CG,KAA1C;AACA;;AAEF;AACA;AACE,8BAAO,KAAP;AACA;;AAEF;AACE,eAAKzG,EAAL,CAAQ4G,aAAR,CAAsB,KAAKpG,MAA3B,EAAmC8F,KAAnC,EAA0CG,KAA1C;AACA;AAbJ;;AAgBA,WAAKzG,EAAL,CAAQyC,WAAR,CAAoB,KAAKjC,MAAzB,EAAiC,IAAjC;AACA,aAAO,IAAP;AACD;;;8BAES;AACR,UAAI,uBAAS,KAAKR,EAAd,CAAJ,EAAuB;AAErB,eAAO,KAAP;AACD;;AAED,UAAI,CAAC,KAAKY,KAAN,IAAe,CAAC,KAAKC,MAAzB,EAAiC;AAC/B,eAAO,KAAP;AACD;;AACD,aAAO,CAAC,yBAAa,KAAKD,KAAlB,CAAD,IAA6B,CAAC,yBAAa,KAAKC,MAAlB,CAArC;AACD;;;mCAGcqB,U,EAAY;AACzB,UAAIA,UAAU,CAAC,KAAKlC,EAAL,CAAQ6G,kBAAT,CAAV,KAA2CnG,SAA/C,EAA0D;AAExDwB,QAAAA,UAAU,CAAC,KAAKlC,EAAL,CAAQ6G,kBAAT,CAAV,GAAyC,KAAK7G,EAAL,CAAQ8G,MAAjD;AACD;;AACD,UAAI5E,UAAU,CAAC,KAAKlC,EAAL,CAAQ+G,cAAT,CAAV,KAAuCrG,SAA3C,EAAsD;AAEpDwB,QAAAA,UAAU,CAAC,KAAKlC,EAAL,CAAQ+G,cAAT,CAAV,GAAqC,KAAK/G,EAAL,CAAQgH,aAA7C;AACD;;AACD,UAAI9E,UAAU,CAAC,KAAKlC,EAAL,CAAQiH,cAAT,CAAV,KAAuCvG,SAA3C,EAAsD;AAEpDwB,QAAAA,UAAU,CAAC,KAAKlC,EAAL,CAAQiH,cAAT,CAAV,GAAqC,KAAKjH,EAAL,CAAQgH,aAA7C;AACD;AACF;;;kCAEaV,K,EAAOG,K,EAAO;AAC1B,UAAI,KAAK/D,OAAL,EAAJ,EAAoB;AAClB,gBAAQ4D,KAAR;AACE;AACE,gBAAI5G,gBAAgB,CAACwH,OAAjB,CAAyBT,KAAzB,MAAoC,CAAC,CAAzC,EAA4C;AAE1CA,cAAAA,KAAK,OAAL;AACD;;AACD;;AACF;AACA;AACE,gBAAIA,KAAK,UAAT,EAAgC;AAE9BA,cAAAA,KAAK,QAAL;AACD;;AACD;;AACF;AACE;AAfJ;AAiBD;;AACD,aAAOA,KAAP;AACD;;;EA9wBkCU,iB","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, withParameters, log} from '@luma.gl/gltools';\n\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {\n TEXTURE_FORMATS,\n DATA_FORMAT_CHANNELS,\n TYPE_SIZES,\n isFormatSupported,\n isLinearFilteringSupported\n} from './texture-formats';\nimport {assert} from '../utils/assert';\nimport {uid, isPowerOfTwo} from '../utils/utils';\n\n// Supported min filters for NPOT texture.\nconst NPOT_MIN_FILTERS = [GL.LINEAR, GL.NEAREST];\n\n// Polyfill\n// Note (Tarek): Do we really need to support this API?\nconst WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};\n\nexport default class Texture extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Texture';\n }\n static isSupported(gl, opts = {}) {\n const {format, linearFiltering} = opts;\n let supported = true;\n if (format) {\n supported = supported && isFormatSupported(gl, format);\n supported = supported && (!linearFiltering || isLinearFilteringSupported(gl, format));\n }\n return supported;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n constructor(gl, props) {\n const {\n id = uid('texture'),\n handle,\n target\n // , magFilter, minFilter, wrapS, wrapT\n } = props;\n\n super(gl, {id, handle});\n\n this.target = target;\n this.textureUnit = undefined;\n\n // Program.draw() checks the loaded flag of all textures to avoid\n // Textures that are still loading from promises\n // Set to true as soon as texture has been initialized with valid data\n this.loaded = false;\n\n this.width = undefined;\n this.height = undefined;\n this.depth = undefined;\n this.format = undefined;\n this.type = undefined;\n this.dataFormat = undefined;\n this.border = undefined;\n this.textureUnit = undefined;\n this.mipmaps = undefined;\n }\n\n toString() {\n return `Texture(${this.id},${this.width}x${this.height})`;\n }\n\n /* eslint-disable max-len, max-statements */\n initialize(props = {}) {\n let data = props.data;\n\n if (data instanceof Promise) {\n data.then(resolvedImageData =>\n this.initialize(\n Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })\n )\n );\n return this;\n }\n const isVideo = typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement;\n // @ts-ignore\n if (isVideo && data.readyState < HTMLVideoElement.HAVE_METADATA) {\n this._video = null; // Declare member before the object is sealed\n data.addEventListener('loadeddata', () => this.initialize(props));\n return this;\n }\n\n const {\n pixels = null,\n format = GL.RGBA,\n border = 0,\n recreate = false,\n parameters = {},\n pixelStore = {},\n textureUnit = undefined\n } = props;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n // TODO - This looks backwards? Commenting out for now until we decide\n // which prop to use\n // log.deprecated('data', 'pixels')();\n data = pixels;\n }\n\n let {width, height, dataFormat, type, compressed = false, mipmaps = true} = props;\n const {depth = 0} = props;\n\n // Deduce width and height\n ({width, height, compressed, dataFormat, type} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n // Store opts for accessors\n this.width = width;\n this.height = height;\n this.depth = depth;\n this.format = format;\n this.type = type;\n this.dataFormat = dataFormat;\n this.border = border;\n this.textureUnit = textureUnit;\n\n if (Number.isFinite(this.textureUnit)) {\n this.gl.activeTexture(GL.TEXTURE0 + this.textureUnit);\n this.gl.bindTexture(this.target, this.handle);\n }\n\n if (mipmaps && this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n mipmaps = false;\n\n this._updateForNPOT(parameters);\n }\n\n this.mipmaps = mipmaps;\n\n this.setImageData({\n data,\n width,\n height,\n depth,\n format,\n type,\n dataFormat,\n border,\n mipmaps,\n parameters: pixelStore,\n compressed\n });\n\n if (mipmaps) {\n this.generateMipmap();\n }\n\n // Set texture sampler parameters\n this.setParameters(parameters);\n\n // TODO - Store data to enable auto recreate on context loss\n if (recreate) {\n this.data = data;\n }\n if (isVideo) {\n this._video = {\n video: data,\n parameters,\n // @ts-ignore\n lastTime: data.readyState >= HTMLVideoElement.HAVE_CURRENT_DATA ? data.currentTime : -1\n };\n }\n\n return this;\n }\n\n update() {\n if (this._video) {\n const {video, parameters, lastTime} = this._video;\n // @ts-ignore\n if (lastTime === video.currentTime || video.readyState < HTMLVideoElement.HAVE_CURRENT_DATA) {\n return;\n }\n this.setSubImageData({\n data: video,\n parameters\n });\n if (this.mipmaps) {\n this.generateMipmap();\n }\n this._video.lastTime = video.currentTime;\n }\n }\n\n // If size has changed, reinitializes with current format\n // note clears image and mipmaps\n resize({height, width, mipmaps = false}) {\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n format: this.format,\n type: this.type,\n dataFormat: this.dataFormat,\n border: this.border,\n mipmaps\n });\n }\n return this;\n }\n\n // Call to regenerate mipmaps after modifying texture(s)\n generateMipmap(params = {}) {\n if (this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n return this;\n }\n\n this.mipmaps = true;\n\n this.gl.bindTexture(this.target, this.handle);\n withParameters(this.gl, params, () => {\n this.gl.generateMipmap(this.target);\n });\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n /*\n * Allocates storage\n * @param {*} pixels -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} width -\n * @param {GLint} height -\n * @param {GLint} mipMapLevel -\n * @param {GLenum} format - format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n /* eslint-disable max-len, max-statements, complexity */\n setImageData(options) {\n this._trackDeallocatedMemory('Texture');\n\n const {\n target = this.target,\n pixels = null,\n level = 0,\n format = this.format,\n border = this.border,\n offset = 0,\n parameters = {}\n } = options;\n\n let {\n data = null,\n type = this.type,\n width = this.width,\n height = this.height,\n dataFormat = this.dataFormat,\n compressed = false\n } = options;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n const {gl} = this;\n gl.bindTexture(this.target, this.handle);\n\n let dataType = null;\n ({data, dataType} = this._getDataType({data, compressed}));\n\n let gl2;\n\n let compressedTextureSize = 0;\n\n withParameters(this.gl, parameters, () => {\n switch (dataType) {\n case 'null':\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n break;\n case 'typed-array':\n // Looks like this assert is not necessary, as offset is ignored under WebGL1\n // assert((offset === 0 || isWebGL2(gl)), 'offset supported in WebGL2 only');\n // @ts-ignore\n gl.texImage2D(\n target,\n level,\n format,\n width,\n height,\n border,\n dataFormat,\n type,\n data,\n // @ts-ignore\n offset\n );\n break;\n case 'buffer':\n // WebGL2 enables creating textures directly from a WebGL buffer\n gl2 = assertWebGL2Context(gl);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);\n gl2.texImage2D(target, level, format, width, height, border, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n break;\n case 'browser-object':\n if (isWebGL2(gl)) {\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n } else {\n gl.texImage2D(target, level, format, dataFormat, type, data);\n }\n break;\n case 'compressed':\n for (const [levelIndex, levelData] of data.entries()) {\n gl.compressedTexImage2D(\n target,\n levelIndex,\n levelData.format,\n levelData.width,\n levelData.height,\n border,\n levelData.data\n );\n compressedTextureSize += levelData.levelSize;\n }\n break;\n default:\n assert(false, 'Unknown image data type');\n }\n });\n\n if (dataType === 'compressed') {\n this._trackAllocatedMemory(compressedTextureSize, 'Texture');\n } else if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(this.width * this.height * channels * channelSize, 'Texture');\n }\n\n this.loaded = true;\n\n return this;\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Redefines an area of an existing texture\n * Note: does not allocate storage\n */\n /*\n * Redefines an area of an existing texture\n * @param {*} pixels, data -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} x - xOffset from where texture to be updated\n * @param {GLint} y - yOffset from where texture to be updated\n * @param {GLint} width - width of the sub image to be updated\n * @param {GLint} height - height of the sub image to be updated\n * @param {GLint} level - mip level to be updated\n * @param {GLenum} format - internal format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer or ArrayBufferView\n * @param {GLenum} dataFormat - format of image data.\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n setSubImageData({\n target = this.target,\n pixels = null,\n data = null,\n x = 0,\n y = 0,\n width = this.width,\n height = this.height,\n level = 0,\n format = this.format,\n type = this.type,\n dataFormat = this.dataFormat,\n compressed = false,\n offset = 0,\n border = this.border,\n parameters = {}\n }) {\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n assert(this.depth === 0, 'texSubImage not supported for 3D textures');\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n // Support ndarrays\n if (data && data.data) {\n const ndarray = data;\n data = ndarray.data;\n width = ndarray.shape[0];\n height = ndarray.shape[1];\n }\n\n // Support buffers\n if (data instanceof Buffer) {\n data = data.handle;\n }\n\n this.gl.bindTexture(this.target, this.handle);\n\n withParameters(this.gl, parameters, () => {\n // TODO - x,y parameters\n if (compressed) {\n this.gl.compressedTexSubImage2D(target, level, x, y, width, height, format, data);\n } else if (data === null) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);\n } else if (ArrayBuffer.isView(data)) {\n // const gl2 = assertWebGL2Context(this.gl);\n // @ts-ignore last offset parameter is ignored under WebGL1\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);\n } else if (data instanceof WebGLBuffer) {\n // WebGL2 allows us to create texture directly from a WebGL buffer\n const gl2 = assertWebGL2Context(this.gl);\n // This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n } else if (isWebGL2(this.gl)) {\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n const gl2 = assertWebGL2Context(this.gl);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);\n } else {\n this.gl.texSubImage2D(target, level, x, y, dataFormat, type, data);\n }\n });\n\n this.gl.bindTexture(this.target, null);\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Defines a two-dimensional texture image or cube-map texture image with\n * pixels from the current framebuffer (rather than from client memory).\n * (gl.copyTexImage2D wrapper)\n *\n * Note that binding a texture into a Framebuffer's color buffer and\n * rendering can be faster.\n */\n copyFramebuffer(opts = {}) {\n log.error(\n 'Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})'\n )();\n return null;\n }\n\n getActiveUnit() {\n return this.gl.getParameter(GL.ACTIVE_TEXTURE) - GL.TEXTURE0;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n\n bind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, this.handle);\n return textureUnit;\n }\n\n unbind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, null);\n return textureUnit;\n }\n\n // PRIVATE METHODS\n\n _getDataType({data, compressed = false}) {\n if (compressed) {\n return {data, dataType: 'compressed'};\n }\n if (data === null) {\n return {data, dataType: 'null'};\n }\n if (ArrayBuffer.isView(data)) {\n return {data, dataType: 'typed-array'};\n }\n if (data instanceof Buffer) {\n return {data: data.handle, dataType: 'buffer'};\n }\n if (data instanceof WebGLBuffer) {\n return {data, dataType: 'buffer'};\n }\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n return {data, dataType: 'browser-object'};\n }\n\n /* Copied from texture-2d.js\n // WebGL2\n setPixels(opts = {}) {\n const {\n buffer,\n width = null,\n height = null,\n mipmapLevel = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n\n // This signature of texImage2D uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, buffer.target);\n // And as always, we must also bind the texture itself\n this.bind();\n\n gl.texImage2D(gl.TEXTURE_2D,\n mipmapLevel, format, width, height, border, format, type, buffer.target);\n\n this.unbind();\n gl.bindBuffer(GL.GL.PIXEL_UNPACK_BUFFER, null);\n return this;\n }\n\n setImageDataFromCompressedBuffer(opts) {\n const {\n buffer,\n // offset = 0,\n width = null,\n height = null,\n mipmapLevel = 0,\n internalFormat = GL.RGBA,\n // format = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n gl.compressedTexImage2D(this.target,\n mipmapLevel, internalFormat, width, height, border, buffer);\n // gl.compressedTexSubImage2D(target,\n // level, xoffset, yoffset, width, height, format, ArrayBufferView? pixels);\n return this;\n }\n\n copySubImage(opts) {\n const {\n // pixels,\n // offset = 0,\n // x,\n // y,\n // width,\n // height,\n // mipmapLevel = 0,\n // internalFormat = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n // border = 0\n } = opts;\n\n // if (pixels instanceof ArrayBufferView) {\n // gl.texSubImage2D(target, level, x, y, width, height, format, type, pixels);\n // }\n // gl.texSubImage2D(target, level, x, y, format, type, ? pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLImageElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLCanvasElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLVideoElement pixels);\n // // Additional signature in a WebGL 2 context:\n // gl.texSubImage2D(target, level, x, y, format, type, GLintptr offset);\n }\n */\n\n // HELPER METHODS\n\n _deduceParameters(opts) {\n const {format, data} = opts;\n let {width, height, dataFormat, type, compressed} = opts;\n\n // Deduce format and type from format\n const textureFormat = TEXTURE_FORMATS[format];\n dataFormat = dataFormat || (textureFormat && textureFormat.dataFormat);\n type = type || (textureFormat && textureFormat.types[0]);\n\n // Deduce compression from format\n compressed = compressed || (textureFormat && textureFormat.compressed);\n\n ({width, height} = this._deduceImageSize(data, width, height));\n\n return {dataFormat, type, compressed, width, height, format, data};\n }\n\n // eslint-disable-next-line complexity\n _deduceImageSize(data, width, height) {\n let size;\n\n if (typeof ImageData !== 'undefined' && data instanceof ImageData) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {\n size = {width: data.naturalWidth, height: data.naturalHeight};\n } else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {\n size = {width: data.width, height: data.height};\n } else if (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {\n size = {width: data.videoWidth, height: data.videoHeight};\n } else if (!data) {\n size = {width: width >= 0 ? width : 1, height: height >= 0 ? height : 1};\n } else {\n size = {width, height};\n }\n\n assert(size, 'Could not deduced texture size');\n assert(\n width === undefined || size.width === width,\n 'Deduced texture width does not match supplied width'\n );\n assert(\n height === undefined || size.height === height,\n 'Deduced texture height does not match supplied height'\n );\n\n return size;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createTexture();\n }\n\n _deleteHandle() {\n this.gl.deleteTexture(this.handle);\n this._trackDeallocatedMemory('Texture');\n }\n\n _getParameter(pname) {\n switch (pname) {\n case GL.TEXTURE_WIDTH:\n return this.width;\n case GL.TEXTURE_HEIGHT:\n return this.height;\n default:\n this.gl.bindTexture(this.target, this.handle);\n const value = this.gl.getTexParameter(this.target, pname);\n this.gl.bindTexture(this.target, null);\n return value;\n }\n }\n\n _setParameter(pname, param) {\n this.gl.bindTexture(this.target, this.handle);\n\n // NOTE: Apply NPOT workaround\n param = this._getNPOTParam(pname, param);\n\n // Apparently there are some integer/float conversion rules that made\n // the WebGL committe expose two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n switch (pname) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.gl.texParameterf(this.handle, pname, param);\n break;\n\n case GL.TEXTURE_WIDTH:\n case GL.TEXTURE_HEIGHT:\n assert(false);\n break;\n\n default:\n this.gl.texParameteri(this.target, pname, param);\n break;\n }\n\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n _isNPOT() {\n if (isWebGL2(this.gl)) {\n // NPOT restriction is only for WebGL1\n return false;\n }\n // Width and height not available, consider it is not NPOT texture\n if (!this.width || !this.height) {\n return false;\n }\n return !isPowerOfTwo(this.width) || !isPowerOfTwo(this.height);\n }\n\n // Update default settings which are not supported by NPOT textures.\n _updateForNPOT(parameters) {\n if (parameters[this.gl.TEXTURE_MIN_FILTER] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;\n }\n if (parameters[this.gl.TEXTURE_WRAP_S] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\n }\n if (parameters[this.gl.TEXTURE_WRAP_T] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_T to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\n }\n }\n\n _getNPOTParam(pname, param) {\n if (this._isNPOT()) {\n switch (pname) {\n case GL.TEXTURE_MIN_FILTER:\n if (NPOT_MIN_FILTERS.indexOf(param) === -1) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n param = GL.LINEAR;\n }\n break;\n case GL.TEXTURE_WRAP_S:\n case GL.TEXTURE_WRAP_T:\n if (param !== GL.CLAMP_TO_EDGE) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, ${getKey(this.gl, pname)} to CLAMP_TO_EDGE`)();\n param = GL.CLAMP_TO_EDGE;\n }\n break;\n default:\n break;\n }\n }\n return param;\n }\n}\n"],"file":"texture.js"}
|
|
@@ -36,7 +36,12 @@ var TransformFeedback = function (_Resource) {
|
|
|
36
36
|
|
|
37
37
|
var _super = _createSuper(TransformFeedback);
|
|
38
38
|
|
|
39
|
-
(0, _createClass2.default)(TransformFeedback,
|
|
39
|
+
(0, _createClass2.default)(TransformFeedback, [{
|
|
40
|
+
key: Symbol.toStringTag,
|
|
41
|
+
get: function get() {
|
|
42
|
+
return 'TransformFeedback';
|
|
43
|
+
}
|
|
44
|
+
}], [{
|
|
40
45
|
key: "isSupported",
|
|
41
46
|
value: function isSupported(gl) {
|
|
42
47
|
return (0, _gltools.isWebGL2)(gl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/transform-feedback.js"],"names":["TransformFeedback","gl","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","_getBufferParams","buffer","byteSize","byteOffset","log","warn","id","_bindBuffer","primitiveMode","bindTransformFeedback","handle","_bindBuffers","beginTransformFeedback","endTransformFeedback","Buffer","undefined","byteLength","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","bindBufferRange","createTransformFeedback","deleteTransformFeedback","Resource"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isObjectEmpty} from '../utils/utils';\n\n// NOTE: The `bindOnUse` flag is a major workaround:\n// See https://github.com/KhronosGroup/WebGL/issues/2346\n\nexport default class TransformFeedback extends Resource {\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n super(gl, props);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props = {}) {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(() => `${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-ignore\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-ignore\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-ignore\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-ignore\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-ignore\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-ignore\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n"],"file":"transform-feedback.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/transform-feedback.js"],"names":["TransformFeedback","Symbol","toStringTag","gl","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","_getBufferParams","buffer","byteSize","byteOffset","log","warn","id","_bindBuffer","primitiveMode","bindTransformFeedback","handle","_bindBuffers","beginTransformFeedback","endTransformFeedback","Buffer","undefined","byteLength","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","bindBufferRange","createTransformFeedback","deleteTransformFeedback","Resource"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isObjectEmpty} from '../utils/utils';\n\n// NOTE: The `bindOnUse` flag is a major workaround:\n// See https://github.com/KhronosGroup/WebGL/issues/2346\n\nexport default class TransformFeedback extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'TransformFeedback';\n }\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n super(gl, props);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props = {}) {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(() => `${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-ignore\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-ignore\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-ignore\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-ignore\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-ignore\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-ignore\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n"],"file":"transform-feedback.js"}
|
|
@@ -44,7 +44,12 @@ var VertexArrayObject = function (_Resource) {
|
|
|
44
44
|
|
|
45
45
|
var _super = _createSuper(VertexArrayObject);
|
|
46
46
|
|
|
47
|
-
(0, _createClass2.default)(VertexArrayObject,
|
|
47
|
+
(0, _createClass2.default)(VertexArrayObject, [{
|
|
48
|
+
key: Symbol.toStringTag,
|
|
49
|
+
get: function get() {
|
|
50
|
+
return 'VertexArrayObject';
|
|
51
|
+
}
|
|
52
|
+
}], [{
|
|
48
53
|
key: "isSupported",
|
|
49
54
|
value: function isSupported(gl) {
|
|
50
55
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/vertex-array-object.js"],"names":["ERR_ELEMENTS","VertexArrayObject","gl","options","constantAttributeZero","luma","defaultVertexArray","handle","isDefaultArray","MAX_ATTRIBUTES","getParameter","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","Object","assign","buffer","bufferValue","gl2","initialize","seal","delete","props","setProps","elementBuffer","target","bind","bindBuffer","accessor","setElementBuffer","size","type","stride","offset","normalized","integer","divisor","Number","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","isSupported","disableVertexAttribArray","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","Buffer","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","arrayValue","Array","isArray","v1","v2","i","createVertexArray","deleteVertexArray","elements","bindVertexArray","pname","isFinite","getVertexAttribOffset","getVertexAttrib","getMaxAttributes","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","Resource"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils/assert';\nimport {getBrowser} from 'probe.gl';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\nexport default class VertexArrayObject extends Resource {\n static isSupported(gl, options = {}) {\n // Attribute 0 can not be disable on most desktop OpenGL based browsers\n // and on iOS Safari browser.\n if (options.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n // Returns the global (null) vertex array object. Exists even when no extension available\n // TODO(Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n static getDefaultArray(gl) {\n gl.luma = gl.luma || {};\n if (!gl.luma.defaultVertexArray) {\n gl.luma.defaultVertexArray = new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n }\n return gl.luma.defaultVertexArray;\n }\n\n static getMaxAttributes(gl) {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n // Note: Constants are stored globally on the WebGL context, not the VAO\n // So they need to be updated before every render\n // TODO - use known type (in configuration or passed in) to allow non-typed arrays?\n // TODO - remember/cache values to avoid setting them unnecessarily?\n static setConstant(gl, location, array) {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(gl, location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(gl, location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // Create a VertexArray\n constructor(gl, opts = {}) {\n // Use program's id if program but no id is supplied\n const id = opts.id || (opts.program && opts.program.id);\n super(gl, Object.assign({}, opts, {id}));\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts.isDefaultArray || false;\n\n /** @type {WebGL2RenderingContext} */\n this.gl2 = gl;\n\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n delete() {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES() {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n initialize(props = {}) {\n return this.setProps(props);\n }\n\n setProps(props) {\n // TODO: decide which props should be supported\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n // Set a location in vertex attributes array to a bufferk, enables the location, sets divisor\n setBuffer(location, buffer, accessor) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n // Enabling an attribute location makes it reference the currently bound buffer\n // Disabling an attribute location makes it reference the global constant value\n // TODO - handle single values for size 1 attributes?\n // TODO - convert classic arrays based on known type?\n enable(location, enable = true) {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(\n () =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n // Provide a means to create a buffer that is equivalent to a constant.\n // NOTE: Desktop OpenGL cannot disable attribute 0.\n // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n // this-has-significant-performance-penalt\n getConstantBuffer(elementCount, value) {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl, location, array) {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1iv(location, array);\n break;\n case 2:\n gl.vertexAttribI2iv(location, array);\n break;\n case 3:\n gl.vertexAttribI3iv(location, array);\n break;\n case 4:\n gl.vertexAttribI4iv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantUintArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1uiv(location, array);\n break;\n case 2:\n gl.vertexAttribI2uiv(location, array);\n break;\n case 3:\n gl.vertexAttribI3uiv(location, array);\n break;\n case 4:\n gl.vertexAttribI4uiv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n /** @type {WebGL2RenderingContext} */\n // @ts-ignore\n const gl2 = this.gl;\n return gl2.createVertexArray();\n }\n\n _deleteHandle(handle) {\n this.gl2.deleteVertexArray(handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle) {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/vertex-array-object.js"],"names":["ERR_ELEMENTS","VertexArrayObject","Symbol","toStringTag","gl","options","constantAttributeZero","luma","defaultVertexArray","handle","isDefaultArray","MAX_ATTRIBUTES","getParameter","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","Object","assign","buffer","bufferValue","gl2","initialize","seal","delete","props","setProps","elementBuffer","target","bind","bindBuffer","accessor","setElementBuffer","size","type","stride","offset","normalized","integer","divisor","Number","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","isSupported","disableVertexAttribArray","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","Buffer","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","arrayValue","Array","isArray","v1","v2","i","createVertexArray","deleteVertexArray","elements","bindVertexArray","pname","isFinite","getVertexAttribOffset","getVertexAttrib","getMaxAttributes","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","Resource"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils/assert';\nimport {getBrowser} from 'probe.gl';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\nexport default class VertexArrayObject extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'VertexArrayObject';\n }\n static isSupported(gl, options = {}) {\n // Attribute 0 can not be disable on most desktop OpenGL based browsers\n // and on iOS Safari browser.\n if (options.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n // Returns the global (null) vertex array object. Exists even when no extension available\n // TODO(Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n static getDefaultArray(gl) {\n gl.luma = gl.luma || {};\n if (!gl.luma.defaultVertexArray) {\n gl.luma.defaultVertexArray = new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n }\n return gl.luma.defaultVertexArray;\n }\n\n static getMaxAttributes(gl) {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n // Note: Constants are stored globally on the WebGL context, not the VAO\n // So they need to be updated before every render\n // TODO - use known type (in configuration or passed in) to allow non-typed arrays?\n // TODO - remember/cache values to avoid setting them unnecessarily?\n static setConstant(gl, location, array) {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(gl, location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(gl, location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // Create a VertexArray\n constructor(gl, opts = {}) {\n // Use program's id if program but no id is supplied\n const id = opts.id || (opts.program && opts.program.id);\n super(gl, Object.assign({}, opts, {id}));\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts.isDefaultArray || false;\n\n /** @type {WebGL2RenderingContext} */\n this.gl2 = gl;\n\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n delete() {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES() {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n initialize(props = {}) {\n return this.setProps(props);\n }\n\n setProps(props) {\n // TODO: decide which props should be supported\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n // Set a location in vertex attributes array to a bufferk, enables the location, sets divisor\n setBuffer(location, buffer, accessor) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n // Enabling an attribute location makes it reference the currently bound buffer\n // Disabling an attribute location makes it reference the global constant value\n // TODO - handle single values for size 1 attributes?\n // TODO - convert classic arrays based on known type?\n enable(location, enable = true) {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(\n () =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n // Provide a means to create a buffer that is equivalent to a constant.\n // NOTE: Desktop OpenGL cannot disable attribute 0.\n // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n // this-has-significant-performance-penalt\n getConstantBuffer(elementCount, value) {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl, location, array) {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1iv(location, array);\n break;\n case 2:\n gl.vertexAttribI2iv(location, array);\n break;\n case 3:\n gl.vertexAttribI3iv(location, array);\n break;\n case 4:\n gl.vertexAttribI4iv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantUintArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1uiv(location, array);\n break;\n case 2:\n gl.vertexAttribI2uiv(location, array);\n break;\n case 3:\n gl.vertexAttribI3uiv(location, array);\n break;\n case 4:\n gl.vertexAttribI4uiv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n /** @type {WebGL2RenderingContext} */\n // @ts-ignore\n const gl2 = this.gl;\n return gl2.createVertexArray();\n }\n\n _deleteHandle(handle) {\n this.gl2.deleteVertexArray(handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle) {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
|
package/dist/es5/init.js
CHANGED
|
@@ -17,7 +17,7 @@ var _probe = require("probe.gl");
|
|
|
17
17
|
|
|
18
18
|
var _env = require("@probe.gl/env");
|
|
19
19
|
|
|
20
|
-
var VERSION = typeof "8.5.
|
|
20
|
+
var VERSION = typeof "8.5.14" !== 'undefined' ? "8.5.14" : 'untranspiled source';
|
|
21
21
|
var STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';
|
|
22
22
|
|
|
23
23
|
var StatsManager = function () {
|
|
@@ -27,6 +27,10 @@ const PROP_CHECKS_SET_PROPS = {
|
|
|
27
27
|
removedProps: DEPRECATED_PROPS
|
|
28
28
|
};
|
|
29
29
|
export default class Buffer extends Resource {
|
|
30
|
+
get [Symbol.toStringTag]() {
|
|
31
|
+
return 'Buffer';
|
|
32
|
+
}
|
|
33
|
+
|
|
30
34
|
constructor(gl, props = {}) {
|
|
31
35
|
super(gl, props);
|
|
32
36
|
this.stubRemovedMethods('Buffer', 'v6.0', ['layout', 'setLayout', 'getIndexedParameter']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/buffer.js"],"names":["Resource","Accessor","getGLTypeFromTypedArray","getTypedArrayFromGLType","assertWebGL2Context","log","assert","checkProps","DEBUG_DATA_LENGTH","DEPRECATED_PROPS","offset","stride","type","size","divisor","normalized","integer","instanced","isInstanced","PROP_CHECKS_INITIALIZE","removedProps","replacedProps","bytes","deprecatedProps","PROP_CHECKS_SET_PROPS","Buffer","constructor","gl","props","stubRemovedMethods","target","webgl2","initialize","Object","seal","getElementCount","accessor","Math","round","byteLength","getBytesPerElement","getVertexCount","getBytesPerVertex","ArrayBuffer","isView","data","Number","isFinite","usage","debugData","setAccessor","assign","_setData","_setByteLength","setProps","buffer","reallocate","bytesUsed","setData","subData","srcOffset","length","bindBuffer","handle","undefined","bufferSubData","_inferType","copyData","sourceBuffer","readOffset","writeOffset","copyBufferSubData","getData","dstData","srcByteOffset","dstOffset","ArrayType","clamped","sourceAvailableElementCount","_getAvailableElementCount","dstElementOffset","dstAvailableElementCount","dstElementCount","min","copyElementCount","getBufferSubData","bind","index","bindBufferRange","bindBufferBase","unbind","isIndexedBuffer","getDebugData","changed","invalidateDebugData","_trackDeallocatedMemory","_getTarget","bufferData","slice","_trackAllocatedMemory","Float32Array","sourceElementOffset","BYTES_PER_ELEMENT","_createHandle","createBuffer","_deleteHandle","deleteBuffer","_getParameter","pname","value","getBufferParameter","deprecated","setByteLength","updateAccessor","opts"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Accessor from './accessor';\nimport {getGLTypeFromTypedArray, getTypedArrayFromGLType} from '../webgl-utils/typed-array-utils';\nimport {assertWebGL2Context, log} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\nimport {checkProps} from '../utils/check-props';\n\nconst DEBUG_DATA_LENGTH = 10;\n\n// Shared prop checks for constructor and setProps\nconst DEPRECATED_PROPS = {\n offset: 'accessor.offset',\n stride: 'accessor.stride',\n type: 'accessor.type',\n size: 'accessor.size',\n divisor: 'accessor.divisor',\n normalized: 'accessor.normalized',\n integer: 'accessor.integer',\n instanced: 'accessor.divisor',\n isInstanced: 'accessor.divisor'\n};\n\n// Prop checks for constructor\nconst PROP_CHECKS_INITIALIZE = {\n removedProps: {},\n replacedProps: {\n bytes: 'byteLength'\n },\n // new Buffer() with individual accessor props is still used in apps, emit warnings\n deprecatedProps: DEPRECATED_PROPS\n};\n\n// Prop checks for setProps\nconst PROP_CHECKS_SET_PROPS = {\n // Buffer.setProps() with individual accessor props is rare => emit errors\n removedProps: DEPRECATED_PROPS\n};\n\nexport default class Buffer extends Resource {\n constructor(gl, props = {}) {\n super(gl, props);\n\n this.stubRemovedMethods('Buffer', 'v6.0', ['layout', 'setLayout', 'getIndexedParameter']);\n // this.stubRemovedMethods('Buffer', 'v7.0', ['updateAccessor']);\n\n // In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers\n // otherwise buffer type will lock to generic (non-element) buffer\n // In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here\n this.target = props.target || (this.gl.webgl2 ? GL.COPY_READ_BUFFER : GL.ARRAY_BUFFER);\n\n this.initialize(props);\n\n Object.seal(this);\n }\n\n // returns number of elements in the buffer (assuming that the full buffer is used)\n getElementCount(accessor = this.accessor) {\n return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));\n }\n\n // returns number of vertices in the buffer (assuming that the full buffer is used)\n getVertexCount(accessor = this.accessor) {\n return Math.round(this.byteLength / Accessor.getBytesPerVertex(accessor));\n }\n\n // Creates and initializes the buffer object's data store.\n // Signature: `new Buffer(gl, {data: new Float32Array(...)})`\n // Signature: `new Buffer(gl, new Float32Array(...))`\n // Signature: `new Buffer(gl, 100)`\n initialize(props = {}) {\n // Signature `new Buffer(gl, new Float32Array(...)`\n if (ArrayBuffer.isView(props)) {\n props = {data: props};\n }\n\n // Signature: `new Buffer(gl, 100)`\n if (Number.isFinite(props)) {\n props = {byteLength: props};\n }\n\n props = checkProps('Buffer', props, PROP_CHECKS_INITIALIZE);\n\n // Initialize member fields\n this.usage = props.usage || GL.STATIC_DRAW;\n this.debugData = null;\n\n // Deprecated: Merge main props and accessor\n this.setAccessor(Object.assign({}, props, props.accessor));\n\n // Set data: (re)initializes the buffer\n if (props.data) {\n this._setData(props.data, props.offset, props.byteLength);\n } else {\n this._setByteLength(props.byteLength || 0);\n }\n\n return this;\n }\n\n setProps(props) {\n props = checkProps('Buffer', props, PROP_CHECKS_SET_PROPS);\n\n if ('accessor' in props) {\n this.setAccessor(props.accessor);\n }\n\n return this;\n }\n\n // Optionally stores an accessor with the buffer, makes it easier to use it as an attribute later\n // {type, size = 1, offset = 0, stride = 0, normalized = false, integer = false, divisor = 0}\n setAccessor(accessor) {\n // NOTE: From luma.gl v7.0, Accessors have an optional `buffer `field\n // (mainly to support \"interleaving\")\n // To avoid confusion, ensure `buffer.accessor` does not have a `buffer.accessor.buffer` field:\n accessor = Object.assign({}, accessor);\n delete accessor.buffer;\n\n // This new statement ensures that an \"accessor object\" is re-packaged as an Accessor instance\n this.accessor = new Accessor(accessor);\n return this;\n }\n\n // Allocate a bigger GPU buffer (if the current buffer is not big enough).\n // If a reallocation is triggered it clears the buffer\n // Returns:\n // `true`: buffer was reallocated, data was cleared\n // `false`: buffer was big enough, data is intact\n reallocate(byteLength) {\n if (byteLength > this.byteLength) {\n this._setByteLength(byteLength);\n return true;\n }\n this.bytesUsed = byteLength;\n return false;\n }\n\n // Update with new data. Reinitializes the buffer\n setData(props) {\n return this.initialize(props);\n }\n\n // Updates a subset of a buffer object's data store.\n // Data (Typed Array or ArrayBuffer), length is inferred unless provided\n // Offset into buffer\n // WebGL2 only: Offset into srcData\n // WebGL2 only: Number of bytes to be copied\n subData(props) {\n // Signature: buffer.subData(new Float32Array([...]))\n if (ArrayBuffer.isView(props)) {\n props = {data: props};\n }\n\n const {data, offset = 0, srcOffset = 0} = props;\n const byteLength = props.byteLength || props.length;\n\n assert(data);\n\n // Create the buffer - binding it here for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n const target = this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;\n this.gl.bindBuffer(target, this.handle);\n // WebGL2: subData supports additional srcOffset and length parameters\n if (srcOffset !== 0 || byteLength !== undefined) {\n assertWebGL2Context(this.gl);\n this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);\n } else {\n this.gl.bufferSubData(target, offset, data);\n }\n this.gl.bindBuffer(target, null);\n\n // TODO - update local `data` if offsets are right\n this.debugData = null;\n\n this._inferType(data);\n\n return this;\n }\n\n // WEBGL2 ONLY: Copies part of the data of another buffer into this buffer\n copyData({sourceBuffer, readOffset = 0, writeOffset = 0, size}) {\n const {gl} = this;\n assertWebGL2Context(gl);\n\n // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type\n gl.bindBuffer(GL.COPY_READ_BUFFER, sourceBuffer.handle);\n gl.bindBuffer(GL.COPY_WRITE_BUFFER, this.handle);\n gl.copyBufferSubData(GL.COPY_READ_BUFFER, GL.COPY_WRITE_BUFFER, readOffset, writeOffset, size);\n gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n gl.bindBuffer(GL.COPY_WRITE_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n this.debugData = null;\n\n return this;\n }\n\n // WEBGL2 ONLY: Reads data from buffer into an ArrayBufferView or SharedArrayBuffer.\n getData({dstData = null, srcByteOffset = 0, dstOffset = 0, length = 0} = {}) {\n assertWebGL2Context(this.gl);\n\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {clamped: false});\n const sourceAvailableElementCount = this._getAvailableElementCount(srcByteOffset);\n\n const dstElementOffset = dstOffset;\n\n let dstAvailableElementCount;\n let dstElementCount;\n if (dstData) {\n dstElementCount = dstData.length;\n dstAvailableElementCount = dstElementCount - dstElementOffset;\n } else {\n // Allocate ArrayBufferView with enough size to copy all eligible data.\n dstAvailableElementCount = Math.min(\n sourceAvailableElementCount,\n length || sourceAvailableElementCount\n );\n dstElementCount = dstElementOffset + dstAvailableElementCount;\n }\n\n const copyElementCount = Math.min(sourceAvailableElementCount, dstAvailableElementCount);\n length = length || copyElementCount;\n assert(length <= copyElementCount);\n dstData = dstData || new ArrayType(dstElementCount);\n\n // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);\n this.gl.getBufferSubData(GL.COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n return dstData;\n }\n\n /**\n * Binds a buffer to a given binding point (target).\n * GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER take an index, and optionally a range.\n * - GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER need an index to affect state\n * - GL.UNIFORM_BUFFER: `offset` must be aligned to GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT.\n * - GL.UNIFORM_BUFFER: `size` must be a minimum of GL.UNIFORM_BLOCK_SIZE_DATA.\n */\n bind({\n target = this.target, // target for the bind operation\n index = this.accessor && this.accessor.index, // index = index of target (indexed bind point)\n offset = 0,\n size\n } = {}) {\n // NOTE: While GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER could\n // be used as direct binding points, they will not affect transform feedback or\n // uniform buffer state. Instead indexed bindings need to be made.\n if (target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER) {\n if (size !== undefined) {\n this.gl.bindBufferRange(target, index, this.handle, offset, size);\n } else {\n assert(offset === 0); // Make sure offset wasn't supplied\n this.gl.bindBufferBase(target, index, this.handle);\n }\n } else {\n this.gl.bindBuffer(target, this.handle);\n }\n\n return this;\n }\n\n unbind({target = this.target, index = this.accessor && this.accessor.index} = {}) {\n const isIndexedBuffer = target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER;\n if (isIndexedBuffer) {\n this.gl.bindBufferBase(target, index, null);\n } else {\n this.gl.bindBuffer(target, null);\n }\n return this;\n }\n\n // PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)\n\n // Returns a short initial data array\n getDebugData() {\n if (!this.debugData) {\n this.debugData = this.getData({length: Math.min(DEBUG_DATA_LENGTH, this.byteLength)});\n return {data: this.debugData, changed: true};\n }\n return {data: this.debugData, changed: false};\n }\n\n invalidateDebugData() {\n this.debugData = null;\n }\n\n // PRIVATE METHODS\n\n // Allocate a new buffer and initialize to contents of typed array\n _setData(data, offset = 0, byteLength = data.byteLength + offset) {\n assert(ArrayBuffer.isView(data));\n\n this._trackDeallocatedMemory();\n\n const target = this._getTarget();\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, byteLength, this.usage);\n this.gl.bufferSubData(target, offset, data);\n this.gl.bindBuffer(target, null);\n\n this.debugData = data.slice(0, DEBUG_DATA_LENGTH);\n this.bytesUsed = byteLength;\n\n this._trackAllocatedMemory(byteLength);\n\n // infer GL type from supplied typed array\n const type = getGLTypeFromTypedArray(data);\n assert(type);\n this.setAccessor(new Accessor(this.accessor, {type}));\n return this;\n }\n\n // Allocate a GPU buffer of specified size.\n _setByteLength(byteLength, usage = this.usage) {\n assert(byteLength >= 0);\n\n this._trackDeallocatedMemory();\n\n // Workaround needed for Safari (#291):\n // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.\n let data = byteLength;\n if (byteLength === 0) {\n data = new Float32Array(0);\n }\n\n const target = this._getTarget();\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, data, usage);\n this.gl.bindBuffer(target, null);\n\n this.usage = usage;\n this.debugData = null;\n this.bytesUsed = byteLength;\n\n this._trackAllocatedMemory(byteLength);\n\n return this;\n }\n\n // Binding a buffer for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n _getTarget() {\n return this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;\n }\n\n _getAvailableElementCount(srcByteOffset) {\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {clamped: false});\n const sourceElementOffset = srcByteOffset / ArrayType.BYTES_PER_ELEMENT;\n return this.getElementCount() - sourceElementOffset;\n }\n\n // Automatically infers type from typed array passed to setData\n // Note: No longer that useful, since type is now autodeduced from the compiled shaders\n _inferType(data) {\n if (!this.accessor.type) {\n this.setAccessor(new Accessor(this.accessor, {type: getGLTypeFromTypedArray(data)}));\n }\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createBuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteBuffer(this.handle);\n this._trackDeallocatedMemory();\n }\n\n _getParameter(pname) {\n this.gl.bindBuffer(this.target, this.handle);\n const value = this.gl.getBufferParameter(this.target, pname);\n this.gl.bindBuffer(this.target, null);\n return value;\n }\n\n // DEPRECATIONS - v7.0\n get type() {\n log.deprecated('Buffer.type', 'Buffer.accessor.type')();\n return this.accessor.type;\n }\n\n get bytes() {\n log.deprecated('Buffer.bytes', 'Buffer.byteLength')();\n return this.byteLength;\n }\n\n // DEPRECATIONS - v6.0\n // Deprecated in v6.x, but not warnings not properly implemented\n setByteLength(byteLength) {\n log.deprecated('setByteLength', 'reallocate')();\n return this.reallocate(byteLength);\n }\n\n // Deprecated in v6.x, but not warnings not properly implemented\n updateAccessor(opts) {\n log.deprecated('updateAccessor(...)', 'setAccessor(new Accessor(buffer.accessor, ...)')();\n this.accessor = new Accessor(this.accessor, opts);\n return this;\n }\n}\n"],"file":"buffer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/buffer.js"],"names":["Resource","Accessor","getGLTypeFromTypedArray","getTypedArrayFromGLType","assertWebGL2Context","log","assert","checkProps","DEBUG_DATA_LENGTH","DEPRECATED_PROPS","offset","stride","type","size","divisor","normalized","integer","instanced","isInstanced","PROP_CHECKS_INITIALIZE","removedProps","replacedProps","bytes","deprecatedProps","PROP_CHECKS_SET_PROPS","Buffer","Symbol","toStringTag","constructor","gl","props","stubRemovedMethods","target","webgl2","initialize","Object","seal","getElementCount","accessor","Math","round","byteLength","getBytesPerElement","getVertexCount","getBytesPerVertex","ArrayBuffer","isView","data","Number","isFinite","usage","debugData","setAccessor","assign","_setData","_setByteLength","setProps","buffer","reallocate","bytesUsed","setData","subData","srcOffset","length","bindBuffer","handle","undefined","bufferSubData","_inferType","copyData","sourceBuffer","readOffset","writeOffset","copyBufferSubData","getData","dstData","srcByteOffset","dstOffset","ArrayType","clamped","sourceAvailableElementCount","_getAvailableElementCount","dstElementOffset","dstAvailableElementCount","dstElementCount","min","copyElementCount","getBufferSubData","bind","index","bindBufferRange","bindBufferBase","unbind","isIndexedBuffer","getDebugData","changed","invalidateDebugData","_trackDeallocatedMemory","_getTarget","bufferData","slice","_trackAllocatedMemory","Float32Array","sourceElementOffset","BYTES_PER_ELEMENT","_createHandle","createBuffer","_deleteHandle","deleteBuffer","_getParameter","pname","value","getBufferParameter","deprecated","setByteLength","updateAccessor","opts"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Accessor from './accessor';\nimport {getGLTypeFromTypedArray, getTypedArrayFromGLType} from '../webgl-utils/typed-array-utils';\nimport {assertWebGL2Context, log} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\nimport {checkProps} from '../utils/check-props';\n\nconst DEBUG_DATA_LENGTH = 10;\n\n// Shared prop checks for constructor and setProps\nconst DEPRECATED_PROPS = {\n offset: 'accessor.offset',\n stride: 'accessor.stride',\n type: 'accessor.type',\n size: 'accessor.size',\n divisor: 'accessor.divisor',\n normalized: 'accessor.normalized',\n integer: 'accessor.integer',\n instanced: 'accessor.divisor',\n isInstanced: 'accessor.divisor'\n};\n\n// Prop checks for constructor\nconst PROP_CHECKS_INITIALIZE = {\n removedProps: {},\n replacedProps: {\n bytes: 'byteLength'\n },\n // new Buffer() with individual accessor props is still used in apps, emit warnings\n deprecatedProps: DEPRECATED_PROPS\n};\n\n// Prop checks for setProps\nconst PROP_CHECKS_SET_PROPS = {\n // Buffer.setProps() with individual accessor props is rare => emit errors\n removedProps: DEPRECATED_PROPS\n};\n\nexport default class Buffer extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Buffer';\n }\n constructor(gl, props = {}) {\n super(gl, props);\n\n this.stubRemovedMethods('Buffer', 'v6.0', ['layout', 'setLayout', 'getIndexedParameter']);\n // this.stubRemovedMethods('Buffer', 'v7.0', ['updateAccessor']);\n\n // In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers\n // otherwise buffer type will lock to generic (non-element) buffer\n // In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here\n this.target = props.target || (this.gl.webgl2 ? GL.COPY_READ_BUFFER : GL.ARRAY_BUFFER);\n\n this.initialize(props);\n\n Object.seal(this);\n }\n\n // returns number of elements in the buffer (assuming that the full buffer is used)\n getElementCount(accessor = this.accessor) {\n return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));\n }\n\n // returns number of vertices in the buffer (assuming that the full buffer is used)\n getVertexCount(accessor = this.accessor) {\n return Math.round(this.byteLength / Accessor.getBytesPerVertex(accessor));\n }\n\n // Creates and initializes the buffer object's data store.\n // Signature: `new Buffer(gl, {data: new Float32Array(...)})`\n // Signature: `new Buffer(gl, new Float32Array(...))`\n // Signature: `new Buffer(gl, 100)`\n initialize(props = {}) {\n // Signature `new Buffer(gl, new Float32Array(...)`\n if (ArrayBuffer.isView(props)) {\n props = {data: props};\n }\n\n // Signature: `new Buffer(gl, 100)`\n if (Number.isFinite(props)) {\n props = {byteLength: props};\n }\n\n props = checkProps('Buffer', props, PROP_CHECKS_INITIALIZE);\n\n // Initialize member fields\n this.usage = props.usage || GL.STATIC_DRAW;\n this.debugData = null;\n\n // Deprecated: Merge main props and accessor\n this.setAccessor(Object.assign({}, props, props.accessor));\n\n // Set data: (re)initializes the buffer\n if (props.data) {\n this._setData(props.data, props.offset, props.byteLength);\n } else {\n this._setByteLength(props.byteLength || 0);\n }\n\n return this;\n }\n\n setProps(props) {\n props = checkProps('Buffer', props, PROP_CHECKS_SET_PROPS);\n\n if ('accessor' in props) {\n this.setAccessor(props.accessor);\n }\n\n return this;\n }\n\n // Optionally stores an accessor with the buffer, makes it easier to use it as an attribute later\n // {type, size = 1, offset = 0, stride = 0, normalized = false, integer = false, divisor = 0}\n setAccessor(accessor) {\n // NOTE: From luma.gl v7.0, Accessors have an optional `buffer `field\n // (mainly to support \"interleaving\")\n // To avoid confusion, ensure `buffer.accessor` does not have a `buffer.accessor.buffer` field:\n accessor = Object.assign({}, accessor);\n delete accessor.buffer;\n\n // This new statement ensures that an \"accessor object\" is re-packaged as an Accessor instance\n this.accessor = new Accessor(accessor);\n return this;\n }\n\n // Allocate a bigger GPU buffer (if the current buffer is not big enough).\n // If a reallocation is triggered it clears the buffer\n // Returns:\n // `true`: buffer was reallocated, data was cleared\n // `false`: buffer was big enough, data is intact\n reallocate(byteLength) {\n if (byteLength > this.byteLength) {\n this._setByteLength(byteLength);\n return true;\n }\n this.bytesUsed = byteLength;\n return false;\n }\n\n // Update with new data. Reinitializes the buffer\n setData(props) {\n return this.initialize(props);\n }\n\n // Updates a subset of a buffer object's data store.\n // Data (Typed Array or ArrayBuffer), length is inferred unless provided\n // Offset into buffer\n // WebGL2 only: Offset into srcData\n // WebGL2 only: Number of bytes to be copied\n subData(props) {\n // Signature: buffer.subData(new Float32Array([...]))\n if (ArrayBuffer.isView(props)) {\n props = {data: props};\n }\n\n const {data, offset = 0, srcOffset = 0} = props;\n const byteLength = props.byteLength || props.length;\n\n assert(data);\n\n // Create the buffer - binding it here for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n const target = this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;\n this.gl.bindBuffer(target, this.handle);\n // WebGL2: subData supports additional srcOffset and length parameters\n if (srcOffset !== 0 || byteLength !== undefined) {\n assertWebGL2Context(this.gl);\n this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);\n } else {\n this.gl.bufferSubData(target, offset, data);\n }\n this.gl.bindBuffer(target, null);\n\n // TODO - update local `data` if offsets are right\n this.debugData = null;\n\n this._inferType(data);\n\n return this;\n }\n\n // WEBGL2 ONLY: Copies part of the data of another buffer into this buffer\n copyData({sourceBuffer, readOffset = 0, writeOffset = 0, size}) {\n const {gl} = this;\n assertWebGL2Context(gl);\n\n // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type\n gl.bindBuffer(GL.COPY_READ_BUFFER, sourceBuffer.handle);\n gl.bindBuffer(GL.COPY_WRITE_BUFFER, this.handle);\n gl.copyBufferSubData(GL.COPY_READ_BUFFER, GL.COPY_WRITE_BUFFER, readOffset, writeOffset, size);\n gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n gl.bindBuffer(GL.COPY_WRITE_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n this.debugData = null;\n\n return this;\n }\n\n // WEBGL2 ONLY: Reads data from buffer into an ArrayBufferView or SharedArrayBuffer.\n getData({dstData = null, srcByteOffset = 0, dstOffset = 0, length = 0} = {}) {\n assertWebGL2Context(this.gl);\n\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {clamped: false});\n const sourceAvailableElementCount = this._getAvailableElementCount(srcByteOffset);\n\n const dstElementOffset = dstOffset;\n\n let dstAvailableElementCount;\n let dstElementCount;\n if (dstData) {\n dstElementCount = dstData.length;\n dstAvailableElementCount = dstElementCount - dstElementOffset;\n } else {\n // Allocate ArrayBufferView with enough size to copy all eligible data.\n dstAvailableElementCount = Math.min(\n sourceAvailableElementCount,\n length || sourceAvailableElementCount\n );\n dstElementCount = dstElementOffset + dstAvailableElementCount;\n }\n\n const copyElementCount = Math.min(sourceAvailableElementCount, dstAvailableElementCount);\n length = length || copyElementCount;\n assert(length <= copyElementCount);\n dstData = dstData || new ArrayType(dstElementCount);\n\n // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);\n this.gl.getBufferSubData(GL.COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n return dstData;\n }\n\n /**\n * Binds a buffer to a given binding point (target).\n * GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER take an index, and optionally a range.\n * - GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER need an index to affect state\n * - GL.UNIFORM_BUFFER: `offset` must be aligned to GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT.\n * - GL.UNIFORM_BUFFER: `size` must be a minimum of GL.UNIFORM_BLOCK_SIZE_DATA.\n */\n bind({\n target = this.target, // target for the bind operation\n index = this.accessor && this.accessor.index, // index = index of target (indexed bind point)\n offset = 0,\n size\n } = {}) {\n // NOTE: While GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER could\n // be used as direct binding points, they will not affect transform feedback or\n // uniform buffer state. Instead indexed bindings need to be made.\n if (target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER) {\n if (size !== undefined) {\n this.gl.bindBufferRange(target, index, this.handle, offset, size);\n } else {\n assert(offset === 0); // Make sure offset wasn't supplied\n this.gl.bindBufferBase(target, index, this.handle);\n }\n } else {\n this.gl.bindBuffer(target, this.handle);\n }\n\n return this;\n }\n\n unbind({target = this.target, index = this.accessor && this.accessor.index} = {}) {\n const isIndexedBuffer = target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER;\n if (isIndexedBuffer) {\n this.gl.bindBufferBase(target, index, null);\n } else {\n this.gl.bindBuffer(target, null);\n }\n return this;\n }\n\n // PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)\n\n // Returns a short initial data array\n getDebugData() {\n if (!this.debugData) {\n this.debugData = this.getData({length: Math.min(DEBUG_DATA_LENGTH, this.byteLength)});\n return {data: this.debugData, changed: true};\n }\n return {data: this.debugData, changed: false};\n }\n\n invalidateDebugData() {\n this.debugData = null;\n }\n\n // PRIVATE METHODS\n\n // Allocate a new buffer and initialize to contents of typed array\n _setData(data, offset = 0, byteLength = data.byteLength + offset) {\n assert(ArrayBuffer.isView(data));\n\n this._trackDeallocatedMemory();\n\n const target = this._getTarget();\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, byteLength, this.usage);\n this.gl.bufferSubData(target, offset, data);\n this.gl.bindBuffer(target, null);\n\n this.debugData = data.slice(0, DEBUG_DATA_LENGTH);\n this.bytesUsed = byteLength;\n\n this._trackAllocatedMemory(byteLength);\n\n // infer GL type from supplied typed array\n const type = getGLTypeFromTypedArray(data);\n assert(type);\n this.setAccessor(new Accessor(this.accessor, {type}));\n return this;\n }\n\n // Allocate a GPU buffer of specified size.\n _setByteLength(byteLength, usage = this.usage) {\n assert(byteLength >= 0);\n\n this._trackDeallocatedMemory();\n\n // Workaround needed for Safari (#291):\n // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.\n let data = byteLength;\n if (byteLength === 0) {\n data = new Float32Array(0);\n }\n\n const target = this._getTarget();\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, data, usage);\n this.gl.bindBuffer(target, null);\n\n this.usage = usage;\n this.debugData = null;\n this.bytesUsed = byteLength;\n\n this._trackAllocatedMemory(byteLength);\n\n return this;\n }\n\n // Binding a buffer for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n _getTarget() {\n return this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;\n }\n\n _getAvailableElementCount(srcByteOffset) {\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {clamped: false});\n const sourceElementOffset = srcByteOffset / ArrayType.BYTES_PER_ELEMENT;\n return this.getElementCount() - sourceElementOffset;\n }\n\n // Automatically infers type from typed array passed to setData\n // Note: No longer that useful, since type is now autodeduced from the compiled shaders\n _inferType(data) {\n if (!this.accessor.type) {\n this.setAccessor(new Accessor(this.accessor, {type: getGLTypeFromTypedArray(data)}));\n }\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createBuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteBuffer(this.handle);\n this._trackDeallocatedMemory();\n }\n\n _getParameter(pname) {\n this.gl.bindBuffer(this.target, this.handle);\n const value = this.gl.getBufferParameter(this.target, pname);\n this.gl.bindBuffer(this.target, null);\n return value;\n }\n\n // DEPRECATIONS - v7.0\n get type() {\n log.deprecated('Buffer.type', 'Buffer.accessor.type')();\n return this.accessor.type;\n }\n\n get bytes() {\n log.deprecated('Buffer.bytes', 'Buffer.byteLength')();\n return this.byteLength;\n }\n\n // DEPRECATIONS - v6.0\n // Deprecated in v6.x, but not warnings not properly implemented\n setByteLength(byteLength) {\n log.deprecated('setByteLength', 'reallocate')();\n return this.reallocate(byteLength);\n }\n\n // Deprecated in v6.x, but not warnings not properly implemented\n updateAccessor(opts) {\n log.deprecated('updateAccessor(...)', 'setAccessor(new Accessor(buffer.accessor, ...)')();\n this.accessor = new Accessor(this.accessor, opts);\n return this;\n }\n}\n"],"file":"buffer.js"}
|
|
@@ -9,6 +9,10 @@ import { getKey } from '../webgl-utils/constants-to-keys';
|
|
|
9
9
|
import { assert } from '../utils/assert';
|
|
10
10
|
const ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';
|
|
11
11
|
export default class Framebuffer extends Resource {
|
|
12
|
+
get [Symbol.toStringTag]() {
|
|
13
|
+
return 'Framebuffer';
|
|
14
|
+
}
|
|
15
|
+
|
|
12
16
|
static isSupported(gl, options = {}) {
|
|
13
17
|
const {
|
|
14
18
|
colorBufferFloat,
|