@luma.gl/webgl 8.5.15 → 8.5.16
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 +732 -848
- package/dist/dist.min.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/classes/accessor.js +31 -33
- package/dist/es5/classes/accessor.js.map +1 -1
- package/dist/es5/classes/buffer.js +24 -26
- package/dist/es5/classes/buffer.js.map +1 -1
- package/dist/es5/classes/clear.js.map +1 -1
- package/dist/es5/classes/copy-and-blit.js +3 -3
- package/dist/es5/classes/copy-and-blit.js.map +1 -1
- package/dist/es5/classes/framebuffer.js +70 -72
- package/dist/es5/classes/framebuffer.js.map +1 -1
- package/dist/es5/classes/program-configuration.js.map +1 -1
- package/dist/es5/classes/program.js +11 -13
- package/dist/es5/classes/program.js.map +1 -1
- package/dist/es5/classes/query.js +47 -49
- package/dist/es5/classes/query.js.map +1 -1
- package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
- package/dist/es5/classes/renderbuffer.js +37 -39
- package/dist/es5/classes/renderbuffer.js.map +1 -1
- package/dist/es5/classes/resource.js +13 -15
- package/dist/es5/classes/resource.js.map +1 -1
- package/dist/es5/classes/shader.js +38 -44
- package/dist/es5/classes/shader.js.map +1 -1
- package/dist/es5/classes/texture-2d.js +16 -17
- package/dist/es5/classes/texture-2d.js.map +1 -1
- package/dist/es5/classes/texture-3d.js +15 -17
- package/dist/es5/classes/texture-3d.js.map +1 -1
- package/dist/es5/classes/texture-cube.js +10 -12
- package/dist/es5/classes/texture-cube.js.map +1 -1
- package/dist/es5/classes/texture-formats.js +1 -1
- package/dist/es5/classes/texture-formats.js.map +1 -1
- package/dist/es5/classes/texture.js +24 -26
- package/dist/es5/classes/texture.js.map +1 -1
- package/dist/es5/classes/transform-feedback.js +16 -22
- package/dist/es5/classes/transform-feedback.js.map +1 -1
- package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
- package/dist/es5/classes/uniforms.js +2 -2
- package/dist/es5/classes/uniforms.js.map +1 -1
- package/dist/es5/classes/vertex-array-object.js +69 -71
- package/dist/es5/classes/vertex-array-object.js.map +1 -1
- package/dist/es5/classes/vertex-array.js.map +1 -1
- package/dist/es5/debug/debug-program-configuration.js +1 -1
- package/dist/es5/debug/debug-program-configuration.js.map +1 -1
- package/dist/es5/debug/debug-uniforms.js +1 -1
- package/dist/es5/debug/debug-uniforms.js.map +1 -1
- package/dist/es5/debug/debug-vertex-array.js.map +1 -1
- package/dist/es5/features/check-glsl-extension.js.map +1 -1
- package/dist/es5/features/check-old-ie.js.map +1 -1
- package/dist/es5/features/features.js +2 -2
- package/dist/es5/features/features.js.map +1 -1
- package/dist/es5/features/index.js +16 -16
- package/dist/es5/features/index.js.map +1 -1
- package/dist/es5/features/limits.js +1 -1
- package/dist/es5/features/limits.js.map +1 -1
- package/dist/es5/features/webgl-features-table.js.map +1 -1
- package/dist/es5/features/webgl-limits-table.js.map +1 -1
- package/dist/es5/glsl-utils/format-glsl-error.js.map +1 -1
- package/dist/es5/glsl-utils/get-shader-name.js.map +1 -1
- package/dist/es5/glsl-utils/get-shader-type-name.js.map +1 -1
- package/dist/es5/glsl-utils/get-shader-version.js.map +1 -1
- package/dist/es5/glsl-utils/index.js +11 -7
- package/dist/es5/glsl-utils/index.js.map +1 -1
- package/dist/es5/index.js +104 -104
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/init.d.ts +1 -1
- package/dist/es5/init.js +4 -4
- package/dist/es5/init.js.map +1 -1
- package/dist/es5/utils/array-utils-flat.js +2 -2
- package/dist/es5/utils/array-utils-flat.js.map +1 -1
- package/dist/es5/utils/assert.js.map +1 -1
- package/dist/es5/utils/check-props.js.map +1 -1
- package/dist/es5/utils/format-value.js.map +1 -1
- package/dist/es5/utils/is-old-ie.js.map +1 -1
- package/dist/es5/utils/load-file.js +1 -1
- package/dist/es5/utils/load-file.js.map +1 -1
- package/dist/es5/utils/stub-methods.js.map +1 -1
- package/dist/es5/utils/utils.js +2 -2
- package/dist/es5/utils/utils.js.map +1 -1
- package/dist/es5/webgl-utils/attribute-utils.js +3 -3
- package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/es5/webgl-utils/constants-to-keys.js +1 -1
- package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/es5/webgl-utils/format-utils.js.map +1 -1
- package/dist/es5/webgl-utils/get-error.js +1 -1
- package/dist/es5/webgl-utils/get-error.js.map +1 -1
- package/dist/es5/webgl-utils/request-animation-frame.js +1 -1
- package/dist/es5/webgl-utils/request-animation-frame.js.map +1 -1
- package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
- package/dist/es5/webgl-utils/typed-array-utils.js +1 -1
- package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/classes/accessor.js +12 -3
- package/dist/esm/classes/accessor.js.map +1 -1
- package/dist/esm/classes/buffer.js +41 -28
- package/dist/esm/classes/buffer.js.map +1 -1
- package/dist/esm/classes/clear.js +14 -12
- package/dist/esm/classes/clear.js.map +1 -1
- package/dist/esm/classes/copy-and-blit.js +27 -21
- package/dist/esm/classes/copy-and-blit.js.map +1 -1
- package/dist/esm/classes/framebuffer.js +89 -64
- package/dist/esm/classes/framebuffer.js.map +1 -1
- package/dist/esm/classes/program-configuration.js.map +1 -1
- package/dist/esm/classes/program.js +40 -32
- package/dist/esm/classes/program.js.map +1 -1
- package/dist/esm/classes/query.js +11 -6
- package/dist/esm/classes/query.js.map +1 -1
- package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
- package/dist/esm/classes/renderbuffer.js +25 -19
- package/dist/esm/classes/renderbuffer.js.map +1 -1
- package/dist/esm/classes/resource.js +34 -19
- package/dist/esm/classes/resource.js.map +1 -1
- package/dist/esm/classes/shader.js +13 -10
- package/dist/esm/classes/shader.js.map +1 -1
- package/dist/esm/classes/texture-2d.js +2 -1
- package/dist/esm/classes/texture-2d.js.map +1 -1
- package/dist/esm/classes/texture-3d.js +17 -14
- package/dist/esm/classes/texture-3d.js.map +1 -1
- package/dist/esm/classes/texture-cube.js +23 -19
- package/dist/esm/classes/texture-cube.js.map +1 -1
- package/dist/esm/classes/texture-formats.js.map +1 -1
- package/dist/esm/classes/texture.js +47 -35
- package/dist/esm/classes/texture.js.map +1 -1
- package/dist/esm/classes/transform-feedback.js +12 -6
- package/dist/esm/classes/transform-feedback.js.map +1 -1
- package/dist/esm/classes/uniform-buffer-layout.js.map +1 -1
- package/dist/esm/classes/uniforms.js +6 -6
- package/dist/esm/classes/uniforms.js.map +1 -1
- package/dist/esm/classes/vertex-array-object.js +17 -9
- package/dist/esm/classes/vertex-array-object.js.map +1 -1
- package/dist/esm/classes/vertex-array.js +17 -7
- package/dist/esm/classes/vertex-array.js.map +1 -1
- package/dist/esm/debug/debug-program-configuration.js +4 -4
- package/dist/esm/debug/debug-program-configuration.js.map +1 -1
- package/dist/esm/debug/debug-uniforms.js +16 -14
- package/dist/esm/debug/debug-uniforms.js.map +1 -1
- package/dist/esm/debug/debug-vertex-array.js +16 -14
- package/dist/esm/debug/debug-vertex-array.js.map +1 -1
- package/dist/esm/features/check-glsl-extension.js +3 -2
- package/dist/esm/features/check-glsl-extension.js.map +1 -1
- package/dist/esm/features/check-old-ie.js +2 -1
- package/dist/esm/features/check-old-ie.js.map +1 -1
- package/dist/esm/features/features.js +1 -1
- package/dist/esm/features/features.js.map +1 -1
- package/dist/esm/features/index.js.map +1 -1
- package/dist/esm/features/limits.js.map +1 -1
- package/dist/esm/features/webgl-features-table.js +1 -1
- package/dist/esm/features/webgl-features-table.js.map +1 -1
- package/dist/esm/features/webgl-limits-table.js.map +1 -1
- package/dist/esm/glsl-utils/format-glsl-error.js +9 -7
- package/dist/esm/glsl-utils/format-glsl-error.js.map +1 -1
- package/dist/esm/glsl-utils/get-shader-name.js +2 -1
- package/dist/esm/glsl-utils/get-shader-name.js.map +1 -1
- package/dist/esm/glsl-utils/get-shader-type-name.js.map +1 -1
- package/dist/esm/glsl-utils/get-shader-version.js.map +1 -1
- package/dist/esm/glsl-utils/index.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/init.d.ts +1 -1
- package/dist/esm/init.js +4 -4
- package/dist/esm/init.js.map +1 -1
- package/dist/esm/utils/array-utils-flat.js +7 -6
- package/dist/esm/utils/array-utils-flat.js.map +1 -1
- package/dist/esm/utils/assert.js.map +1 -1
- package/dist/esm/utils/check-props.js +4 -4
- package/dist/esm/utils/check-props.js.map +1 -1
- package/dist/esm/utils/format-value.js +4 -3
- package/dist/esm/utils/format-value.js.map +1 -1
- package/dist/esm/utils/is-old-ie.js +2 -1
- package/dist/esm/utils/is-old-ie.js.map +1 -1
- package/dist/esm/utils/load-file.js +3 -2
- package/dist/esm/utils/load-file.js.map +1 -1
- package/dist/esm/utils/stub-methods.js +2 -3
- package/dist/esm/utils/stub-methods.js.map +1 -1
- package/dist/esm/utils/utils.js +3 -2
- package/dist/esm/utils/utils.js.map +1 -1
- package/dist/esm/webgl-utils/attribute-utils.js +11 -8
- package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/esm/webgl-utils/constants-to-keys.js +3 -3
- package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/esm/webgl-utils/format-utils.js.map +1 -1
- package/dist/esm/webgl-utils/get-error.js +1 -1
- package/dist/esm/webgl-utils/get-error.js.map +1 -1
- package/dist/esm/webgl-utils/request-animation-frame.js.map +1 -1
- package/dist/esm/webgl-utils/texture-utils.js +1 -1
- package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
- package/dist/esm/webgl-utils/typed-array-utils.js +19 -15
- package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
- package/package.json +5 -5
- package/src/classes/framebuffer.js +1 -0
- package/src/classes/transform-feedback.js +1 -1
- package/src/classes/vertex-array-object.js +1 -1
- package/src/init.d.ts +1 -1
- package/src/init.js +1 -1
- package/src/webgl-utils/texture-utils.js +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/transform-feedback.js"],"names":["isWebGL2","assertWebGL2Context","log","Resource","Buffer","isObjectEmpty","TransformFeedback","Symbol","toStringTag","isSupported","gl","constructor","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","buffer","byteSize","byteOffset","_getBufferParams","warn","id","_bindBuffer","begin","primitiveMode","bindTransformFeedback","handle","_bindBuffers","beginTransformFeedback","end","endTransformFeedback","undefined","byteLength","_getVaryingInfo","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","bindBufferRange","_createHandle","createTransformFeedback","_deleteHandle","deleteTransformFeedback","_bindHandle"],"mappings":"AACA,SAAQA,QAAR,EAAkBC,mBAAlB,EAAuCC,GAAvC,QAAiD,kBAAjD;AACA,OAAOC,QAAP,MAAqB,YAArB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AACA,SAAQC,aAAR,QAA4B,gBAA5B;AAKA,eAAe,MAAMC,iBAAN,SAAgCH,QAAhC,CAAyC;AAEtD,OAAKI,MAAM,CAACC,WAAZ,IAA2B;AACzB,WAAO,mBAAP;AACD;;AACD,SAAOC,WAAP,CAAmBC,EAAnB,EAAuB;AACrB,WAAOV,QAAQ,CAACU,EAAD,CAAf;AACD;;AAEDC,EAAAA,WAAW,CAACD,EAAD,EAAKE,KAAK,GAAG,EAAb,EAAiB;AAC1BX,IAAAA,mBAAmB,CAACS,EAAD,CAAnB;AACA,UAAMA,EAAN,EAAUE,KAAV;AAEA,SAAKC,UAAL,CAAgBD,KAAhB;AACA,SAAKE,kBAAL,CAAwB,mBAAxB,EAA6C,MAA7C,EAAqD,CAAC,OAAD,EAAU,QAAV,CAArD;AACAC,IAAAA,MAAM,CAACC,IAAP,CAAY,IAAZ;AACD;;AAEDH,EAAAA,UAAU,CAACD,KAAK,GAAG,EAAT,EAAa;AACrB,SAAKK,OAAL,GAAe,EAAf;AACA,SAAKC,MAAL,GAAc,EAAd;AACA,SAAKC,aAAL,GAAqB,IAArB;AACA,SAAKC,SAAL,GAAiB,IAAjB;;AAGA,QAAI,CAACf,aAAa,CAAC,KAAKY,OAAN,CAAlB,EAAkC;AAChC,WAAKI,IAAL,CAAU,MAAM,KAAKC,cAAL,EAAhB;AACD;;AAED,SAAKC,QAAL,CAAcX,KAAd;AACA,WAAO,IAAP;AACD;;AAEDW,EAAAA,QAAQ,CAACX,KAAD,EAAQ;AACd,QAAI,aAAaA,KAAjB,EAAwB;AACtB,WAAKO,aAAL,GAAqBP,KAAK,CAACY,OAAN,IAAiBZ,KAAK,CAACY,OAAN,CAAcL,aAApD;AACD;;AACD,QAAI,mBAAmBP,KAAvB,EAA8B;AAC5B,WAAKO,aAAL,GAAqBP,KAAK,CAACO,aAA3B;AACD;;AACD,QAAI,eAAeP,KAAnB,EAA0B;AACxBA,MAAAA,KAAK,GAAGA,KAAK,CAACQ,SAAd;AACD;;AACD,QAAI,aAAaR,KAAjB,EAAwB;AACtB,WAAKa,UAAL,CAAgBb,KAAK,CAACK,OAAtB;AACD;AACF;;AAEDQ,EAAAA,UAAU,CAACR,OAAO,GAAG,EAAX,EAAe;AACvB,SAAKI,IAAL,CAAU,MAAM;AACd,WAAK,MAAMK,UAAX,IAAyBT,OAAzB,EAAkC;AAChC,aAAKU,SAAL,CAAeD,UAAf,EAA2BT,OAAO,CAACS,UAAD,CAAlC;AACD;AACF,KAJD;AAKA,WAAO,IAAP;AACD;;AAEDC,EAAAA,SAAS,CAACC,cAAD,EAAiBC,cAAjB,EAAiC;AACxC,UAAMC,QAAQ,GAAG,KAAKC,gBAAL,CAAsBH,cAAtB,CAAjB;;AACA,UAAM;AAACI,MAAAA,MAAD;AAASC,MAAAA,QAAT;AAAmBC,MAAAA;AAAnB,QAAiC,KAAKC,gBAAL,CAAsBN,cAAtB,CAAvC;;AAEA,QAAIC,QAAQ,GAAG,CAAf,EAAkB;AAChB,WAAKZ,MAAL,CAAYU,cAAZ,IAA8BI,MAA9B;AACA9B,MAAAA,GAAG,CAACkC,IAAJ,CAAS,MAAO,GAAE,KAAKC,EAAG,0BAAyBT,cAAe,EAAlE;AACA,aAAO,IAAP;AACD;;AAED,SAAKX,OAAL,CAAaa,QAAb,IAAyBD,cAAzB;;AAIA,QAAI,CAAC,KAAKT,SAAV,EAAqB;AACnB,WAAKkB,WAAL,CAAiBR,QAAjB,EAA2BE,MAA3B,EAAmCE,UAAnC,EAA+CD,QAA/C;AACD;;AAED,WAAO,IAAP;AACD;;AAEDM,EAAAA,KAAK,CAACC,aAAa,IAAd,EAA4B;AAE/B,SAAK9B,EAAL,CAAQ+B,qBAAR,QAAqD,KAAKC,MAA1D;;AACA,SAAKC,YAAL;;AAEA,SAAKjC,EAAL,CAAQkC,sBAAR,CAA+BJ,aAA/B;AACA,WAAO,IAAP;AACD;;AAEDK,EAAAA,GAAG,GAAG;AAEJ,SAAKnC,EAAL,CAAQoC,oBAAR;;AACA,SAAKxB,cAAL;;AAEA,SAAKZ,EAAL,CAAQ+B,qBAAR,QAAqD,IAArD;AACA,WAAO,IAAP;AACD;;AAIDN,EAAAA,gBAAgB,CAACN,cAAD,EAAiB;AAC/B,QAAIK,UAAJ;AACA,QAAID,QAAJ;AACA,QAAID,MAAJ;;AACA,QAAIH,cAAc,YAAYzB,MAA1B,KAAqC,KAAzC,EAAgD;AAC9C4B,MAAAA,MAAM,GAAGH,cAAc,CAACG,MAAxB;AACAC,MAAAA,QAAQ,GAAGJ,cAAc,CAACI,QAA1B;AACAC,MAAAA,UAAU,GAAGL,cAAc,CAACK,UAA5B;AACD,KAJD,MAIO;AACLF,MAAAA,MAAM,GAAGH,cAAT;AACD;;AAED,QAAIK,UAAU,KAAKa,SAAf,IAA4Bd,QAAQ,KAAKc,SAA7C,EAAwD;AACtDb,MAAAA,UAAU,GAAGA,UAAU,IAAI,CAA3B;AACAD,MAAAA,QAAQ,GAAGA,QAAQ,IAAID,MAAM,CAACgB,UAAP,GAAoBd,UAA3C;AACD;;AACD,WAAO;AAACF,MAAAA,MAAD;AAASE,MAAAA,UAAT;AAAqBD,MAAAA;AAArB,KAAP;AACD;;AAEDgB,EAAAA,eAAe,CAACrB,cAAD,EAAiB;AAC9B,WAAO,KAAKT,aAAL,IAAsB,KAAKA,aAAL,CAAmB+B,cAAnB,CAAkCtB,cAAlC,CAA7B;AACD;;AAEDG,EAAAA,gBAAgB,CAACH,cAAD,EAAiB;AAC/B,QAAI,KAAKT,aAAT,EAAwB;AACtB,aAAO,KAAKA,aAAL,CAAmB+B,cAAnB,CAAkCtB,cAAlC,EAAkDE,QAAzD;AACD;;AACD,UAAMA,QAAQ,GAAGqB,MAAM,CAACvB,cAAD,CAAvB;AACA,WAAOuB,MAAM,CAACC,QAAP,CAAgBtB,QAAhB,IAA4BA,QAA5B,GAAuC,CAAC,CAA/C;AACD;;AAIDa,EAAAA,YAAY,GAAG;AACb,QAAI,KAAKvB,SAAT,EAAoB;AAClB,WAAK,MAAMiC,WAAX,IAA0B,KAAKpC,OAA/B,EAAwC;AACtC,cAAM;AAACe,UAAAA,MAAD;AAASC,UAAAA,QAAT;AAAmBC,UAAAA;AAAnB,YAAiC,KAAKC,gBAAL,CAAsB,KAAKlB,OAAL,CAAaoC,WAAb,CAAtB,CAAvC;;AACA,aAAKf,WAAL,CAAiBe,WAAjB,EAA8BrB,MAA9B,EAAsCE,UAAtC,EAAkDD,QAAlD;AACD;AACF;AACF;;AAEDX,EAAAA,cAAc,GAAG;AACf,QAAI,KAAKF,SAAT,EAAoB;AAClB,WAAK,MAAMiC,WAAX,IAA0B,KAAKpC,OAA/B,EAAwC;AACtC,aAAKqB,WAAL,CAAiBe,WAAjB,EAA8B,IAA9B;AACD;AACF;AACF;;AAEDf,EAAAA,WAAW,CAACgB,KAAD,EAAQtB,MAAR,EAAgBE,UAAU,GAAG,CAA7B,EAAgCD,QAAhC,EAA0C;AACnD,UAAMS,MAAM,GAAGV,MAAM,IAAIA,MAAM,CAACU,MAAhC;;AACA,QAAI,CAACA,MAAD,IAAWT,QAAQ,KAAKc,SAA5B,EAAuC;AAErC,WAAKrC,EAAL,CAAQ6C,cAAR,QAAqDD,KAArD,EAA4DZ,MAA5D;AACD,KAHD,MAGO;AAEL,WAAKhC,EAAL,CAAQ8C,eAAR,QAAsDF,KAAtD,EAA6DZ,MAA7D,EAAqER,UAArE,EAAiFD,QAAjF;AACD;;AACD,WAAO,IAAP;AACD;;AAIDwB,EAAAA,aAAa,GAAG;AAEd,WAAO,KAAK/C,EAAL,CAAQgD,uBAAR,EAAP;AACD;;AAEDC,EAAAA,aAAa,GAAG;AAEd,SAAKjD,EAAL,CAAQkD,uBAAR,CAAgC,KAAKlB,MAArC;AACD;;AAEDmB,EAAAA,WAAW,CAACnB,MAAD,EAAS;AAElB,SAAKhC,EAAL,CAAQ+B,qBAAR,QAAqD,KAAKC,MAA1D;AACD;;AA/KqD","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"}
|
|
1
|
+
{"version":3,"file":"transform-feedback.js","names":["isWebGL2","assertWebGL2Context","log","Resource","Buffer","isObjectEmpty","TransformFeedback","Symbol","toStringTag","isSupported","gl","constructor","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","buffer","byteSize","byteOffset","_getBufferParams","warn","id","_bindBuffer","begin","primitiveMode","bindTransformFeedback","handle","_bindBuffers","beginTransformFeedback","end","endTransformFeedback","undefined","byteLength","_getVaryingInfo","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","bindBufferRange","_createHandle","createTransformFeedback","_deleteHandle","deleteTransformFeedback","_bindHandle"],"sources":["../../../src/classes/transform-feedback.js"],"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"],"mappings":"AACA,SAAQA,QAAR,EAAkBC,mBAAlB,EAAuCC,GAAvC,QAAiD,kBAAjD;AACA,OAAOC,QAAP,MAAqB,YAArB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AACA,SAAQC,aAAR,QAA4B,gBAA5B;AAKA,eAAe,MAAMC,iBAAN,SAAgCH,QAAhC,CAAyC;EAE/B,KAAlBI,MAAM,CAACC,WAAW,IAAI;IACzB,OAAO,mBAAP;EACD;;EACiB,OAAXC,WAAW,CAACC,EAAD,EAAK;IACrB,OAAOV,QAAQ,CAACU,EAAD,CAAf;EACD;;EAEDC,WAAW,CAACD,EAAD,EAAiB;IAAA,IAAZE,KAAY,uEAAJ,EAAI;IAC1BX,mBAAmB,CAACS,EAAD,CAAnB;IACA,MAAMA,EAAN,EAAUE,KAAV;IAEA,KAAKC,UAAL,CAAgBD,KAAhB;IACA,KAAKE,kBAAL,CAAwB,mBAAxB,EAA6C,MAA7C,EAAqD,CAAC,OAAD,EAAU,QAAV,CAArD;IACAC,MAAM,CAACC,IAAP,CAAY,IAAZ;EACD;;EAEDH,UAAU,GAAa;IAAA,IAAZD,KAAY,uEAAJ,EAAI;IACrB,KAAKK,OAAL,GAAe,EAAf;IACA,KAAKC,MAAL,GAAc,EAAd;IACA,KAAKC,aAAL,GAAqB,IAArB;IACA,KAAKC,SAAL,GAAiB,IAAjB;;IAGA,IAAI,CAACf,aAAa,CAAC,KAAKY,OAAN,CAAlB,EAAkC;MAChC,KAAKI,IAAL,CAAU,MAAM,KAAKC,cAAL,EAAhB;IACD;;IAED,KAAKC,QAAL,CAAcX,KAAd;IACA,OAAO,IAAP;EACD;;EAEDW,QAAQ,CAACX,KAAD,EAAQ;IACd,IAAI,aAAaA,KAAjB,EAAwB;MACtB,KAAKO,aAAL,GAAqBP,KAAK,CAACY,OAAN,IAAiBZ,KAAK,CAACY,OAAN,CAAcL,aAApD;IACD;;IACD,IAAI,mBAAmBP,KAAvB,EAA8B;MAC5B,KAAKO,aAAL,GAAqBP,KAAK,CAACO,aAA3B;IACD;;IACD,IAAI,eAAeP,KAAnB,EAA0B;MACxBA,KAAK,GAAGA,KAAK,CAACQ,SAAd;IACD;;IACD,IAAI,aAAaR,KAAjB,EAAwB;MACtB,KAAKa,UAAL,CAAgBb,KAAK,CAACK,OAAtB;IACD;EACF;;EAEDQ,UAAU,GAAe;IAAA,IAAdR,OAAc,uEAAJ,EAAI;IACvB,KAAKI,IAAL,CAAU,MAAM;MACd,KAAK,MAAMK,UAAX,IAAyBT,OAAzB,EAAkC;QAChC,KAAKU,SAAL,CAAeD,UAAf,EAA2BT,OAAO,CAACS,UAAD,CAAlC;MACD;IACF,CAJD;IAKA,OAAO,IAAP;EACD;;EAEDC,SAAS,CAACC,cAAD,EAAiBC,cAAjB,EAAiC;IACxC,MAAMC,QAAQ,GAAG,KAAKC,gBAAL,CAAsBH,cAAtB,CAAjB;;IACA,MAAM;MAACI,MAAD;MAASC,QAAT;MAAmBC;IAAnB,IAAiC,KAAKC,gBAAL,CAAsBN,cAAtB,CAAvC;;IAEA,IAAIC,QAAQ,GAAG,CAAf,EAAkB;MAChB,KAAKZ,MAAL,CAAYU,cAAZ,IAA8BI,MAA9B;MACA9B,GAAG,CAACkC,IAAJ,WAAY,KAAKC,EAAjB,oCAA6CT,cAA7C;MACA,OAAO,IAAP;IACD;;IAED,KAAKX,OAAL,CAAaa,QAAb,IAAyBD,cAAzB;;IAIA,IAAI,CAAC,KAAKT,SAAV,EAAqB;MACnB,KAAKkB,WAAL,CAAiBR,QAAjB,EAA2BE,MAA3B,EAAmCE,UAAnC,EAA+CD,QAA/C;IACD;;IAED,OAAO,IAAP;EACD;;EAEDM,KAAK,GAA4B;IAAA,IAA3BC,aAA2B;IAE/B,KAAK9B,EAAL,CAAQ+B,qBAAR,QAAqD,KAAKC,MAA1D;;IACA,KAAKC,YAAL;;IAEA,KAAKjC,EAAL,CAAQkC,sBAAR,CAA+BJ,aAA/B;IACA,OAAO,IAAP;EACD;;EAEDK,GAAG,GAAG;IAEJ,KAAKnC,EAAL,CAAQoC,oBAAR;;IACA,KAAKxB,cAAL;;IAEA,KAAKZ,EAAL,CAAQ+B,qBAAR,QAAqD,IAArD;IACA,OAAO,IAAP;EACD;;EAIDN,gBAAgB,CAACN,cAAD,EAAiB;IAC/B,IAAIK,UAAJ;IACA,IAAID,QAAJ;IACA,IAAID,MAAJ;;IACA,IAAIH,cAAc,YAAYzB,MAA1B,KAAqC,KAAzC,EAAgD;MAC9C4B,MAAM,GAAGH,cAAc,CAACG,MAAxB;MACAC,QAAQ,GAAGJ,cAAc,CAACI,QAA1B;MACAC,UAAU,GAAGL,cAAc,CAACK,UAA5B;IACD,CAJD,MAIO;MACLF,MAAM,GAAGH,cAAT;IACD;;IAED,IAAIK,UAAU,KAAKa,SAAf,IAA4Bd,QAAQ,KAAKc,SAA7C,EAAwD;MACtDb,UAAU,GAAGA,UAAU,IAAI,CAA3B;MACAD,QAAQ,GAAGA,QAAQ,IAAID,MAAM,CAACgB,UAAP,GAAoBd,UAA3C;IACD;;IACD,OAAO;MAACF,MAAD;MAASE,UAAT;MAAqBD;IAArB,CAAP;EACD;;EAEDgB,eAAe,CAACrB,cAAD,EAAiB;IAC9B,OAAO,KAAKT,aAAL,IAAsB,KAAKA,aAAL,CAAmB+B,cAAnB,CAAkCtB,cAAlC,CAA7B;EACD;;EAEDG,gBAAgB,CAACH,cAAD,EAAiB;IAC/B,IAAI,KAAKT,aAAT,EAAwB;MACtB,OAAO,KAAKA,aAAL,CAAmB+B,cAAnB,CAAkCtB,cAAlC,EAAkDE,QAAzD;IACD;;IACD,MAAMA,QAAQ,GAAGqB,MAAM,CAACvB,cAAD,CAAvB;IACA,OAAOuB,MAAM,CAACC,QAAP,CAAgBtB,QAAhB,IAA4BA,QAA5B,GAAuC,CAAC,CAA/C;EACD;;EAIDa,YAAY,GAAG;IACb,IAAI,KAAKvB,SAAT,EAAoB;MAClB,KAAK,MAAMiC,WAAX,IAA0B,KAAKpC,OAA/B,EAAwC;QACtC,MAAM;UAACe,MAAD;UAASC,QAAT;UAAmBC;QAAnB,IAAiC,KAAKC,gBAAL,CAAsB,KAAKlB,OAAL,CAAaoC,WAAb,CAAtB,CAAvC;;QACA,KAAKf,WAAL,CAAiBe,WAAjB,EAA8BrB,MAA9B,EAAsCE,UAAtC,EAAkDD,QAAlD;MACD;IACF;EACF;;EAEDX,cAAc,GAAG;IACf,IAAI,KAAKF,SAAT,EAAoB;MAClB,KAAK,MAAMiC,WAAX,IAA0B,KAAKpC,OAA/B,EAAwC;QACtC,KAAKqB,WAAL,CAAiBe,WAAjB,EAA8B,IAA9B;MACD;IACF;EACF;;EAEDf,WAAW,CAACgB,KAAD,EAAQtB,MAAR,EAA0C;IAAA,IAA1BE,UAA0B,uEAAb,CAAa;IAAA,IAAVD,QAAU;IACnD,MAAMS,MAAM,GAAGV,MAAM,IAAIA,MAAM,CAACU,MAAhC;;IACA,IAAI,CAACA,MAAD,IAAWT,QAAQ,KAAKc,SAA5B,EAAuC;MAErC,KAAKrC,EAAL,CAAQ6C,cAAR,QAAqDD,KAArD,EAA4DZ,MAA5D;IACD,CAHD,MAGO;MAEL,KAAKhC,EAAL,CAAQ8C,eAAR,QAAsDF,KAAtD,EAA6DZ,MAA7D,EAAqER,UAArE,EAAiFD,QAAjF;IACD;;IACD,OAAO,IAAP;EACD;;EAIDwB,aAAa,GAAG;IAEd,OAAO,KAAK/C,EAAL,CAAQgD,uBAAR,EAAP;EACD;;EAEDC,aAAa,GAAG;IAEd,KAAKjD,EAAL,CAAQkD,uBAAR,CAAgC,KAAKlB,MAArC;EACD;;EAEDmB,WAAW,CAACnB,MAAD,EAAS;IAElB,KAAKhC,EAAL,CAAQ+B,qBAAR,QAAqD,KAAKC,MAA1D;EACD;;AA/KqD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"uniform-buffer-layout.js","names":["decomposeCompositeGLType","assert","ERR_ARGUMENT","GL_FLOAT","GL_INT","GL_UNSIGNED_INT","UniformBufferLayout","constructor","layout","size","key","_addUniform","data","Float32Array","typedArray","Int32Array","buffer","Uint32Array","getBytes","getData","getSubData","index","offset","undefined","begin","offsets","end","sizes","subarray","setUniforms","values","_setValue","value","type","set","uniformType","typeAndComponents","components","count","_alignTo"],"sources":["../../../src/classes/uniform-buffer-layout.js"],"sourcesContent":["// @ts-nocheck\n\n/* eslint-disable camelcase */\nimport {decomposeCompositeGLType} from '../webgl-utils/attribute-utils';\nimport {assert} from '../utils/assert';\n\nconst ERR_ARGUMENT = 'UniformBufferLayout illegal argument';\n\n// Local constants - these will \"collapse\" during minification\nconst GL_FLOAT = 0x1406;\nconst GL_INT = 0x1404;\nconst GL_UNSIGNED_INT = 0x1405;\n\n// Std140 layout for uniforms\nexport default class UniformBufferLayout {\n constructor(layout) {\n this.layout = {};\n this.size = 0;\n\n // Add layout (type, size and offset) definitions for each uniform in the layout\n for (const key in layout) {\n this._addUniform(key, layout[key]);\n }\n\n this.size += (4 - (this.size % 4)) % 4;\n\n // Allocate three typed arrays pointing at same memory\n const data = new Float32Array(this.size);\n this.typedArray = {\n [GL_FLOAT]: data,\n [GL_INT]: new Int32Array(data.buffer),\n [GL_UNSIGNED_INT]: new Uint32Array(data.buffer)\n };\n }\n\n // Get number of bytes needed for buffer allocation\n getBytes() {\n return this.size * 4;\n }\n\n // Get the current data as Float32Array, for bufferSubData\n getData() {\n return this.typedArray[GL_FLOAT];\n }\n\n // Get offset and data for one object (for bufferSubData)\n getSubData(index) {\n let data;\n let offset;\n if (index === undefined) {\n data = this.data;\n offset = 0;\n } else {\n const begin = this.offsets[index];\n const end = begin + this.sizes[index];\n data = this.data.subarray(begin, end);\n offset = begin * 4;\n }\n return {data, offset};\n }\n\n // Set a map of values\n setUniforms(values) {\n for (const key in values) {\n this._setValue(key, values[key]);\n }\n return this;\n }\n\n _setValue(key, value) {\n const layout = this.layout[key];\n assert(layout, 'UniformLayoutStd140 illegal argument');\n const typedArray = this.typedArray[layout.type];\n if (layout.size === 1) {\n // single value -> just set it\n typedArray[layout.offset] = value;\n } else {\n // vector/matrix -> copy the supplied (typed) array, starting from offset\n typedArray.set(value, layout.offset);\n }\n }\n\n _addUniform(key, uniformType) {\n const typeAndComponents = decomposeCompositeGLType(uniformType);\n assert(typeAndComponents, ERR_ARGUMENT);\n const {type, components: count} = typeAndComponents;\n\n // First, align (bump) current offset to an even multiple of current object (1, 2, 4)\n this.size = this._alignTo(this.size, count);\n // Use the aligned size as the offset of the current uniform.\n const offset = this.size;\n // Then, add our object's padded size ((1, 2, multiple of 4) to the current offset\n this.size += count;\n\n this.layout[key] = {type, size: count, offset};\n }\n\n // Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes)\n _alignTo(size, count) {\n switch (count) {\n case 1:\n return size; // Pad upwards to even multiple of 2\n case 2:\n return size + (size % 2); // Pad upwards to even multiple of 2\n default:\n return size + ((4 - (size % 4)) % 4); // Pad upwards to even multiple of 4\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -65,7 +65,7 @@ function toTypedArray(value, uniformLength, Type, cache) {
|
|
|
65
65
|
const length = value.length;
|
|
66
66
|
|
|
67
67
|
if (length % uniformLength) {
|
|
68
|
-
log.warn(
|
|
68
|
+
log.warn("Uniform size should be multiples of ".concat(uniformLength), value)();
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
if (value instanceof Type) {
|
|
@@ -102,7 +102,7 @@ export function getUniformSetter(gl, location, info) {
|
|
|
102
102
|
const setter = UNIFORM_SETTERS[info.type];
|
|
103
103
|
|
|
104
104
|
if (!setter) {
|
|
105
|
-
throw new Error(
|
|
105
|
+
throw new Error("Unknown GLSL uniform type ".concat(info.type));
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
return setter().bind(null, gl, location);
|
|
@@ -120,7 +120,7 @@ export function parseUniformName(name) {
|
|
|
120
120
|
const matches = name.match(UNIFORM_NAME_REGEXP);
|
|
121
121
|
|
|
122
122
|
if (!matches || matches.length < 2) {
|
|
123
|
-
throw new Error(
|
|
123
|
+
throw new Error("Failed to parse GLSL uniform name ".concat(name));
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
return {
|
|
@@ -135,9 +135,9 @@ export function checkUniformValues(uniforms, source, uniformMap) {
|
|
|
135
135
|
const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);
|
|
136
136
|
|
|
137
137
|
if (shouldCheck && !checkUniformValue(value)) {
|
|
138
|
-
source = source ?
|
|
139
|
-
console.error(
|
|
140
|
-
throw new Error(
|
|
138
|
+
source = source ? "".concat(source, " ") : '';
|
|
139
|
+
console.error("".concat(source, " Bad uniform ").concat(uniformName), value);
|
|
140
|
+
throw new Error("".concat(source, " Bad uniform ").concat(uniformName));
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/uniforms.js"],"names":["log","Framebuffer","Renderbuffer","Texture","assert","UNIFORM_SETTERS","getArraySetter","bind","toFloatArray","setVectorUniform","toIntArray","setMatrixUniform","getSamplerSetter","toUIntArray","FLOAT_ARRAY","INT_ARRAY","UINT_ARRAY","array1","toTypedArray","value","uniformLength","Type","cache","Number","isFinite","length","warn","result","i","Float32Array","Int32Array","Uint32Array","getUniformSetter","gl","location","info","setter","type","Error","parseUniformName","name","isArray","UNIFORM_NAME_REGEXP","matches","match","Boolean","checkUniformValues","uniforms","source","uniformMap","uniformName","shouldCheck","checkUniformValue","console","error","Array","ArrayBuffer","isView","checkUniformArray","texture","copyUniform","key","dest","len","slice","checkLength","Math","min","update","uniform1i","functionName","toArray","size","uniformSetter","cacheLength","arrayValue","set"],"mappings":"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","sourcesContent":["/** @typedef {import('./uniforms')} types */\n\nimport GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\n\nimport Framebuffer from './framebuffer';\nimport Renderbuffer from './renderbuffer';\nimport Texture from './texture';\nimport {assert} from '../utils/assert';\n\nconst UNIFORM_SETTERS = {\n // WEBGL1\n\n /* eslint-disable max-len */\n [GL.FLOAT]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n [GL.FLOAT_VEC2]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n [GL.FLOAT_VEC3]: getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n [GL.FLOAT_VEC4]: getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n\n [GL.INT]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.INT_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.INT_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.INT_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n [GL.BOOL]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.BOOL_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.BOOL_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.BOOL_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2]: getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n [GL.FLOAT_MAT3]: getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n [GL.FLOAT_MAT4]: getArraySetter.bind(\n null,\n 'uniformMatrix4fv',\n toFloatArray,\n 16,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n // WEBGL2 - unsigned integers, irregular matrices, additional texture samplers\n\n [GL.UNSIGNED_INT]: getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n [GL.UNSIGNED_INT_VEC2]: getArraySetter.bind(\n null,\n 'uniform2uiv',\n toUIntArray,\n 2,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC3]: getArraySetter.bind(\n null,\n 'uniform3uiv',\n toUIntArray,\n 3,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC4]: getArraySetter.bind(\n null,\n 'uniform4uiv',\n toUIntArray,\n 4,\n setVectorUniform\n ),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2x3]: getArraySetter.bind(\n null,\n 'uniformMatrix2x3fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT2x4]: getArraySetter.bind(\n null,\n 'uniformMatrix2x4fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x2]: getArraySetter.bind(\n null,\n 'uniformMatrix3x2fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x4]: getArraySetter.bind(\n null,\n 'uniformMatrix3x4fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x2]: getArraySetter.bind(\n null,\n 'uniformMatrix4x2fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x3]: getArraySetter.bind(\n null,\n 'uniformMatrix4x3fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n [GL.SAMPLER_3D]: getSamplerSetter,\n [GL.SAMPLER_2D_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_CUBE_SHADOW]: getSamplerSetter,\n [GL.INT_SAMPLER_2D]: getSamplerSetter,\n [GL.INT_SAMPLER_3D]: getSamplerSetter,\n [GL.INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.INT_SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_3D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: getSamplerSetter\n /* eslint-enable max-len */\n};\n\n// Pre-allocated typed arrays for temporary conversion\nconst FLOAT_ARRAY = {};\nconst INT_ARRAY = {};\nconst UINT_ARRAY = {};\n\nconst array1 = [0];\n\n// Functions to ensure the type of uniform values\n// This is done because uniform*v functions\n// are extremely slow when consuming JS arrays directly.\nfunction toTypedArray(value, uniformLength, Type, cache) {\n // convert boolean uniforms to Number\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n const length = value.length;\n if (length % uniformLength) {\n log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();\n }\n\n if (value instanceof Type) {\n return value;\n }\n let result = cache[length];\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n for (let i = 0; i < length; i++) {\n result[i] = value[i];\n }\n return result;\n}\n\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\n\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\n\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n} // Returns a Magic Uniform Setter\n\n// PUBLIC API\n\n/** @type {types['getUniformSetter']} */ export function getUniformSetter(gl, location, info) {\n const setter = UNIFORM_SETTERS[info.type];\n if (!setter) {\n throw new Error(`Unknown GLSL uniform type ${info.type}`);\n }\n\n // NOTE(Tarek): This construction is the ensure\n // separate caches for all setters.\n return setter().bind(null, gl, location);\n}\n\n/** @type {types['parseUniformName']} */\nexport function parseUniformName(name) {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] || 1,\n isArray: Boolean(matches[2])\n };\n} // To facilitate early detection of e.g. undefined values in JavaScript\n\n// Basic checks of uniform values (with or without knowledge of program)\n\n/** @type {types['checkUniformValues']} */\nexport function checkUniformValues(uniforms, source, uniformMap) {\n for (const uniformName in uniforms) {\n const value = uniforms[uniformName];\n const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);\n if (shouldCheck && !checkUniformValue(value)) {\n // Add space to source\n source = source ? `${source} ` : '';\n // Value could be unprintable so write the object on console\n console.error(`${source} Bad uniform ${uniformName}`, value); // eslint-disable-line\n /* eslint-enable no-console */\n throw new Error(`${source} Bad uniform ${uniformName}`);\n }\n }\n return true;\n}\n\n// TODO use type information during validation\nfunction checkUniformValue(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return checkUniformArray(value);\n }\n\n // Check if single value is a number\n if (isFinite(value)) {\n return true;\n } else if (value === true || value === false) {\n return true;\n } else if (value instanceof Texture) {\n return true;\n } else if (value instanceof Renderbuffer) {\n return true;\n } else if (value instanceof Framebuffer) {\n return Boolean(value.texture);\n }\n return false;\n}\n\n/** @type {types['copyUniform']} */\nexport function copyUniform(uniforms, key, value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n if (uniforms[key]) {\n const dest = uniforms[key];\n // @ts-ignore\n for (let i = 0, len = value.length; i < len; ++i) {\n dest[i] = value[i];\n }\n } else {\n // @ts-ignore\n uniforms[key] = value.slice();\n }\n } else {\n uniforms[key] = value;\n }\n}\n\n// HELPERS\n\nfunction checkUniformArray(value) {\n // Check that every element in array is a number, and at least 1 element\n if (value.length === 0) {\n return false;\n }\n\n const checkLength = Math.min(value.length, 16);\n\n for (let i = 0; i < checkLength; ++i) {\n if (!Number.isFinite(value[i])) {\n return false;\n }\n }\n\n return true;\n}\n\n// NOTE(Tarek): Setters maintain a cache\n// of the previously set value, and\n// avoid resetting it if it's the same.\nfunction getSamplerSetter() {\n let cache = null;\n return (gl, location, value) => {\n const update = cache !== value;\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n\n return update;\n };\n}\n\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n let cache = null;\n let cacheLength = null;\n return (gl, location, value) => {\n const arrayValue = toArray(value, size);\n const length = arrayValue.length;\n let update = false;\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n } else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n for (let i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n\n return update;\n };\n}\n\nfunction setVectorUniform(gl, functionName, location, value) {\n gl[functionName](location, value);\n}\n\nfunction setMatrixUniform(gl, functionName, location, value) {\n gl[functionName](location, false, value);\n}\n"],"file":"uniforms.js"}
|
|
1
|
+
{"version":3,"file":"uniforms.js","names":["log","Framebuffer","Renderbuffer","Texture","assert","UNIFORM_SETTERS","getArraySetter","bind","toFloatArray","setVectorUniform","toIntArray","setMatrixUniform","getSamplerSetter","toUIntArray","FLOAT_ARRAY","INT_ARRAY","UINT_ARRAY","array1","toTypedArray","value","uniformLength","Type","cache","Number","isFinite","length","warn","result","i","Float32Array","Int32Array","Uint32Array","getUniformSetter","gl","location","info","setter","type","Error","parseUniformName","name","isArray","UNIFORM_NAME_REGEXP","matches","match","Boolean","checkUniformValues","uniforms","source","uniformMap","uniformName","shouldCheck","checkUniformValue","console","error","Array","ArrayBuffer","isView","checkUniformArray","texture","copyUniform","key","dest","len","slice","checkLength","Math","min","update","uniform1i","functionName","toArray","size","uniformSetter","cacheLength","arrayValue","set"],"sources":["../../../src/classes/uniforms.js"],"sourcesContent":["/** @typedef {import('./uniforms')} types */\n\nimport GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\n\nimport Framebuffer from './framebuffer';\nimport Renderbuffer from './renderbuffer';\nimport Texture from './texture';\nimport {assert} from '../utils/assert';\n\nconst UNIFORM_SETTERS = {\n // WEBGL1\n\n /* eslint-disable max-len */\n [GL.FLOAT]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n [GL.FLOAT_VEC2]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n [GL.FLOAT_VEC3]: getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n [GL.FLOAT_VEC4]: getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n\n [GL.INT]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.INT_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.INT_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.INT_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n [GL.BOOL]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.BOOL_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.BOOL_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.BOOL_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2]: getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n [GL.FLOAT_MAT3]: getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n [GL.FLOAT_MAT4]: getArraySetter.bind(\n null,\n 'uniformMatrix4fv',\n toFloatArray,\n 16,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n // WEBGL2 - unsigned integers, irregular matrices, additional texture samplers\n\n [GL.UNSIGNED_INT]: getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n [GL.UNSIGNED_INT_VEC2]: getArraySetter.bind(\n null,\n 'uniform2uiv',\n toUIntArray,\n 2,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC3]: getArraySetter.bind(\n null,\n 'uniform3uiv',\n toUIntArray,\n 3,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC4]: getArraySetter.bind(\n null,\n 'uniform4uiv',\n toUIntArray,\n 4,\n setVectorUniform\n ),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2x3]: getArraySetter.bind(\n null,\n 'uniformMatrix2x3fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT2x4]: getArraySetter.bind(\n null,\n 'uniformMatrix2x4fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x2]: getArraySetter.bind(\n null,\n 'uniformMatrix3x2fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x4]: getArraySetter.bind(\n null,\n 'uniformMatrix3x4fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x2]: getArraySetter.bind(\n null,\n 'uniformMatrix4x2fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x3]: getArraySetter.bind(\n null,\n 'uniformMatrix4x3fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n [GL.SAMPLER_3D]: getSamplerSetter,\n [GL.SAMPLER_2D_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_CUBE_SHADOW]: getSamplerSetter,\n [GL.INT_SAMPLER_2D]: getSamplerSetter,\n [GL.INT_SAMPLER_3D]: getSamplerSetter,\n [GL.INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.INT_SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_3D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: getSamplerSetter\n /* eslint-enable max-len */\n};\n\n// Pre-allocated typed arrays for temporary conversion\nconst FLOAT_ARRAY = {};\nconst INT_ARRAY = {};\nconst UINT_ARRAY = {};\n\nconst array1 = [0];\n\n// Functions to ensure the type of uniform values\n// This is done because uniform*v functions\n// are extremely slow when consuming JS arrays directly.\nfunction toTypedArray(value, uniformLength, Type, cache) {\n // convert boolean uniforms to Number\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n const length = value.length;\n if (length % uniformLength) {\n log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();\n }\n\n if (value instanceof Type) {\n return value;\n }\n let result = cache[length];\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n for (let i = 0; i < length; i++) {\n result[i] = value[i];\n }\n return result;\n}\n\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\n\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\n\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n} // Returns a Magic Uniform Setter\n\n// PUBLIC API\n\n/** @type {types['getUniformSetter']} */ export function getUniformSetter(gl, location, info) {\n const setter = UNIFORM_SETTERS[info.type];\n if (!setter) {\n throw new Error(`Unknown GLSL uniform type ${info.type}`);\n }\n\n // NOTE(Tarek): This construction is the ensure\n // separate caches for all setters.\n return setter().bind(null, gl, location);\n}\n\n/** @type {types['parseUniformName']} */\nexport function parseUniformName(name) {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] || 1,\n isArray: Boolean(matches[2])\n };\n} // To facilitate early detection of e.g. undefined values in JavaScript\n\n// Basic checks of uniform values (with or without knowledge of program)\n\n/** @type {types['checkUniformValues']} */\nexport function checkUniformValues(uniforms, source, uniformMap) {\n for (const uniformName in uniforms) {\n const value = uniforms[uniformName];\n const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);\n if (shouldCheck && !checkUniformValue(value)) {\n // Add space to source\n source = source ? `${source} ` : '';\n // Value could be unprintable so write the object on console\n console.error(`${source} Bad uniform ${uniformName}`, value); // eslint-disable-line\n /* eslint-enable no-console */\n throw new Error(`${source} Bad uniform ${uniformName}`);\n }\n }\n return true;\n}\n\n// TODO use type information during validation\nfunction checkUniformValue(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return checkUniformArray(value);\n }\n\n // Check if single value is a number\n if (isFinite(value)) {\n return true;\n } else if (value === true || value === false) {\n return true;\n } else if (value instanceof Texture) {\n return true;\n } else if (value instanceof Renderbuffer) {\n return true;\n } else if (value instanceof Framebuffer) {\n return Boolean(value.texture);\n }\n return false;\n}\n\n/** @type {types['copyUniform']} */\nexport function copyUniform(uniforms, key, value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n if (uniforms[key]) {\n const dest = uniforms[key];\n // @ts-ignore\n for (let i = 0, len = value.length; i < len; ++i) {\n dest[i] = value[i];\n }\n } else {\n // @ts-ignore\n uniforms[key] = value.slice();\n }\n } else {\n uniforms[key] = value;\n }\n}\n\n// HELPERS\n\nfunction checkUniformArray(value) {\n // Check that every element in array is a number, and at least 1 element\n if (value.length === 0) {\n return false;\n }\n\n const checkLength = Math.min(value.length, 16);\n\n for (let i = 0; i < checkLength; ++i) {\n if (!Number.isFinite(value[i])) {\n return false;\n }\n }\n\n return true;\n}\n\n// NOTE(Tarek): Setters maintain a cache\n// of the previously set value, and\n// avoid resetting it if it's the same.\nfunction getSamplerSetter() {\n let cache = null;\n return (gl, location, value) => {\n const update = cache !== value;\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n\n return update;\n };\n}\n\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n let cache = null;\n let cacheLength = null;\n return (gl, location, value) => {\n const arrayValue = toArray(value, size);\n const length = arrayValue.length;\n let update = false;\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n } else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n for (let i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n\n return update;\n };\n}\n\nfunction setVectorUniform(gl, functionName, location, value) {\n gl[functionName](location, value);\n}\n\nfunction setMatrixUniform(gl, functionName, location, value) {\n gl[functionName](location, false, value);\n}\n"],"mappings":"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"}
|
|
@@ -3,14 +3,16 @@ import Buffer from './buffer';
|
|
|
3
3
|
import { isWebGL2 } from '@luma.gl/gltools';
|
|
4
4
|
import { getScratchArray, fillArray } from '../utils/array-utils-flat';
|
|
5
5
|
import { assert } from '../utils/assert';
|
|
6
|
-
import { getBrowser } from 'probe.gl';
|
|
6
|
+
import { getBrowser } from '@probe.gl/env';
|
|
7
7
|
const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
|
|
8
8
|
export default class VertexArrayObject extends Resource {
|
|
9
9
|
get [Symbol.toStringTag]() {
|
|
10
10
|
return 'VertexArrayObject';
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
static isSupported(gl
|
|
13
|
+
static isSupported(gl) {
|
|
14
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
15
|
+
|
|
14
16
|
if (options.constantAttributeZero) {
|
|
15
17
|
return isWebGL2(gl) || getBrowser() === 'Chrome';
|
|
16
18
|
}
|
|
@@ -58,7 +60,8 @@ export default class VertexArrayObject extends Resource {
|
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
|
|
61
|
-
constructor(gl
|
|
63
|
+
constructor(gl) {
|
|
64
|
+
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
62
65
|
const id = opts.id || opts.program && opts.program.id;
|
|
63
66
|
super(gl, Object.assign({}, opts, {
|
|
64
67
|
id
|
|
@@ -85,7 +88,8 @@ export default class VertexArrayObject extends Resource {
|
|
|
85
88
|
return VertexArrayObject.getMaxAttributes(this.gl);
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
initialize(
|
|
91
|
+
initialize() {
|
|
92
|
+
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
89
93
|
return this.setProps(props);
|
|
90
94
|
}
|
|
91
95
|
|
|
@@ -93,7 +97,9 @@ export default class VertexArrayObject extends Resource {
|
|
|
93
97
|
return this;
|
|
94
98
|
}
|
|
95
99
|
|
|
96
|
-
setElementBuffer(
|
|
100
|
+
setElementBuffer() {
|
|
101
|
+
let elementBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
102
|
+
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
97
103
|
assert(!elementBuffer || elementBuffer.target === 34963, ERR_ELEMENTS);
|
|
98
104
|
this.bind(() => {
|
|
99
105
|
this.gl.bindBuffer(34963, elementBuffer ? elementBuffer.handle : null);
|
|
@@ -136,7 +142,8 @@ export default class VertexArrayObject extends Resource {
|
|
|
136
142
|
return this;
|
|
137
143
|
}
|
|
138
144
|
|
|
139
|
-
enable(location
|
|
145
|
+
enable(location) {
|
|
146
|
+
let enable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
140
147
|
const disablingAttributeZero = !enable && location === 0 && !VertexArrayObject.isSupported(this.gl, {
|
|
141
148
|
constantAttributeZero: true
|
|
142
149
|
});
|
|
@@ -283,9 +290,10 @@ export default class VertexArrayObject extends Resource {
|
|
|
283
290
|
this.gl2.bindVertexArray(handle);
|
|
284
291
|
}
|
|
285
292
|
|
|
286
|
-
_getParameter(pname, {
|
|
287
|
-
|
|
288
|
-
|
|
293
|
+
_getParameter(pname, _ref) {
|
|
294
|
+
let {
|
|
295
|
+
location
|
|
296
|
+
} = _ref;
|
|
289
297
|
assert(Number.isFinite(location));
|
|
290
298
|
return this.bind(() => {
|
|
291
299
|
switch (pname) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/vertex-array-object.js"],"names":["Resource","Buffer","isWebGL2","getScratchArray","fillArray","assert","getBrowser","ERR_ELEMENTS","VertexArrayObject","Symbol","toStringTag","isSupported","gl","options","constantAttributeZero","getDefaultArray","luma","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","Object","assign","buffer","bufferValue","gl2","initialize","seal","delete","props","setProps","setElementBuffer","elementBuffer","target","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","getVertexAttribOffset","getVertexAttrib"],"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"}
|
|
1
|
+
{"version":3,"file":"vertex-array-object.js","names":["Resource","Buffer","isWebGL2","getScratchArray","fillArray","assert","getBrowser","ERR_ELEMENTS","VertexArrayObject","Symbol","toStringTag","isSupported","gl","options","constantAttributeZero","getDefaultArray","luma","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","Object","assign","buffer","bufferValue","gl2","initialize","seal","delete","props","setProps","setElementBuffer","elementBuffer","target","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","getVertexAttribOffset","getVertexAttrib"],"sources":["../../../src/classes/vertex-array-object.js"],"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/env';\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"],"mappings":"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"}
|
|
@@ -8,7 +8,8 @@ const ERR_ATTRIBUTE_TYPE = 'VertexArray: attributes must be Buffers or constants
|
|
|
8
8
|
const MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;
|
|
9
9
|
const DEPRECATIONS_V6 = ['setBuffers', 'setGeneric', 'clearBindings', 'setLocations', 'setGenericValues', 'setDivisor', 'enable', 'disable'];
|
|
10
10
|
export default class VertexArray {
|
|
11
|
-
constructor(gl
|
|
11
|
+
constructor(gl) {
|
|
12
|
+
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
12
13
|
const id = opts.id || opts.program && opts.program.id;
|
|
13
14
|
this.id = id;
|
|
14
15
|
this.gl = gl;
|
|
@@ -35,7 +36,8 @@ export default class VertexArray {
|
|
|
35
36
|
this.vertexArrayObject.delete();
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
initialize(
|
|
39
|
+
initialize() {
|
|
40
|
+
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
39
41
|
this.reset();
|
|
40
42
|
this.configuration = null;
|
|
41
43
|
this.bindOnUse = false;
|
|
@@ -102,7 +104,9 @@ export default class VertexArray {
|
|
|
102
104
|
return this;
|
|
103
105
|
}
|
|
104
106
|
|
|
105
|
-
setElementBuffer(
|
|
107
|
+
setElementBuffer() {
|
|
108
|
+
let elementBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
109
|
+
let accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
106
110
|
this.elements = elementBuffer;
|
|
107
111
|
this.elementsAccessor = accessor;
|
|
108
112
|
this.clearDrawParams();
|
|
@@ -110,7 +114,9 @@ export default class VertexArray {
|
|
|
110
114
|
return this;
|
|
111
115
|
}
|
|
112
116
|
|
|
113
|
-
setBuffer(locationOrName, buffer
|
|
117
|
+
setBuffer(locationOrName, buffer) {
|
|
118
|
+
let appAccessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
119
|
+
|
|
114
120
|
if (buffer.target === 34963) {
|
|
115
121
|
return this.setElementBuffer(buffer, appAccessor);
|
|
116
122
|
}
|
|
@@ -130,7 +136,9 @@ export default class VertexArray {
|
|
|
130
136
|
return this;
|
|
131
137
|
}
|
|
132
138
|
|
|
133
|
-
setConstant(locationOrName, arrayValue
|
|
139
|
+
setConstant(locationOrName, arrayValue) {
|
|
140
|
+
let appAccessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
141
|
+
|
|
134
142
|
const {
|
|
135
143
|
location,
|
|
136
144
|
accessor
|
|
@@ -212,7 +220,7 @@ export default class VertexArray {
|
|
|
212
220
|
|
|
213
221
|
if (!Number.isFinite(location) || location < 0) {
|
|
214
222
|
this.unused[locationOrName] = value;
|
|
215
|
-
log.once(3, () =>
|
|
223
|
+
log.once(3, () => "unused value ".concat(locationOrName, " in ").concat(this.id))();
|
|
216
224
|
return INVALID_RESULT;
|
|
217
225
|
}
|
|
218
226
|
|
|
@@ -378,7 +386,9 @@ export default class VertexArray {
|
|
|
378
386
|
}
|
|
379
387
|
}
|
|
380
388
|
|
|
381
|
-
setElements(
|
|
389
|
+
setElements() {
|
|
390
|
+
let elementBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
391
|
+
let accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
382
392
|
log.deprecated('setElements', 'setElementBuffer')();
|
|
383
393
|
return this.setElementBuffer(elementBuffer, accessor);
|
|
384
394
|
}
|