@luma.gl/webgl 9.0.0-alpha.11 → 9.0.0-alpha.12
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/adapter/converters/device-parameters.js +1 -12
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +0 -9
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +3 -0
- package/dist/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +4 -0
- package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +2 -4
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +1 -1
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/adapter/objects/webgl-resource.d.ts +2 -4
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +1 -7
- package/dist/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +0 -1
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +0 -2
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +0 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +2 -2
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +4 -32
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts +1 -0
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +4 -0
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +2 -2
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +1 -3
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +3 -0
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +2 -3
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +5 -4
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/classic/buffer.d.ts.map +1 -1
- package/dist/classic/buffer.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +1 -7
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts +103 -103
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +15 -14
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/context/{context/context-state.d.ts → polyfill/context-data.d.ts} +3 -3
- package/dist/context/polyfill/context-data.d.ts.map +1 -0
- package/dist/context/polyfill/context-data.js +14 -0
- package/dist/context/polyfill/context-data.js.map +1 -0
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +4 -4
- package/dist/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/context/polyfill/polyfill-table.d.ts +7 -7
- package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-table.js +5 -4
- package/dist/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +0 -1
- package/dist/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +1 -1
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/es5/adapter/converters/device-parameters.js +1 -12
- package/dist/es5/adapter/converters/device-parameters.js.map +1 -1
- package/dist/es5/adapter/converters/texture-formats.js +1 -10
- package/dist/es5/adapter/converters/texture-formats.js.map +1 -1
- package/dist/es5/adapter/converters/vertex-formats.js +3 -0
- package/dist/es5/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/es5/adapter/device-helpers/get-device-info.js +4 -0
- package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/es5/adapter/helpers/get-shader-layout.js +2 -4
- package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/es5/adapter/helpers/set-uniform.js +1 -1
- package/dist/es5/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/es5/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/es5/adapter/objects/webgl-renderbuffer.js +1 -1
- package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/es5/adapter/objects/webgl-resource.js +1 -6
- package/dist/es5/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-buffer.js +0 -1
- package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-framebuffer.js +2 -1
- package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-render-pipeline.js +2 -38
- package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-sampler.js +5 -0
- package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-texture.js +1 -7
- package/dist/es5/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/es5/adapter/webgl-canvas-context.js +2 -0
- package/dist/es5/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/es5/adapter/webgl-device.js +4 -3
- package/dist/es5/adapter/webgl-device.js.map +1 -1
- package/dist/es5/classic/buffer.js.map +1 -1
- package/dist/es5/context/debug/webgl-developer-tools.js +1 -7
- package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/es5/context/parameters/webgl-parameter-tables.js +10 -9
- package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/es5/context/polyfill/context-data.js +21 -0
- package/dist/es5/context/polyfill/context-data.js.map +1 -0
- package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/es5/context/polyfill/polyfill-context.js +4 -4
- package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/es5/context/polyfill/polyfill-table.js +5 -4
- package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/es5/context/state-tracker/track-context-state.js +0 -1
- package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/es5/context/state-tracker/with-parameters.js +4 -2
- package/dist/es5/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/esm/adapter/converters/device-parameters.js +1 -12
- package/dist/esm/adapter/converters/device-parameters.js.map +1 -1
- package/dist/esm/adapter/converters/texture-formats.js +0 -9
- package/dist/esm/adapter/converters/texture-formats.js.map +1 -1
- package/dist/esm/adapter/converters/vertex-formats.js +3 -0
- package/dist/esm/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/esm/adapter/device-helpers/get-device-info.js +4 -0
- package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/esm/adapter/helpers/get-shader-layout.js +2 -4
- package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/esm/adapter/helpers/set-uniform.js +1 -1
- package/dist/esm/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/esm/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/esm/adapter/objects/webgl-renderbuffer.js +1 -1
- package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/esm/adapter/objects/webgl-resource.js +1 -7
- package/dist/esm/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-buffer.js +0 -2
- package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-framebuffer.js +2 -2
- package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-render-pipeline.js +4 -32
- package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-sampler.js +4 -0
- package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-texture.js +1 -3
- package/dist/esm/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/esm/adapter/webgl-canvas-context.js +3 -0
- package/dist/esm/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/esm/adapter/webgl-device.js +5 -4
- package/dist/esm/adapter/webgl-device.js.map +1 -1
- package/dist/esm/classic/buffer.js.map +1 -1
- package/dist/esm/context/debug/webgl-developer-tools.js +1 -7
- package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/esm/context/parameters/webgl-parameter-tables.js +15 -14
- package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/esm/context/polyfill/context-data.js +14 -0
- package/dist/esm/context/polyfill/context-data.js.map +1 -0
- package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/esm/context/polyfill/polyfill-context.js +4 -4
- package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/esm/context/polyfill/polyfill-table.js +5 -4
- package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/esm/context/state-tracker/track-context-state.js +0 -1
- package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/esm/context/state-tracker/with-parameters.js +1 -1
- package/dist/esm/context/state-tracker/with-parameters.js.map +1 -1
- package/package.json +4 -4
- package/src/adapter/converters/device-parameters.ts +11 -11
- package/src/adapter/converters/texture-formats.ts +12 -12
- package/src/adapter/converters/vertex-formats.ts +1 -0
- package/src/adapter/device-helpers/device-features.ts +0 -1
- package/src/adapter/device-helpers/get-device-info.ts +5 -1
- package/src/adapter/helpers/get-shader-layout.ts +18 -15
- package/src/adapter/helpers/set-uniform.ts +1 -1
- package/src/adapter/objects/constants-to-keys.ts +4 -1
- package/src/adapter/objects/webgl-renderbuffer.ts +5 -5
- package/src/adapter/objects/webgl-resource.ts +7 -12
- package/src/adapter/objects/webgl-vertex-array-object.ts +4 -4
- package/src/adapter/resources/webgl-buffer.ts +4 -4
- package/src/adapter/resources/webgl-command-encoder.ts +4 -4
- package/src/adapter/resources/webgl-framebuffer.ts +6 -5
- package/src/adapter/resources/webgl-render-pipeline.ts +24 -23
- package/src/adapter/resources/webgl-sampler.ts +5 -1
- package/src/adapter/resources/webgl-shader.ts +1 -1
- package/src/adapter/resources/webgl-texture.ts +5 -7
- package/src/adapter/webgl-canvas-context.ts +1 -0
- package/src/adapter/webgl-device.ts +10 -12
- package/src/classic/buffer.ts +7 -4
- package/src/context/debug/webgl-developer-tools.ts +7 -7
- package/src/context/parameters/unified-parameter-api.ts +1 -1
- package/src/context/parameters/webgl-parameter-tables.ts +113 -94
- package/src/context/{context/context-state.ts → polyfill/context-data.ts} +6 -10
- package/src/context/polyfill/get-parameter-polyfill.ts +7 -6
- package/src/context/polyfill/polyfill-context.ts +5 -5
- package/src/context/polyfill/polyfill-table.ts +14 -13
- package/src/context/state-tracker/track-context-state.ts +0 -1
- package/src/context/state-tracker/with-parameters.ts +2 -1
- package/dist/context/context/context-state.d.ts.map +0 -1
- package/dist/context/context/context-state.js +0 -21
- package/dist/context/context/context-state.js.map +0 -1
- package/dist/es5/context/context/context-state.js +0 -26
- package/dist/es5/context/context/context-state.js.map +0 -1
- package/dist/esm/context/context/context-state.js +0 -21
- package/dist/esm/context/context/context-state.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/context/state-tracker/track-context-state.ts"],"names":["assert","GL_PARAMETER_DEFAULTS","GL_HOOKED_SETTERS","NON_CACHE_PARAMETERS","setParameters","getParameters","deepArrayEqual","GLState","constructor","gl","copyState","log","cache","Object","assign","_updateCache","bind","seal","push","values","stateStack","pop","length","oldValues","valueChanged","oldValue","key","undefined","value","cached","getContextState","state","trackContextState","options","enable","global_","global","window","installProgramSpy","setter","installSetterSpy","installGetterOverride","glState","pushContextState","popContextState","functionName","originalGetterFunc","get","pname","has","defineProperty","configurable","originalSetterFunc","set","params","originalUseProgram","useProgram","useProgramLuma","handle","program"],"mappings":";AAEA,SAAQA,MAAR,QAAqB,cAArB;AACA,SAAQC,qBAAR,EAA+BC,iBAA/B,EAAkDC,oBAAlD,QAA6E,sCAA7E;AACA,SAAQC,aAAR,EAAuBC,aAAvB,QAA2C,qCAA3C;AACA,SAAQC,cAAR,QAA6B,oBAA7B;;AAKA,MAAMC,OAAN,CAAc;AAQZC,EAAAA,WAAW,CACTC,EADS,EAET;AACEC,IAAAA,SAAS,GAAG,KADd;AAEEC,IAAAA,GAAG,GAAG,MAAM,CAAE;AAFhB,MAGI,EALK,EAMT;AAAA;;AAAA,qCAZiB,IAYjB;;AAAA,wCAXqB,EAWrB;;AAAA,oCAVO,IAUP;;AAAA;;AAAA;;AACA,SAAKF,EAAL,GAAUA,EAAV;AACA,SAAKG,KAAL,GAAaF,SAAS,GAAGL,aAAa,CAACI,EAAD,CAAhB,GAAuBI,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBb,qBAAlB,CAA7C;AACA,SAAKU,GAAL,GAAWA,GAAX;AAEA,SAAKI,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAApB;AACAH,IAAAA,MAAM,CAACI,IAAP,CAAY,IAAZ;AACD;;AAEDC,EAAAA,IAAI,CAACC,MAAM,GAAG,EAAV,EAAc;AAChB,SAAKC,UAAL,CAAgBF,IAAhB,CAAqB,EAArB;AACD;;AAEDG,EAAAA,GAAG,GAAG;AACJrB,IAAAA,MAAM,CAAC,KAAKoB,UAAL,CAAgBE,MAAhB,GAAyB,CAA1B,CAAN;AAEA,UAAMC,SAAS,GAAG,KAAKH,UAAL,CAAgB,KAAKA,UAAL,CAAgBE,MAAhB,GAAyB,CAAzC,CAAlB;AACAlB,IAAAA,aAAa,CAAC,KAAKK,EAAN,EAAUc,SAAV,CAAb;AAEA,SAAKH,UAAL,CAAgBC,GAAhB;AACD;;AAQDN,EAAAA,YAAY,CAACI,MAAD,EAAwC;AAClD,QAAIK,YAAY,GAAG,KAAnB;AACA,QAAIC,QAAJ;AAEA,UAAMF,SAA+C,GAAG,KAAKH,UAAL,CAAgBE,MAAhB,GAAyB,CAAzB,GAA6B,KAAKF,UAAL,CAAgB,KAAKA,UAAL,CAAgBE,MAAhB,GAAyB,CAAzC,CAA7B,GAA2E,IAAnI;;AAEA,SAAK,MAAMI,GAAX,IAAkBP,MAAlB,EAA0B;AACxBnB,MAAAA,MAAM,CAAC0B,GAAG,KAAKC,SAAT,CAAN;AACA,YAAMC,KAAK,GAAGT,MAAM,CAACO,GAAD,CAApB;AACA,YAAMG,MAAM,GAAG,KAAKjB,KAAL,CAAWc,GAAX,CAAf;;AAEA,UAAI,CAACpB,cAAc,CAACsB,KAAD,EAAQC,MAAR,CAAnB,EAAoC;AAClCL,QAAAA,YAAY,GAAG,IAAf;AACAC,QAAAA,QAAQ,GAAGI,MAAX;;AAKA,YAAIN,SAAS,IAAI,EAAEG,GAAG,IAAIH,SAAT,CAAjB,EAAsC;AACpCA,UAAAA,SAAS,CAACG,GAAD,CAAT,GAAiBG,MAAjB;AACD;;AAGD,aAAKjB,KAAL,CAAWc,GAAX,IAAkBE,KAAlB;AACD;AACF;;AAED,WAAO;AAACJ,MAAAA,YAAD;AAAeC,MAAAA;AAAf,KAAP;AACD;;AAtEW;;AAyEd,SAASK,eAAT,CAAyBrB,EAAzB,EAA6D;AAE3D,SAAOA,EAAE,CAACsB,KAAV;AACD;;AAYA,OAAO,SAASC,iBAAT,CACNvB,EADM,EAENwB,OAFM,EAOiB;AACvB,QAAM;AAACC,IAAAA,MAAM,GAAG,IAAV;AAAgBxB,IAAAA;AAAhB,MAA6BuB,OAAnC;AACAjC,EAAAA,MAAM,CAACU,SAAS,KAAKiB,SAAf,CAAN;;AAEA,MAAI,CAAClB,EAAE,CAACsB,KAAR,EAAe;AACb,UAAMI,OAAO,GAAG,OAAOC,MAAP,KAAkB,WAAlB,GAAgCA,MAAhC,GAAyCC,MAAzD;AASA5B,IAAAA,EAAE,CAACsB,KAAH,GAAW,IAAIxB,OAAJ,CAAYE,EAAZ,EAAgB;AAACC,MAAAA;AAAD,KAAhB,CAAX;AAEA4B,IAAAA,iBAAiB,CAAC7B,EAAD,CAAjB;;AAGA,SAAK,MAAMiB,GAAX,IAAkBxB,iBAAlB,EAAqC;AACnC,YAAMqC,MAAM,GAAGrC,iBAAiB,CAACwB,GAAD,CAAhC;AACAc,MAAAA,gBAAgB,CAAC/B,EAAD,EAAKiB,GAAL,EAAUa,MAAV,CAAhB;AACD;;AAGDE,IAAAA,qBAAqB,CAAChC,EAAD,EAAK,cAAL,CAArB;AACAgC,IAAAA,qBAAqB,CAAChC,EAAD,EAAK,WAAL,CAArB;AACD;;AAED,QAAMiC,OAAO,GAAGZ,eAAe,CAACrB,EAAD,CAA/B;AACAiC,EAAAA,OAAO,CAACR,MAAR,GAAiBA,MAAjB;AAEA,SAAOzB,EAAP;AACD;AAKA,OAAO,SAASkC,gBAAT,CAA0BlC,EAA1B,EAA2D;AACjE,MAAIiC,OAAO,GAAGZ,eAAe,CAACrB,EAAD,CAA7B;;AACA,MAAI,CAACiC,OAAL,EAAc;AACZV,IAAAA,iBAAiB,CAACvB,EAAD,EAAK;AAACC,MAAAA,SAAS,EAAE;AAAZ,KAAL,CAAjB;AACAgC,IAAAA,OAAO,GAAGZ,eAAe,CAACrB,EAAD,CAAzB;AACD;;AACDiC,EAAAA,OAAO,CAACxB,IAAR;AACD;AAMD,OAAO,SAAS0B,eAAT,CAAyBnC,EAAzB,EAA0D;AAC/D,QAAMiC,OAAO,GAAGZ,eAAe,CAACrB,EAAD,CAA/B;AACAT,EAAAA,MAAM,CAAC0C,OAAD,CAAN;AACAA,EAAAA,OAAO,CAACrB,GAAR;AACD;;AAUD,SAASoB,qBAAT,CAA+BhC,EAA/B,EAA0DoC,YAA1D,EAAgF;AAE9E,QAAMC,kBAAkB,GAAGrC,EAAE,CAACoC,YAAD,CAAF,CAAiB7B,IAAjB,CAAsBP,EAAtB,CAA3B;;AAGAA,EAAAA,EAAE,CAACoC,YAAD,CAAF,GAAmB,SAASE,GAAT,CAAaC,KAAb,EAAoB;AACrC,QAAIA,KAAK,KAAKrB,SAAV,IAAuBxB,oBAAoB,CAAC8C,GAArB,CAAyBD,KAAzB,CAA3B,EAA4D;AAE1D,aAAOF,kBAAkB,CAACE,KAAD,CAAzB;AACD;;AAED,UAAMN,OAAO,GAAGZ,eAAe,CAACrB,EAAD,CAA/B;;AACA,QAAI,EAAEuC,KAAK,IAAIN,OAAO,CAAC9B,KAAnB,CAAJ,EAA+B;AAE7B8B,MAAAA,OAAO,CAAC9B,KAAR,CAAcoC,KAAd,IAAuBF,kBAAkB,CAACE,KAAD,CAAzC;AACD;;AAGD,WAAON,OAAO,CAACR,MAAR,GAEHQ,OAAO,CAAC9B,KAAR,CAAcoC,KAAd,CAFG,GAIHF,kBAAkB,CAACE,KAAD,CAJtB;AAKD,GAlBD;;AAqBAnC,EAAAA,MAAM,CAACqC,cAAP,CAAsBzC,EAAE,CAACoC,YAAD,CAAxB,EAAwC,MAAxC,EAAgD;AAC9CjB,IAAAA,KAAK,YAAKiB,YAAL,gBADyC;AAE9CM,IAAAA,YAAY,EAAE;AAFgC,GAAhD;AAID;;AAWD,SAASX,gBAAT,CAA0B/B,EAA1B,EAAqDoC,YAArD,EAA2EN,MAA3E,EAAmF;AAEjF,MAAI,CAAC9B,EAAE,CAACoC,YAAD,CAAP,EAAuB;AAErB;AACD;;AAED,QAAMO,kBAAkB,GAAG3C,EAAE,CAACoC,YAAD,CAAF,CAAiB7B,IAAjB,CAAsBP,EAAtB,CAA3B;;AAGAA,EAAAA,EAAE,CAACoC,YAAD,CAAF,GAAmB,SAASQ,GAAT,CAAa,GAAGC,MAAhB,EAAwB;AAGzC,UAAMZ,OAAO,GAAGZ,eAAe,CAACrB,EAAD,CAA/B;AACA,UAAM;AAACe,MAAAA,YAAD;AAAeC,MAAAA;AAAf,QAA2Bc,MAAM,CAACG,OAAO,CAAC3B,YAAT,EAAuB,GAAGuC,MAA1B,CAAvC;;AAGA,QAAI9B,YAAJ,EAAkB;AAChB4B,MAAAA,kBAAkB,CAAC,GAAGE,MAAJ,CAAlB;AACD;;AAOD,WAAO7B,QAAP;AACD,GAjBD;;AAoBAZ,EAAAA,MAAM,CAACqC,cAAP,CAAsBzC,EAAE,CAACoC,YAAD,CAAxB,EAAwC,MAAxC,EAAgD;AAC9CjB,IAAAA,KAAK,YAAKiB,YAAL,cADyC;AAE9CM,IAAAA,YAAY,EAAE;AAFgC,GAAhD;AAID;;AAED,SAASb,iBAAT,CAA2B7B,EAA3B,EAA4D;AAC1D,QAAM8C,kBAAkB,GAAG9C,EAAE,CAAC+C,UAAH,CAAcxC,IAAd,CAAmBP,EAAnB,CAA3B;;AAEAA,EAAAA,EAAE,CAAC+C,UAAH,GAAgB,SAASC,cAAT,CAAwBC,MAAxB,EAAgC;AAC9C,UAAMhB,OAAO,GAAGZ,eAAe,CAACrB,EAAD,CAA/B;;AACA,QAAIiC,OAAO,CAACiB,OAAR,KAAoBD,MAAxB,EAAgC;AAC9BH,MAAAA,kBAAkB,CAACG,MAAD,CAAlB;AACAhB,MAAAA,OAAO,CAACiB,OAAR,GAAkBD,MAAlB;AACD;AACF,GAND;AAOD","sourcesContent":["// Support for listening to context state changes and intercepting state queries\n// NOTE: this system does not handle buffer bindings\nimport {assert} from '@luma.gl/api';\nimport {GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS} from '../parameters/webgl-parameter-tables';\nimport {setParameters, getParameters} from '../parameters/unified-parameter-api';\nimport {deepArrayEqual} from './deep-array-equal';\n\n// HELPER CLASS - GLState\n\n/* eslint-disable no-shadow */\nclass GLState {\n gl: WebGLRenderingContext;\n program: unknown = null;\n stateStack: object[] = [];\n enable = true;\n cache: Record<string, any>;\n log;\n\n constructor(\n gl: WebGLRenderingContext,\n {\n copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)\n log = () => {} // Logging function, called when gl parameter change calls are actually issued\n } = {}\n ) {\n this.gl = gl;\n this.cache = copyState ? getParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);\n this.log = log;\n\n this._updateCache = this._updateCache.bind(this);\n Object.seal(this);\n }\n\n push(values = {}) {\n this.stateStack.push({});\n }\n\n pop() {\n assert(this.stateStack.length > 0);\n // Use the saved values in the state stack to restore parameters\n const oldValues = this.stateStack[this.stateStack.length - 1];\n setParameters(this.gl, oldValues);\n // Don't pop until we have reset parameters (to make sure other \"stack frames\" are not affected)\n this.stateStack.pop();\n }\n\n /**\n // interceptor for context set functions - update our cache and our stack\n // values (Object) - the key values for this setter\n * @param values\n * @returns\n */\n _updateCache(values: {[key: number | string]: any}) {\n let valueChanged = false;\n let oldValue; // = undefined\n\n const oldValues: {[key: number | string]: any} | null = this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;\n\n for (const key in values) {\n assert(key !== undefined);\n const value = values[key];\n const cached = this.cache[key];\n // Check that value hasn't already been shadowed\n if (!deepArrayEqual(value, cached)) {\n valueChanged = true;\n oldValue = cached;\n\n // First, save current value being shadowed\n // If a state stack frame is active, save the current parameter values for pop\n // but first check that value hasn't already been shadowed and saved\n if (oldValues && !(key in oldValues)) {\n oldValues[key] = cached;\n }\n\n // Save current value being shadowed\n this.cache[key] = value;\n }\n }\n\n return {valueChanged, oldValue};\n }\n}\n\nfunction getContextState(gl: WebGLRenderingContext): GLState {\n // @ts-expect-error\n return gl.state as GLState;\n}\n\n// PUBLIC API\n\n/**\n * Initialize WebGL state caching on a context\n * can be called multiple times to enable/disable\n *\n * @note After calling this function, context state will be cached\n * gl.state.push() and gl.state.pop() will be available for saving,\n * temporarily modifying, and then restoring state.\n */\n export function trackContextState(\n gl: WebGLRenderingContext,\n options?: {\n enable?: boolean;\n copyState?: boolean;\n log?: any;\n }\n): WebGLRenderingContext {\n const {enable = true, copyState} = options;\n assert(copyState !== undefined);\n // @ts-expect-error\n if (!gl.state) {\n const global_ = typeof global !== 'undefined' ? global : window;\n // @ts-ignore\n // const {polyfillContext} = global_;\n // if (polyfillContext) {\n // polyfillContext(gl);\n // }\n\n // Create a state cache\n // @ts-expect-error\n gl.state = new GLState(gl, {copyState});\n\n installProgramSpy(gl);\n\n // intercept all setter functions in the table\n for (const key in GL_HOOKED_SETTERS) {\n const setter = GL_HOOKED_SETTERS[key];\n installSetterSpy(gl, key, setter);\n }\n\n // intercept all getter functions in the table\n installGetterOverride(gl, 'getParameter');\n installGetterOverride(gl, 'isEnabled');\n }\n\n const glState = getContextState(gl);\n glState.enable = enable;\n\n return gl;\n}\n\n/**\n * Saves current WebGL context state onto an internal per-context stack\n */\n export function pushContextState(gl: WebGLRenderingContext): void {\n let glState = getContextState(gl);\n if (!glState) {\n trackContextState(gl, {copyState: false});\n glState = getContextState(gl);\n }\n glState.push();\n}\n\n\n/**\n * Restores previously saved WebGL context state\n */\nexport function popContextState(gl: WebGLRenderingContext): void {\n const glState = getContextState(gl);\n assert(glState);\n glState.pop();\n}\n\n// HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT\n\n/**\n// Overrides a WebGLRenderingContext state \"getter\" function\n// to return values directly from cache\n * @param gl\n * @param functionName\n */\nfunction installGetterOverride(gl: WebGLRenderingContext, functionName: string) {\n // Get the original function from the WebGLRenderingContext\n const originalGetterFunc = gl[functionName].bind(gl);\n\n // Wrap it with a spy so that we can update our state cache when it gets called\n gl[functionName] = function get(pname) {\n if (pname === undefined || NON_CACHE_PARAMETERS.has(pname)) {\n // Invalid or blacklisted parameter, do not cache\n return originalGetterFunc(pname);\n }\n\n const glState = getContextState(gl);\n if (!(pname in glState.cache)) {\n // WebGL limits are not prepopulated in the cache, call the original getter when first queried.\n glState.cache[pname] = originalGetterFunc(pname);\n }\n\n // Optionally call the original function to do a \"hard\" query from the WebGLRenderingContext\n return glState.enable\n ? // Call the getter the params so that it can e.g. serve from a cache\n glState.cache[pname]\n : // Optionally call the original function to do a \"hard\" query from the WebGLRenderingContext\n originalGetterFunc(pname);\n };\n\n // Set the name of this anonymous function to help in debugging and profiling\n Object.defineProperty(gl[functionName], 'name', {\n value: `${functionName}-from-cache`,\n configurable: false\n });\n}\n\n/**\n// Overrides a WebGLRenderingContext state \"setter\" function\n// to call a setter spy before the actual setter. Allows us to keep a cache\n// updated with a copy of the WebGL context state.\n * @param gl\n * @param functionName\n * @param setter\n * @returns\n */\nfunction installSetterSpy(gl: WebGLRenderingContext, functionName: string, setter) {\n // Get the original function from the WebGLRenderingContext\n if (!gl[functionName]) {\n // This could happen if we try to intercept WebGL2 method on a WebGL1 context\n return;\n }\n\n const originalSetterFunc = gl[functionName].bind(gl);\n\n // Wrap it with a spy so that we can update our state cache when it gets called\n gl[functionName] = function set(...params) {\n // Update the value\n // Call the setter with the state cache and the params so that it can store the parameters\n const glState = getContextState(gl);\n const {valueChanged, oldValue} = setter(glState._updateCache, ...params);\n\n // Call the original WebGLRenderingContext func to make sure the context actually gets updated\n if (valueChanged) {\n originalSetterFunc(...params);\n }\n\n // Note: if the original function fails to set the value, our state cache will be bad\n // No solution for this at the moment, but assuming that this is unlikely to be a real problem\n // We could call the setter after the originalSetterFunc. Concern is that this would\n // cause different behavior in debug mode, where originalSetterFunc can throw exceptions\n\n return oldValue;\n };\n\n // Set the name of this anonymous function to help in debugging and profiling\n Object.defineProperty(gl[functionName], 'name', {\n value: `${functionName}-to-cache`,\n configurable: false\n });\n}\n\nfunction installProgramSpy(gl: WebGLRenderingContext): void {\n const originalUseProgram = gl.useProgram.bind(gl);\n\n gl.useProgram = function useProgramLuma(handle) {\n const glState = getContextState(gl);\n if (glState.program !== handle) {\n originalUseProgram(handle);\n glState.program = handle;\n }\n };\n}\n"],"file":"track-context-state.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/context/state-tracker/track-context-state.ts"],"names":["assert","GL_PARAMETER_DEFAULTS","GL_HOOKED_SETTERS","NON_CACHE_PARAMETERS","setParameters","getParameters","deepArrayEqual","GLState","constructor","gl","copyState","log","cache","Object","assign","_updateCache","bind","seal","push","values","stateStack","pop","length","oldValues","valueChanged","oldValue","key","undefined","value","cached","getContextState","state","trackContextState","options","enable","installProgramSpy","setter","installSetterSpy","installGetterOverride","glState","pushContextState","popContextState","functionName","originalGetterFunc","get","pname","has","defineProperty","configurable","originalSetterFunc","set","params","originalUseProgram","useProgram","useProgramLuma","handle","program"],"mappings":"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","sourcesContent":["// Support for listening to context state changes and intercepting state queries\n// NOTE: this system does not handle buffer bindings\nimport {assert} from '@luma.gl/api';\nimport {GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS} from '../parameters/webgl-parameter-tables';\nimport {setParameters, getParameters} from '../parameters/unified-parameter-api';\nimport {deepArrayEqual} from './deep-array-equal';\n\n// HELPER CLASS - GLState\n\n/* eslint-disable no-shadow */\nclass GLState {\n gl: WebGLRenderingContext;\n program: unknown = null;\n stateStack: object[] = [];\n enable = true;\n cache: Record<string, any>;\n log;\n\n constructor(\n gl: WebGLRenderingContext,\n {\n copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)\n log = () => {} // Logging function, called when gl parameter change calls are actually issued\n } = {}\n ) {\n this.gl = gl;\n this.cache = copyState ? getParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);\n this.log = log;\n\n this._updateCache = this._updateCache.bind(this);\n Object.seal(this);\n }\n\n push(values = {}) {\n this.stateStack.push({});\n }\n\n pop() {\n assert(this.stateStack.length > 0);\n // Use the saved values in the state stack to restore parameters\n const oldValues = this.stateStack[this.stateStack.length - 1];\n setParameters(this.gl, oldValues);\n // Don't pop until we have reset parameters (to make sure other \"stack frames\" are not affected)\n this.stateStack.pop();\n }\n\n /**\n // interceptor for context set functions - update our cache and our stack\n // values (Object) - the key values for this setter\n * @param values\n * @returns\n */\n _updateCache(values: {[key: number | string]: any}) {\n let valueChanged = false;\n let oldValue; // = undefined\n\n const oldValues: {[key: number | string]: any} | null = this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;\n\n for (const key in values) {\n assert(key !== undefined);\n const value = values[key];\n const cached = this.cache[key];\n // Check that value hasn't already been shadowed\n if (!deepArrayEqual(value, cached)) {\n valueChanged = true;\n oldValue = cached;\n\n // First, save current value being shadowed\n // If a state stack frame is active, save the current parameter values for pop\n // but first check that value hasn't already been shadowed and saved\n if (oldValues && !(key in oldValues)) {\n oldValues[key] = cached;\n }\n\n // Save current value being shadowed\n this.cache[key] = value;\n }\n }\n\n return {valueChanged, oldValue};\n }\n}\n\nfunction getContextState(gl: WebGLRenderingContext): GLState {\n // @ts-expect-error\n return gl.state as GLState;\n}\n\n// PUBLIC API\n\n/**\n * Initialize WebGL state caching on a context\n * can be called multiple times to enable/disable\n *\n * @note After calling this function, context state will be cached\n * gl.state.push() and gl.state.pop() will be available for saving,\n * temporarily modifying, and then restoring state.\n */\n export function trackContextState(\n gl: WebGLRenderingContext,\n options?: {\n enable?: boolean;\n copyState?: boolean;\n log?: any;\n }\n): WebGLRenderingContext {\n const {enable = true, copyState} = options;\n assert(copyState !== undefined);\n // @ts-expect-error\n if (!gl.state) {\n // @ts-ignore\n // const {polyfillContext} = global_;\n // if (polyfillContext) {\n // polyfillContext(gl);\n // }\n\n // Create a state cache\n // @ts-expect-error\n gl.state = new GLState(gl, {copyState});\n\n installProgramSpy(gl);\n\n // intercept all setter functions in the table\n for (const key in GL_HOOKED_SETTERS) {\n const setter = GL_HOOKED_SETTERS[key];\n installSetterSpy(gl, key, setter);\n }\n\n // intercept all getter functions in the table\n installGetterOverride(gl, 'getParameter');\n installGetterOverride(gl, 'isEnabled');\n }\n\n const glState = getContextState(gl);\n glState.enable = enable;\n\n return gl;\n}\n\n/**\n * Saves current WebGL context state onto an internal per-context stack\n */\n export function pushContextState(gl: WebGLRenderingContext): void {\n let glState = getContextState(gl);\n if (!glState) {\n trackContextState(gl, {copyState: false});\n glState = getContextState(gl);\n }\n glState.push();\n}\n\n\n/**\n * Restores previously saved WebGL context state\n */\nexport function popContextState(gl: WebGLRenderingContext): void {\n const glState = getContextState(gl);\n assert(glState);\n glState.pop();\n}\n\n// HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT\n\n/**\n// Overrides a WebGLRenderingContext state \"getter\" function\n// to return values directly from cache\n * @param gl\n * @param functionName\n */\nfunction installGetterOverride(gl: WebGLRenderingContext, functionName: string) {\n // Get the original function from the WebGLRenderingContext\n const originalGetterFunc = gl[functionName].bind(gl);\n\n // Wrap it with a spy so that we can update our state cache when it gets called\n gl[functionName] = function get(pname) {\n if (pname === undefined || NON_CACHE_PARAMETERS.has(pname)) {\n // Invalid or blacklisted parameter, do not cache\n return originalGetterFunc(pname);\n }\n\n const glState = getContextState(gl);\n if (!(pname in glState.cache)) {\n // WebGL limits are not prepopulated in the cache, call the original getter when first queried.\n glState.cache[pname] = originalGetterFunc(pname);\n }\n\n // Optionally call the original function to do a \"hard\" query from the WebGLRenderingContext\n return glState.enable\n ? // Call the getter the params so that it can e.g. serve from a cache\n glState.cache[pname]\n : // Optionally call the original function to do a \"hard\" query from the WebGLRenderingContext\n originalGetterFunc(pname);\n };\n\n // Set the name of this anonymous function to help in debugging and profiling\n Object.defineProperty(gl[functionName], 'name', {\n value: `${functionName}-from-cache`,\n configurable: false\n });\n}\n\n/**\n// Overrides a WebGLRenderingContext state \"setter\" function\n// to call a setter spy before the actual setter. Allows us to keep a cache\n// updated with a copy of the WebGL context state.\n * @param gl\n * @param functionName\n * @param setter\n * @returns\n */\nfunction installSetterSpy(gl: WebGLRenderingContext, functionName: string, setter) {\n // Get the original function from the WebGLRenderingContext\n if (!gl[functionName]) {\n // This could happen if we try to intercept WebGL2 method on a WebGL1 context\n return;\n }\n\n const originalSetterFunc = gl[functionName].bind(gl);\n\n // Wrap it with a spy so that we can update our state cache when it gets called\n gl[functionName] = function set(...params) {\n // Update the value\n // Call the setter with the state cache and the params so that it can store the parameters\n const glState = getContextState(gl);\n const {valueChanged, oldValue} = setter(glState._updateCache, ...params);\n\n // Call the original WebGLRenderingContext func to make sure the context actually gets updated\n if (valueChanged) {\n originalSetterFunc(...params);\n }\n\n // Note: if the original function fails to set the value, our state cache will be bad\n // No solution for this at the moment, but assuming that this is unlikely to be a real problem\n // We could call the setter after the originalSetterFunc. Concern is that this would\n // cause different behavior in debug mode, where originalSetterFunc can throw exceptions\n\n return oldValue;\n };\n\n // Set the name of this anonymous function to help in debugging and profiling\n Object.defineProperty(gl[functionName], 'name', {\n value: `${functionName}-to-cache`,\n configurable: false\n });\n}\n\nfunction installProgramSpy(gl: WebGLRenderingContext): void {\n const originalUseProgram = gl.useProgram.bind(gl);\n\n gl.useProgram = function useProgramLuma(handle) {\n const glState = getContextState(gl);\n if (glState.program !== handle) {\n originalUseProgram(handle);\n glState.program = handle;\n }\n };\n}\n"],"file":"track-context-state.js"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WebGLDevice } from '
|
|
1
|
+
import { default as WebGLDevice } from '../../adapter/webgl-device';
|
|
2
2
|
import { setParameters } from '../parameters/unified-parameter-api';
|
|
3
3
|
import { pushContextState, popContextState } from './track-context-state';
|
|
4
4
|
export function withParameters(device, parameters, func) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/context/state-tracker/with-parameters.ts"],"names":["WebGLDevice","setParameters","pushContextState","popContextState","withParameters","device","parameters","func","webglDevice","attach","gl","isObjectEmpty","nocatch","value","object","key"],"mappings":"AACA,SAAQA,
|
|
1
|
+
{"version":3,"sources":["../../../src/context/state-tracker/with-parameters.ts"],"names":["default","WebGLDevice","setParameters","pushContextState","popContextState","withParameters","device","parameters","func","webglDevice","attach","gl","isObjectEmpty","nocatch","value","object","key"],"mappings":"AACA,SAAQA,OAAO,IAAIC,WAAnB,QAAqC,4BAArC;AACA,SAAsBC,aAAtB,QAA0C,qCAA1C;AACA,SAAQC,gBAAR,EAA0BC,eAA1B,QAAgD,uBAAhD;AAUC,OAAO,SAASC,cAAT,CAAwBC,MAAxB,EAAgEC,UAAhE,EAAgHC,IAAhH,EAAgI;AACtI,QAAMC,WAAW,GAAGR,WAAW,CAACS,MAAZ,CAAmBJ,MAAnB,CAApB;AACA,QAAMK,EAAE,GAAGF,WAAW,CAACE,EAAvB;;AAEA,MAAIC,aAAa,CAACL,UAAD,CAAjB,EAA+B;AAE7B,WAAOC,IAAI,CAACF,MAAD,CAAX;AACD;;AAED,QAAM;AAACO,IAAAA,OAAO,GAAG;AAAX,MAAmBN,UAAzB;AAEAJ,EAAAA,gBAAgB,CAACQ,EAAD,CAAhB;AACAT,EAAAA,aAAa,CAACS,EAAD,EAAKJ,UAAL,CAAb;AAGA,MAAIO,KAAJ;;AAEA,MAAID,OAAJ,EAAa;AAEXC,IAAAA,KAAK,GAAGN,IAAI,CAACG,EAAD,CAAZ;AACAP,IAAAA,eAAe,CAACO,EAAD,CAAf;AACD,GAJD,MAIO;AAEL,QAAI;AACFG,MAAAA,KAAK,GAAGN,IAAI,CAACG,EAAD,CAAZ;AACD,KAFD,SAEU;AACRP,MAAAA,eAAe,CAACO,EAAD,CAAf;AACD;AACF;;AAED,SAAOG,KAAP;AACD;;AAKD,SAASF,aAAT,CAAuBG,MAAvB,EAA+B;AAE7B,OAAK,MAAMC,GAAX,IAAkBD,MAAlB,EAA0B;AACxB,WAAO,KAAP;AACD;;AACD,SAAO,IAAP;AACD","sourcesContent":["import type {Device} from '@luma.gl/api';\nimport {default as WebGLDevice} from '../../adapter/webgl-device';\nimport {GLParameters, setParameters} from '../parameters/unified-parameter-api';\nimport {pushContextState, popContextState} from './track-context-state';\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\n export function withParameters(device: Device | WebGLRenderingContext, parameters: GLParameters & {nocatch?: boolean}, func: any): any {\n const webglDevice = WebGLDevice.attach(device);\n const gl = webglDevice.gl;\n\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n const {nocatch = true} = parameters;\n\n pushContextState(gl);\n setParameters(gl, parameters);\n\n // Setup is done, call the function\n let value;\n\n if (nocatch) {\n // Avoid try catch to minimize stack size impact for safe execution paths\n value = func(gl);\n popContextState(gl);\n } else {\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n try {\n value = func(gl);\n } finally {\n popContextState(gl);\n }\n }\n\n return value;\n}\n\n// Helpers\n\n// Returns true if given object is empty, false otherwise.\nfunction isObjectEmpty(object) {\n // @ts-ignore - dummy key variable\n for (const key in object) {\n return false;\n }\n return true;\n}\n"],"file":"with-parameters.js"}
|
|
@@ -56,8 +56,7 @@ function withDeviceParameters(device, parameters, func) {
|
|
|
56
56
|
function setDeviceParameters(device, parameters) {
|
|
57
57
|
var webglDevice = _webglDevice.default.attach(device);
|
|
58
58
|
|
|
59
|
-
var gl = webglDevice.gl
|
|
60
|
-
gl2 = webglDevice.gl2;
|
|
59
|
+
var gl = webglDevice.gl;
|
|
61
60
|
|
|
62
61
|
if (parameters.cullMode) {
|
|
63
62
|
switch (parameters.cullMode) {
|
|
@@ -157,16 +156,6 @@ function convertStencilOperation(parameter, value) {
|
|
|
157
156
|
});
|
|
158
157
|
}
|
|
159
158
|
|
|
160
|
-
function convertBlendOperationToEquation(parameter, value) {
|
|
161
|
-
return map(parameter, value, {
|
|
162
|
-
'add': _constants.default.FUNC_ADD,
|
|
163
|
-
'sub': _constants.default.FUNC_SUBTRACT,
|
|
164
|
-
'reverse-subtract': _constants.default.FUNC_REVERSE_SUBTRACT,
|
|
165
|
-
'min': _constants.default.MIN,
|
|
166
|
-
'max': _constants.default.MAX
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
|
|
170
159
|
function message(parameter, value) {
|
|
171
160
|
return "Illegal parameter ".concat(value, " for ").concat(parameter);
|
|
172
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapter/converters/device-parameters.ts"],"names":["withGLParameters","device","parameters","func","gl","withDeviceParameters","setDeviceParameters","webglDevice","WebGLDevice","attach","gl2","cullMode","disable","GL","CULL_FACE","enable","cullFace","FRONT","BACK","frontFace","map","ccw","CCW","cw","CW","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","DEPTH_TEST","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","log","warn","stencilCompare","glValue","STENCIL_TEST","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","parameter","value","NEVER","LESS","EQUAL","LEQUAL","GREATER","NOTEQUAL","GEQUAL","ALWAYS","convertToCompareFunction","KEEP","ZERO","REPLACE","INVERT","INCR","DECR","INCR_WRAP","DECR_WRAP","convertBlendOperationToEquation","FUNC_ADD","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","MIN","MAX","message","valueMap","Error"],"mappings":"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","sourcesContent":["import {Device, Parameters, CompareFunction, StencilOperation, log, isObjectEmpty} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport type { GLParameters } from '../../types/webgl';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setParameters} from '../../context/parameters/unified-parameter-api';\nimport WebGLDevice from '../webgl-device';\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\n export function withGLParameters<T = unknown>(device: Device, parameters: GLParameters, func: (device?: Device) => T): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(device: Device, parameters: Parameters, func: (device?: Device) => T): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl, gl2} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n }));\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always' ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (parameters.stencilPassOperation && parameters.stencilFailOperation && parameters.stencilDepthFailOperation) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n // if (parameters.blend) {\n // gl.enable(GL.BLEND);\n\n // const blend = parameters.blend;\n\n // let colorEquation = (blend && blend.color && blend.color.operation) || 'add';\n // let alphaEquation = (blend && blend.alpha && blend.alpha.operation) || 'add';\n // gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n // let colorSrcFactor = (blend && blend.color && blend.color.srcFactor) || 'one';\n // let colorDstFactor = (blend && blend.color && blend.color.dstFactor) || 'zero';\n // let alphaSrcFactor = (blend && blend.alpha && blend.alpha.srcFactor) || 'one';\n // let alphaDstFactor = (blend && blend.alpha && blend.alpha.dstFactor) || 'zero';\n // gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n // }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n 'never': GL.NEVER,\n 'less': GL.LESS,\n 'equal': GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n 'greater': GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n 'always': GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n 'keep': GL.KEEP,\n 'zero': GL.ZERO,\n 'replace': GL.REPLACE,\n 'invert': GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\nfunction convertBlendOperationToEquation(parameter: string, value: string): number {\n return map(parameter, value, {\n 'add': GL.FUNC_ADD,\n 'sub': GL.FUNC_SUBTRACT,\n 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n // When using a WebGL 2 context, the following values are available additionally:\n 'min': GL.MIN,\n 'max': GL.MAX\n });\n}\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"file":"device-parameters.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapter/converters/device-parameters.ts"],"names":["withGLParameters","device","parameters","func","gl","withDeviceParameters","setDeviceParameters","webglDevice","WebGLDevice","attach","cullMode","disable","GL","CULL_FACE","enable","cullFace","FRONT","BACK","frontFace","map","ccw","CCW","cw","CW","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","DEPTH_TEST","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","log","warn","stencilCompare","glValue","STENCIL_TEST","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","parameter","value","NEVER","LESS","EQUAL","LEQUAL","GREATER","NOTEQUAL","GEQUAL","ALWAYS","convertToCompareFunction","KEEP","ZERO","REPLACE","INVERT","INCR","DECR","INCR_WRAP","DECR_WRAP","message","valueMap","Error"],"mappings":"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","sourcesContent":["import {Device, Parameters, CompareFunction, StencilOperation, log, isObjectEmpty} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport type { GLParameters } from '../../types/webgl';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setParameters} from '../../context/parameters/unified-parameter-api';\nimport WebGLDevice from '../webgl-device';\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\n export function withGLParameters<T = unknown>(device: Device, parameters: GLParameters, func: (device?: Device) => T): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(device: Device, parameters: Parameters, func: (device?: Device) => T): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n }));\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always' ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (parameters.stencilPassOperation && parameters.stencilFailOperation && parameters.stencilDepthFailOperation) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n // if (parameters.blend) {\n // gl.enable(GL.BLEND);\n\n // const blend = parameters.blend;\n\n // let colorEquation = (blend && blend.color && blend.color.operation) || 'add';\n // let alphaEquation = (blend && blend.alpha && blend.alpha.operation) || 'add';\n // gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n // let colorSrcFactor = (blend && blend.color && blend.color.srcFactor) || 'one';\n // let colorDstFactor = (blend && blend.color && blend.color.dstFactor) || 'zero';\n // let alphaSrcFactor = (blend && blend.alpha && blend.alpha.srcFactor) || 'one';\n // let alphaDstFactor = (blend && blend.alpha && blend.alpha.dstFactor) || 'zero';\n // gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n // }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n 'never': GL.NEVER,\n 'less': GL.LESS,\n 'equal': GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n 'greater': GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n 'always': GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n 'keep': GL.KEEP,\n 'zero': GL.ZERO,\n 'replace': GL.REPLACE,\n 'invert': GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\n// function convertBlendOperationToEquation(parameter: string, value: string): number {\n// return map(parameter, value, {\n// 'add': GL.FUNC_ADD,\n// 'sub': GL.FUNC_SUBTRACT,\n// 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n// // When using a WebGL 2 context, the following values are available additionally:\n// 'min': GL.MIN,\n// 'max': GL.MAX\n// });\n// }\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"file":"device-parameters.js"}
|
|
@@ -50,7 +50,6 @@ var EXT_SRGB = 'EXT_sRGB';
|
|
|
50
50
|
var EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';
|
|
51
51
|
var EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';
|
|
52
52
|
var EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';
|
|
53
|
-
var EXT_HALF_FLOAT_WEBGL1 = 'WEBGL_color_buffer_half_float';
|
|
54
53
|
|
|
55
54
|
var checkExtension = function checkExtension(gl, extension) {
|
|
56
55
|
return gl.getExtension(extension);
|
|
@@ -828,16 +827,8 @@ function getTextureFormatSupport(gl, formatOrGL) {
|
|
|
828
827
|
};
|
|
829
828
|
}
|
|
830
829
|
|
|
831
|
-
var decoded;
|
|
832
|
-
|
|
833
|
-
try {
|
|
834
|
-
decoded = (0, _api.decodeTextureFormat)(format);
|
|
835
|
-
} catch (_unused) {}
|
|
836
|
-
|
|
837
830
|
var supported = (0, _webglChecks.isWebGL2)(gl) ? info.gl === undefined : info.gl1 === undefined;
|
|
838
831
|
supported = supported && checkTextureFeatures(gl, [info.f]);
|
|
839
|
-
var filterable = info.filter ? checkTextureFeatures(gl, [info.filter]) : decoded && !decoded.signed;
|
|
840
|
-
var renderable = info.filter ? checkTextureFeatures(gl, [info.render]) : decoded && !decoded.signed;
|
|
841
832
|
return {
|
|
842
833
|
supported: supported,
|
|
843
834
|
renderable: supported && checkTextureFeatures(gl, [info.render]),
|
|
@@ -860,7 +851,7 @@ function isTextureFormatFilterable(gl, formatOrGL) {
|
|
|
860
851
|
if (decoded.signed) {
|
|
861
852
|
return false;
|
|
862
853
|
}
|
|
863
|
-
} catch (
|
|
854
|
+
} catch (_unused) {
|
|
864
855
|
return false;
|
|
865
856
|
}
|
|
866
857
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapter/converters/texture-formats.ts"],"names":["texture_compression_bc","texture_compression_astc","texture_compression_etc2","texture_compression_etc1_webgl","texture_compression_pvrtc_webgl","texture_compression_atc_webgl","X_S3TC","X_S3TC_SRGB","X_RGTC","X_BPTC","X_ETC2","X_ASTC","X_ETC1","X_PVRTC","X_ATC","EXT_SRGB","EXT_TEXTURE_NORM16","EXT_FLOAT_WEBGL1","EXT_FLOAT_RENDER_WEBGL2","EXT_HALF_FLOAT_WEBGL1","checkExtension","gl","extension","getExtension","checkExtensions","extensions","every","TEXTURE_FEATURE_CHECKS","checkTextureFeature","feature","checkTextureFeatures","features","getTextureFeatures","textureFeatures","Object","keys","filter","TEXTURE_FORMATS","GL","RGB","gl1","b","c","bpp","dataFormat","types","UNSIGNED_BYTE","UNSIGNED_SHORT_5_6_5","RGBA","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","R8","R8_SNORM","R8UI","R8I","RG8","RG8_SNORM","RG8UI","RG8I","R16UI","R16I","R16F","render","R16_EXT","f","R16_SNORM_EXT","RGBA4","wgpu","RGB565","RGB5_A1","RGB8","RGB8_SNORM","RGBA8","SRGB8_ALPHA8","SRGB_ALPHA_EXT","gl1ext","RGBA8_SNORM","RGBA8UI","RGBA8I","RG16UI","RG16I","RG16F","RG16_EXT","RG16_SNORM_EXT","R32UI","R32I","R32F","RGB9_E5","p","R11F_G11F_B10F","RGB10_A2","RGB10_A2UI","RGB16_EXT","RGB16_SNORM_EXT","RG32UI","RG32I","RG32F","RGBA16UI","RGBA16I","RGBA16F","RGBA16_EXT","RGBA16_SNORM_EXT","RGB32F","gl2ext","FLOAT","RGBA32UI","RGBA32I","RGBA32F","STENCIL_INDEX8","attachment","STENCIL_ATTACHMENT","DEPTH_COMPONENT16","DEPTH_ATTACHMENT","DEPTH_COMPONENT24","DEPTH_COMPONENT32F","UNSIGNED_INT_24_8","DEPTH_STENCIL","DEPTH_STENCIL_ATTACHMENT","DEPTH24_STENCIL8","DEPTH32F_STENCIL8","COMPRESSED_RGB_S3TC_DXT1_EXT","x","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","COMPRESSED_RED_RGTC1_EXT","COMPRESSED_SIGNED_RED_RGTC1_EXT","COMPRESSED_RED_GREEN_RGTC2_EXT","COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT","COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT","COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT","COMPRESSED_RGBA_BPTC_UNORM_EXT","COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT","COMPRESSED_RGB8_ETC2","COMPRESSED_SRGB8_ETC2","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","COMPRESSED_R11_EAC","COMPRESSED_SIGNED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_SIGNED_RG11_EAC","COMPRESSED_RGBA_ASTC_4x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR","COMPRESSED_RGBA_ASTC_5x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR","COMPRESSED_RGBA_ASTC_5x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR","COMPRESSED_RGBA_ASTC_6x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR","COMPRESSED_RGBA_ASTC_6x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR","COMPRESSED_RGBA_ASTC_8x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR","COMPRESSED_RGBA_ASTC_8x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR","COMPRESSED_RGBA_ASTC_8x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR","COMPRESSED_RGBA_ASTC_10x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR","COMPRESSED_RGBA_ASTC_10x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR","COMPRESSED_RGBA_ASTC_10x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR","COMPRESSED_RGBA_ASTC_12x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR","COMPRESSED_RGBA_ASTC_12x12_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB_ATC_WEBGL","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","getTextureFormat","format","entry","entries","find","Error","isTextureFormatSupported","formatOrGL","info","undefined","Boolean","getTextureFormatSupport","supported","decoded","filterable","signed","renderable","blendable","storable","isTextureFormatFilterable","endsWith","isTextureFormatRenderable","getWebGLTextureFormat","formatInfo","webglFormat","getWebGLTextureParameters","getWebGLPixelDataFormat","integer","normalized","type","getWebGLDataType","dataType","compressed","getWebGLDepthStencilAttachment","_checkFloat32ColorAttachment","internalFormat","srcFormat","srcType","texture","framebuffer","createTexture","bindTexture","TEXTURE_2D","level","width","height","border","pixel","Uint8Array","texImage2D","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","deleteTexture","deleteFramebuffer","DATA_FORMAT_CHANNELS","RED","RED_INTEGER","RG","RG_INTEGER","RGB_INTEGER","RGBA_INTEGER","DEPTH_COMPONENT","ALPHA","LUMINANCE","LUMINANCE_ALPHA","TYPE_SIZES","UNSIGNED_INT","INT","UNSIGNED_SHORT","SHORT","HALF_FLOAT","BYTE","getTextureFormatBytesPerPixel","params","channels","channelSize"],"mappings":"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","sourcesContent":["import type {TextureFormat, DeviceFeature, Device} from '@luma.gl/api';\nimport {decodeTextureFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\n\n// TEXTURE FEATURES\n\n// Define local device feature strings to optimize minification\nconst texture_compression_bc: DeviceFeature = 'texture-compression-bc';\nconst texture_compression_astc: DeviceFeature = 'texture-compression-astc';\nconst texture_compression_etc2: DeviceFeature = 'texture-compression-etc2';\nconst texture_compression_etc1_webgl: DeviceFeature = 'texture-compression-etc1-webgl';\nconst texture_compression_pvrtc_webgl: DeviceFeature = 'texture-compression-pvrtc-webgl';\nconst texture_compression_atc_webgl: DeviceFeature = 'texture-compression-atc-webgl';\n\n// Define local webgl extension strings to optimize minification\nconst X_S3TC = 'WEBGL_compressed_texture_s3tc'; // BC1, BC2, BC3\nconst X_S3TC_SRGB = 'WEBGL_compressed_texture_s3tc_srgb'; // BC1, BC2, BC3\nconst X_RGTC = 'EXT_texture_compression_rgtc'; // BC4, BC5\nconst X_BPTC = 'EXT_texture_compression_bptc'; // BC6, BC7\nconst X_ETC2 = 'WEBGL_compressed_texture_etc'; // Renamed from 'WEBGL_compressed_texture_es3'\nconst X_ASTC = 'WEBGL_compressed_texture_astc';\nconst X_ETC1 = 'WEBGL_compressed_texture_etc1';\nconst X_PVRTC = 'WEBGL_compressed_texture_pvrtc';\nconst X_ATC = 'WEBGL_compressed_texture_atc';\n\n// Define local webgl extension strings to optimize minification\nconst EXT_SRGB = 'EXT_sRGB'; // https://developer.mozilla.org/en-US/docs/Web/API/EXT_sRGB\nconst EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';\nconst EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';\nconst EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';\nconst EXT_HALF_FLOAT_WEBGL1 = 'WEBGL_color_buffer_half_float';\n// const DEPTH = 'WEBGL_depth_texture';\n\nconst checkExtension = (gl: WebGLRenderingContext, extension: string): boolean =>\n gl.getExtension(extension);\nconst checkExtensions = (gl: WebGLRenderingContext, extensions: string[]): boolean =>\n extensions.every((extension) => gl.getExtension(extension));\n\n// prettier-ignore\nconst TEXTURE_FEATURE_CHECKS: Partial<Record<DeviceFeature, (gl: WebGLRenderingContext) => boolean> > = {\n 'texture-blend-float-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'EXT_float_blend'),\n 'texture-formats-srgb-webgl1': (gl) => (isWebGL2(gl) ? true : checkExtension(gl, EXT_SRGB)),\n 'texture-formats-depth-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'WEBGL_depth_texture'),\n 'texture-formats-float32-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_float'),\n 'texture-formats-float16-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_half_float'),\n 'texture-formats-norm16-webgl': (gl) => isWebGL2(gl) ? checkExtension(gl, EXT_TEXTURE_NORM16) : false,\n 'texture-filter-linear-float32-webgl': (gl) => checkExtension(gl, 'OES_texture_float_linear'),\n 'texture-filter-linear-float16-webgl': (gl) => checkExtension(gl, 'OES_texture_half_float_linear'),\n 'texture-filter-anisotropic-webgl': (gl) => checkExtension(gl, 'EXT_texture_filter_anisotropic'),\n 'texture-renderable-float32-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_float'), // [false, 'EXT_color_buffer_float'],\n 'texture-renderable-float16-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_half_float'),\n\n 'texture-compression-bc': (gl) => checkExtensions(gl, [X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC]),\n 'texture-compression-bc5-webgl': (gl) => checkExtensions(gl, [X_RGTC]),\n // 'texture-compression-bc7-webgl': gl => checkExtensions(gl, [X_BPTC]),\n // 'texture-compression-bc3-srgb-webgl': gl => checkExtensions(gl, [X_S3TC_SRGB]),\n // 'texture-compression-bc3-webgl': gl => checkExtensions(gl, [X_S3TC]),\n 'texture-compression-etc2': (gl) => checkExtensions(gl, [X_ETC2]),\n 'texture-compression-astc': (gl) => checkExtensions(gl, [X_ASTC]),\n 'texture-compression-etc1-webgl': (gl) => checkExtensions(gl, [X_ETC1]),\n 'texture-compression-pvrtc-webgl': (gl) => checkExtensions(gl, [X_PVRTC]),\n 'texture-compression-atc-webgl': (gl) => checkExtensions(gl, [X_ATC])\n};\n\nexport function checkTextureFeature(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {\n return TEXTURE_FEATURE_CHECKS[feature]?.(gl) || false;\n}\n\nconst checkTextureFeatures = (gl: WebGLRenderingContext, features: DeviceFeature[]): boolean =>\n features.every((feature) => checkTextureFeature(gl, feature));\n\n/** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */\nexport function getTextureFeatures(gl: WebGLRenderingContext): DeviceFeature[] {\n const textureFeatures = Object.keys(TEXTURE_FEATURE_CHECKS) as DeviceFeature[];\n return textureFeatures.filter((feature) => checkTextureFeature(gl, feature));\n}\n\n// TEXTURE FORMATS\n\n/** Map a format to webgl and constants */\ntype Format = {\n gl?: GL;\n /** If a different unsized format is needed in WebGL1 */\n gl1?: GL;\n gl1ext?: string;\n gl2ext?: string; // format requires WebGL2, when using a WebGL 1 context, color renderbuffer formats are limited\n\n b?: number; // (bytes per pixel), for memory usage calculations.\n /** channels */\n c?: number;\n bpp?: number;\n /** packed */\n p?: number;\n x?: string; // compressed\n f?: DeviceFeature; // for compressed texture formats\n render?: DeviceFeature; // renderable if extension is present\n filter?: DeviceFeature;\n\n wgpu?: false; // If not supported on WebGPU\n\n types?: number[];\n\n dataFormat?: GL;\n attachment?: GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;\n};\n\n// TABLES\n\n/** Legal combinations for internalFormat, format and type *\n// [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1ext: DEPTH},\n// [GL.DEPTH_STENCIL]: {gl1ext: DEPTH},\n// Sized texture format\n// R\n[GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RG\n[GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGB\n[GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGBA\n\n[GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},\n[GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},\n[GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},\n[GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}\n*/\n\n/** Texture format data */\n// prettier-ignore\nexport const TEXTURE_FORMATS: Record<TextureFormat, Format> = {\n // Unsized formats that leave the precision up to the driver.\n // TODO - Fix bpp constants\n // 'r8unorm-unsized': {gl: GL.LUMINANCE, b: 4, c: 2, bpp: 4},\n 'rgb8unorm-unsized': {gl: GL.RGB, gl1: GL.RGB, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5]},\n 'rgba8unorm-unsized': {gl: GL.RGBA, gl1: GL.RGBA, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4, GL.UNSIGNED_SHORT_5_5_5_1]},\n // 'rgb8unorm-srgb-unsized': {gl: GL.SRGB_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n // 'rgba8unorm-srgb-unsized': {gl: GL.SRGB_ALPHA_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n\n // 8-bit formats\n 'r8unorm': {gl: GL.R8, b: 1, c: 1},\n 'r8snorm': {gl: GL.R8_SNORM, b: 1, c: 1},\n 'r8uint': {gl: GL.R8UI, b: 1, c: 1},\n 'r8sint': {gl: GL.R8I, b: 1, c: 1},\n\n // 16-bit formats\n 'rg8unorm': {gl: GL.RG8, b: 2, c: 2},\n 'rg8snorm': {gl: GL.RG8_SNORM, b: 2, c: 2},\n 'rg8uint': {gl: GL.RG8UI, b: 2, c: 2},\n 'rg8sint': {gl: GL.RG8I, b: 2, c: 2},\n\n 'r16uint': {gl: GL.R16UI, b: 2, c: 1},\n 'r16sint': {gl: GL.R16I, b: 2, c: 1},\n 'r16float': {gl: GL.R16F, b: 2, c: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'r16unorm-webgl': {gl: GL.R16_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl'},\n 'r16snorm-webgl': {gl: GL.R16_SNORM_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl'},\n\n // Packed 16-bit formats\n 'rgba4unorm-webgl': {gl: GL.RGBA4, b: 2, c: 4, wgpu: false},\n 'rgb565unorm-webgl': {gl: GL.RGB565, b: 2, c: 4, wgpu: false},\n 'rgb5a1unorm-webgl': {gl: GL.RGB5_A1, b: 2, c: 4, wgpu: false},\n\n // 24-bit formats\n 'rbg8unorm-webgl': {gl: GL.RGB8, b: 3, c: 3, wgpu: false},\n 'rbg8snorm-webgl': {gl: GL.RGB8_SNORM, b: 3, c: 3, wgpu: false},\n\n // 32-bit formats \n 'rgba8unorm': {gl: GL.RGBA8, gl1: GL.RGBA, b: 4, c: 2, bpp: 4},\n 'rgba8unorm-srgb': {gl: GL.SRGB8_ALPHA8, gl1: GL.SRGB_ALPHA_EXT, b: 4, c: 4, gl1ext: EXT_SRGB, bpp: 4},\n 'rgba8snorm': {gl: GL.RGBA8_SNORM, b: 4, c: 4},\n 'rgba8uint': {gl: GL.RGBA8UI, b: 4, c: 4, bpp: 4},\n 'rgba8sint': {gl: GL.RGBA8I, b: 4, c: 4, bpp: 4},\n // reverse colors, webgpu only\n 'bgra8unorm': {b: 4, c: 4},\n 'bgra8unorm-srgb': {b: 4, c: 4},\n\n 'rg16uint': {gl: GL.RG16UI, b: 4, c: 1, bpp: 4},\n 'rg16sint': {gl: GL.RG16I, b: 4, c: 2, bpp: 4},\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n 'rg16float': {gl: GL.RG16F, bpp: 4, b: 4, c: 2, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rg16unorm-webgl': {gl: GL.RG16_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl'},\n 'rg16snorm-webgl': {gl: GL.RG16_SNORM_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl'},\n\n 'r32uint': {gl: GL.R32UI, b: 4, c: 1, bpp: 4},\n 'r32sint': {gl: GL.R32I, b: 4, c: 1, bpp: 4},\n 'r32float': {gl: GL.R32F, bpp: 4, b: 4, c: 1, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n\n // Packed 32-bit formats\n 'rgb9e5ufloat': {gl: GL.RGB9_E5, b: 4, c: 3, p: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rg11b10ufloat': {gl: GL.R11F_G11F_B10F, b: 4, c: 3, p: 1,render: 'texture-renderable-float32-webgl'},\n 'rgb10a2unorm': {gl: GL.RGB10_A2, b: 4, c: 4, p: 1},\n // webgl2 only\n 'rgb10a2unorm-webgl': {b: 4, c: 4, gl: GL.RGB10_A2UI, p: 1, wgpu: false, bpp: 4},\n\n // 48-bit formats\n 'rgb16unorm-webgl': {gl: GL.RGB16_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl'},\n 'rgb16snorm-webgl': {gl: GL.RGB16_SNORM_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl'},\n\n // 64-bit formats\n 'rg32uint': {gl: GL.RG32UI, b: 8, c: 2},\n 'rg32sint': {gl: GL.RG32I, b: 8, c: 2},\n 'rg32float': {gl: GL.RG32F, b: 8, c: 2, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n 'rgba16uint': {gl: GL.RGBA16UI, b: 8, c: 4},\n 'rgba16sint': {gl: GL.RGBA16I, b: 8, c: 4},\n 'rgba16float': {gl: GL.RGBA16F, gl1: GL.RGBA, b: 8, c: 4, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rgba16unorm-webgl': {gl: GL.RGBA16_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl'},\n 'rgba16snorm-webgl': {gl: GL.RGBA16_SNORM_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl'},\n\n // 96-bit formats (deprecated!)\n 'rgb32float-webgl': {gl: GL.RGB32F, gl1: GL.RGB, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl',\n gl2ext: EXT_FLOAT_RENDER_WEBGL2, gl1ext: EXT_FLOAT_WEBGL1, // WebGL1 render buffers are supported with GL.RGB32F\n dataFormat: GL.RGB, types: [GL.FLOAT]},\n \n // 128-bit formats\n 'rgba32uint': {gl: GL.RGBA32UI, b: 16, c: 4},\n 'rgba32sint': {gl: GL.RGBA32I, b: 16, c: 4},\n 'rgba32float': {gl: GL.RGBA32F, gl1: GL.RGBA, b: 16, c: 4, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n\n // Depth and stencil formats\n 'stencil8': {gl: GL.STENCIL_INDEX8, b: 1, c: 1, attachment: GL.STENCIL_ATTACHMENT}, // 8 stencil bits\n\n 'depth16unorm': {gl: GL.DEPTH_COMPONENT16, gl1: GL.DEPTH_COMPONENT16, b: 2, c: 1, attachment: GL.DEPTH_ATTACHMENT}, // 16 depth bits\n 'depth24plus': {gl: GL.DEPTH_COMPONENT24, b: 3, c: 1, attachment: GL.DEPTH_ATTACHMENT},\n 'depth32float': {gl: GL.DEPTH_COMPONENT32F, b: 4, c: 1, attachment: GL.DEPTH_ATTACHMENT},\n\n 'depth24plus-stencil8': {b: 4, gl: GL.UNSIGNED_INT_24_8, gl1: GL.DEPTH_STENCIL, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},\n // \"depth24unorm-stencil8\" feature\n 'depth24unorm-stencil8': {gl: GL.DEPTH24_STENCIL8, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},\n // \"depth32float-stencil8\" feature\n \"depth32float-stencil8\": {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},\n\n // BC compressed formats: check device.features.has(\"texture-compression-bc\");\n\n 'bc1-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgb-unorm-srgb-webgl': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n\n 'bc1-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc2-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc2-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc3-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc3-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc4-r-unorm': {gl: GL.COMPRESSED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc4-r-snorm': {gl: GL.COMPRESSED_SIGNED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-unorm': {gl: GL.COMPRESSED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-snorm': {gl: GL.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc6h-rgb-ufloat': {gl: GL.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc6h-rgb-float': {gl: GL.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm': {gl: GL.COMPRESSED_RGBA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n\n // WEBGL_compressed_texture_etc: device.features.has(\"texture-compression-etc2\")\n // Note: Supposedly guaranteed availability compressed formats in WebGL2, but through CPU decompression\n\n 'etc2-rgb8unorm': {gl: GL.COMPRESSED_RGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm': {gl: GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm-srgb': {gl: GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgba8unorm': {gl: GL.COMPRESSED_RGBA8_ETC2_EAC, f: texture_compression_etc2},\n 'etc2-rgba8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, f: texture_compression_etc2},\n\n 'eac-r11unorm': {gl: GL.COMPRESSED_R11_EAC, f: texture_compression_etc2},\n 'eac-r11snorm': {gl: GL.COMPRESSED_SIGNED_R11_EAC, f: texture_compression_etc2},\n 'eac-rg11unorm': {gl: GL.COMPRESSED_RG11_EAC, f: texture_compression_etc2},\n 'eac-rg11snorm': {gl: GL.COMPRESSED_SIGNED_RG11_EAC, f: texture_compression_etc2},\n\n // X_ASTC compressed formats: device.features.has(\"texture-compression-astc\")\n\n 'astc-4x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-4x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x12_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, f: texture_compression_astc},\n\n // WEBGL_compressed_texture_pvrtc\n\n 'pvrtc-rgb4unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba4unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rbg2unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba2unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n\n // WEBGL_compressed_texture_etc1\n\n 'etc1-rbg-unorm-webgl': {gl: GL.COMPRESSED_RGB_ETC1_WEBGL, f: texture_compression_etc1_webgl},\n\n // WEBGL_compressed_texture_atc\n\n 'atc-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_ATC_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgba-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgbai-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL, f: texture_compression_atc_webgl}\n};\n\n// FUNCTIONS\n\nfunction getTextureFormat(format: TextureFormat | GL): TextureFormat {\n if (typeof format === 'string') {\n return format;\n }\n const entry = Object.entries(TEXTURE_FORMATS).find(([, entry]) => (entry.gl === format || entry.gl1 === format));\n if (!entry) {\n throw new Error(`Unknown texture format ${format}`);\n }\n return entry[0] as TextureFormat;\n}\n\n/** Checks if a texture format is supported */\nexport function isTextureFormatSupported(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = getTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return false;\n }\n // Check that we have a GL constant\n if (isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined) {\n return false;\n }\n // Check extensions\n const extension = info.x || (isWebGL2(gl) ? info.gl2ext || info.gl1ext : info.gl1ext);\n if (extension) {\n return Boolean(gl.getExtension(extension));\n }\n // if (info.gl1 === undefined && info.gl2 === undefined) {\n // // No info - always supported\n // }\n return true;\n}\n\n/** Checks if a texture format is supported */\nexport function getTextureFormatSupport(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): {\n supported: boolean;\n filterable?: boolean;\n renderable?: boolean;\n blendable?: boolean;\n storable?: boolean;\n} {\n const format = getTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return {supported: false};\n }\n let decoded;\n try {\n decoded = decodeTextureFormat(format);\n } catch {}\n\n // Support Check that we have a GL constant\n let supported = isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined;\n supported = supported && checkTextureFeatures(gl, [info.f]);\n\n // Filtering\n const filterable = info.filter\n ? checkTextureFeatures(gl, [info.filter])\n : decoded && !decoded.signed;\n const renderable = info.filter\n ? checkTextureFeatures(gl, [info.render])\n : decoded && !decoded.signed;\n\n return {\n supported,\n renderable: supported && checkTextureFeatures(gl, [info.render]),\n filterable: supported && checkTextureFeatures(gl, [info.filter]),\n blendable: false, // tod,\n storable: false\n };\n}\n\n/** Checks whether linear filtering (interpolated sampling) is available for floating point textures */\nexport function isTextureFormatFilterable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = getTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n try {\n const decoded = decodeTextureFormat(format);\n if (decoded.signed) {\n return false;\n }\n } catch {\n return false;\n }\n if (format.endsWith('32float')) {\n return Boolean(gl.getExtension('OES_texture_float_linear'));\n }\n if (format.endsWith('16float')) {\n return Boolean(gl.getExtension('OES_texture_half_float_linear'));\n }\n // if (typeof format === 'string') {\n // if (format === 'rgba32float') {\n // return gl.device.features.has('texture-renderable-rgba32float-webgl');\n // }\n // if (format.endsWith('32float')) {\n // return gl.device.features.has('texture-renderable-float32-webgl');\n // }\n // if (format.endsWith('16float')) {\n // return gl.device.features.has('texture-renderable-float16-webgl');\n // }\n // }\n return true;\n}\n\nexport function isTextureFormatRenderable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = getTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n if (typeof format === 'number') {\n return false; // isTextureFormatFilterableWebGL(gl, format);\n }\n // TODO depends on device...\n return true;\n}\n\n/**\n * Converts WebGPU string style texture formats to GL constants\n * Pass through GL constants\n */\nexport function getWebGLTextureFormat(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL): GL | undefined {\n const format = getTextureFormat(formatOrGL);\n const formatInfo = TEXTURE_FORMATS[format];\n const webglFormat = isWebGL2(gl) ? formatInfo?.gl : formatInfo?.gl1;\n // Remap or pass through\n if (typeof format === 'number') {\n return webglFormat || format;\n }\n if (webglFormat === undefined) {\n throw new Error(`Unsupported texture format ${format}`);\n }\n return webglFormat;\n}\n\nexport function getWebGLTextureParameters(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL) {\n const format = getTextureFormat(formatOrGL);\n const webglFormat = getWebGLTextureFormat(gl, format);\n const decoded = decodeTextureFormat(format);\n return {\n format: webglFormat,\n dataFormat: getWebGLPixelDataFormat(\n decoded.format,\n decoded.integer,\n decoded.normalized,\n webglFormat\n ),\n type: getWebGLDataType(decoded.dataType),\n // @ts-expect-error\n compressed: decoded.compressed\n };\n}\n\nexport function getWebGLDepthStencilAttachment(\n formatOrGL: TextureFormat | GL\n): GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT {\n const format = getTextureFormat(formatOrGL);\n if (typeof format === 'number') {\n // TODO\n throw new Error('unsupported depth stencil format')\n }\n const info = TEXTURE_FORMATS[format];\n const attachment = info.attachment;\n if (!attachment) {\n throw new Error('not a depth stencil format');\n }\n return attachment;\n}\n\n/**\n * function to test if Float 32 bit format texture can be bound as color attachment\n * @todo Generalize to check arbitrary formats?\n */\nexport function _checkFloat32ColorAttachment(\n gl: WebGLRenderingContext,\n internalFormat = gl.RGBA,\n srcFormat = GL.RGBA,\n srcType = GL.UNSIGNED_BYTE\n) {\n let texture: WebGLTexture | null = null;\n let framebuffer: WebGLFramebuffer | null = null;\n try {\n texture = gl.createTexture();\n gl.bindTexture(GL.TEXTURE_2D, texture);\n\n const level = 0;\n const width = 1;\n const height = 1;\n const border = 0;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n width,\n height,\n border,\n srcFormat,\n srcType,\n pixel\n );\n\n framebuffer = gl.createFramebuffer();\n gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) === GL.FRAMEBUFFER_COMPLETE;\n\n gl.bindTexture(GL.TEXTURE_2D, null);\n return status;\n } finally {\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(framebuffer);\n }\n}\n\n/** @deprecated should be removed */\nconst DATA_FORMAT_CHANNELS = {\n [GL.RED]: 1,\n [GL.RED_INTEGER]: 1,\n [GL.RG]: 2,\n [GL.RG_INTEGER]: 2,\n [GL.RGB]: 3,\n [GL.RGB_INTEGER]: 3,\n [GL.RGBA]: 4,\n [GL.RGBA_INTEGER]: 4,\n [GL.DEPTH_COMPONENT]: 1,\n [GL.DEPTH_STENCIL]: 1,\n [GL.ALPHA]: 1,\n [GL.LUMINANCE]: 1,\n [GL.LUMINANCE_ALPHA]: 2\n};\n\n/** @deprecated should be removed */\nconst TYPE_SIZES = {\n [GL.FLOAT]: 4,\n [GL.UNSIGNED_INT]: 4,\n [GL.INT]: 4,\n [GL.UNSIGNED_SHORT]: 2,\n [GL.SHORT]: 2,\n [GL.HALF_FLOAT]: 2,\n [GL.BYTE]: 1,\n [GL.UNSIGNED_BYTE]: 1\n};\n\n/** TODO - VERY roundabout legacy way of calculating bytes per pixel */\nexport function getTextureFormatBytesPerPixel(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL): number {\n const format = getTextureFormat(formatOrGL);\n const params = getWebGLTextureParameters(gl, format);\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;\n const channelSize = TYPE_SIZES[params.type] || 1;\n return channels * channelSize;\n}\n\n// DATA TYPE HELPERS\n\nfunction getWebGLPixelDataFormat(\n dataFormat: string,\n integer: boolean,\n normalized: boolean,\n format: GL\n): GL {\n // WebGL1 formats use same internalFormat\n if (format === GL.RGBA || format === GL.RGB) {\n return format;\n }\n // prettier-ignore\n switch (dataFormat) {\n case 'r': return integer && !normalized ? GL.RED_INTEGER : GL.RED;\n case 'rg': return integer && !normalized ? GL.RG_INTEGER : GL.RG;\n case 'rgb': return integer && !normalized ? GL.RGB_INTEGER : GL.RGB;\n case 'rgba': return integer && !normalized ? GL.RGBA_INTEGER : GL.RGBA;\n default: return GL.RGBA;\n }\n}\n\nexport function getWebGLDataType(dataType: string): GL {\n // prettier-ignore\n switch (dataType) {\n case 'uint8': return GL.UNSIGNED_BYTE;\n case 'sint8': return GL.BYTE;\n case 'uint16': return GL.UNSIGNED_SHORT;\n case 'sint16': return GL.SHORT;\n case 'uint32': return GL.UNSIGNED_INT;\n case 'sint32': return GL.INT;\n case 'float16': return GL.HALF_FLOAT;\n case 'float32': return GL.FLOAT;\n default: return GL.UNSIGNED_BYTE;\n }\n}\n"],"file":"texture-formats.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapter/converters/texture-formats.ts"],"names":["texture_compression_bc","texture_compression_astc","texture_compression_etc2","texture_compression_etc1_webgl","texture_compression_pvrtc_webgl","texture_compression_atc_webgl","X_S3TC","X_S3TC_SRGB","X_RGTC","X_BPTC","X_ETC2","X_ASTC","X_ETC1","X_PVRTC","X_ATC","EXT_SRGB","EXT_TEXTURE_NORM16","EXT_FLOAT_WEBGL1","EXT_FLOAT_RENDER_WEBGL2","checkExtension","gl","extension","getExtension","checkExtensions","extensions","every","TEXTURE_FEATURE_CHECKS","checkTextureFeature","feature","checkTextureFeatures","features","getTextureFeatures","textureFeatures","Object","keys","filter","TEXTURE_FORMATS","GL","RGB","gl1","b","c","bpp","dataFormat","types","UNSIGNED_BYTE","UNSIGNED_SHORT_5_6_5","RGBA","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","R8","R8_SNORM","R8UI","R8I","RG8","RG8_SNORM","RG8UI","RG8I","R16UI","R16I","R16F","render","R16_EXT","f","R16_SNORM_EXT","RGBA4","wgpu","RGB565","RGB5_A1","RGB8","RGB8_SNORM","RGBA8","SRGB8_ALPHA8","SRGB_ALPHA_EXT","gl1ext","RGBA8_SNORM","RGBA8UI","RGBA8I","RG16UI","RG16I","RG16F","RG16_EXT","RG16_SNORM_EXT","R32UI","R32I","R32F","RGB9_E5","p","R11F_G11F_B10F","RGB10_A2","RGB10_A2UI","RGB16_EXT","RGB16_SNORM_EXT","RG32UI","RG32I","RG32F","RGBA16UI","RGBA16I","RGBA16F","RGBA16_EXT","RGBA16_SNORM_EXT","RGB32F","gl2ext","FLOAT","RGBA32UI","RGBA32I","RGBA32F","STENCIL_INDEX8","attachment","STENCIL_ATTACHMENT","DEPTH_COMPONENT16","DEPTH_ATTACHMENT","DEPTH_COMPONENT24","DEPTH_COMPONENT32F","UNSIGNED_INT_24_8","DEPTH_STENCIL","DEPTH_STENCIL_ATTACHMENT","DEPTH24_STENCIL8","DEPTH32F_STENCIL8","COMPRESSED_RGB_S3TC_DXT1_EXT","x","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","COMPRESSED_RED_RGTC1_EXT","COMPRESSED_SIGNED_RED_RGTC1_EXT","COMPRESSED_RED_GREEN_RGTC2_EXT","COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT","COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT","COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT","COMPRESSED_RGBA_BPTC_UNORM_EXT","COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT","COMPRESSED_RGB8_ETC2","COMPRESSED_SRGB8_ETC2","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","COMPRESSED_R11_EAC","COMPRESSED_SIGNED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_SIGNED_RG11_EAC","COMPRESSED_RGBA_ASTC_4x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR","COMPRESSED_RGBA_ASTC_5x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR","COMPRESSED_RGBA_ASTC_5x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR","COMPRESSED_RGBA_ASTC_6x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR","COMPRESSED_RGBA_ASTC_6x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR","COMPRESSED_RGBA_ASTC_8x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR","COMPRESSED_RGBA_ASTC_8x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR","COMPRESSED_RGBA_ASTC_8x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR","COMPRESSED_RGBA_ASTC_10x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR","COMPRESSED_RGBA_ASTC_10x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR","COMPRESSED_RGBA_ASTC_10x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR","COMPRESSED_RGBA_ASTC_12x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR","COMPRESSED_RGBA_ASTC_12x12_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB_ATC_WEBGL","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","getTextureFormat","format","entry","entries","find","Error","isTextureFormatSupported","formatOrGL","info","undefined","Boolean","getTextureFormatSupport","supported","renderable","filterable","blendable","storable","isTextureFormatFilterable","decoded","signed","endsWith","isTextureFormatRenderable","getWebGLTextureFormat","formatInfo","webglFormat","getWebGLTextureParameters","getWebGLPixelDataFormat","integer","normalized","type","getWebGLDataType","dataType","compressed","getWebGLDepthStencilAttachment","_checkFloat32ColorAttachment","internalFormat","srcFormat","srcType","texture","framebuffer","createTexture","bindTexture","TEXTURE_2D","level","width","height","border","pixel","Uint8Array","texImage2D","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","deleteTexture","deleteFramebuffer","DATA_FORMAT_CHANNELS","RED","RED_INTEGER","RG","RG_INTEGER","RGB_INTEGER","RGBA_INTEGER","DEPTH_COMPONENT","ALPHA","LUMINANCE","LUMINANCE_ALPHA","TYPE_SIZES","UNSIGNED_INT","INT","UNSIGNED_SHORT","SHORT","HALF_FLOAT","BYTE","getTextureFormatBytesPerPixel","params","channels","channelSize"],"mappings":"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","sourcesContent":["import type {TextureFormat, DeviceFeature} from '@luma.gl/api';\nimport {decodeTextureFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\n\n// TEXTURE FEATURES\n\n// Define local device feature strings to optimize minification\nconst texture_compression_bc: DeviceFeature = 'texture-compression-bc';\nconst texture_compression_astc: DeviceFeature = 'texture-compression-astc';\nconst texture_compression_etc2: DeviceFeature = 'texture-compression-etc2';\nconst texture_compression_etc1_webgl: DeviceFeature = 'texture-compression-etc1-webgl';\nconst texture_compression_pvrtc_webgl: DeviceFeature = 'texture-compression-pvrtc-webgl';\nconst texture_compression_atc_webgl: DeviceFeature = 'texture-compression-atc-webgl';\n\n// Define local webgl extension strings to optimize minification\nconst X_S3TC = 'WEBGL_compressed_texture_s3tc'; // BC1, BC2, BC3\nconst X_S3TC_SRGB = 'WEBGL_compressed_texture_s3tc_srgb'; // BC1, BC2, BC3\nconst X_RGTC = 'EXT_texture_compression_rgtc'; // BC4, BC5\nconst X_BPTC = 'EXT_texture_compression_bptc'; // BC6, BC7\nconst X_ETC2 = 'WEBGL_compressed_texture_etc'; // Renamed from 'WEBGL_compressed_texture_es3'\nconst X_ASTC = 'WEBGL_compressed_texture_astc';\nconst X_ETC1 = 'WEBGL_compressed_texture_etc1';\nconst X_PVRTC = 'WEBGL_compressed_texture_pvrtc';\nconst X_ATC = 'WEBGL_compressed_texture_atc';\n\n// Define local webgl extension strings to optimize minification\nconst EXT_SRGB = 'EXT_sRGB'; // https://developer.mozilla.org/en-US/docs/Web/API/EXT_sRGB\nconst EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';\nconst EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';\nconst EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';\n// const EXT_HALF_FLOAT_WEBGL1 = 'EXT_color_buffer_half_float';\n// const DEPTH = 'WEBGL_depth_texture';\n\nconst checkExtension = (gl: WebGLRenderingContext, extension: string): boolean =>\n gl.getExtension(extension);\nconst checkExtensions = (gl: WebGLRenderingContext, extensions: string[]): boolean =>\n extensions.every((extension) => gl.getExtension(extension));\n\n// prettier-ignore\nconst TEXTURE_FEATURE_CHECKS: Partial<Record<DeviceFeature, (gl: WebGLRenderingContext) => boolean> > = {\n 'texture-blend-float-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'EXT_float_blend'),\n 'texture-formats-srgb-webgl1': (gl) => (isWebGL2(gl) ? true : checkExtension(gl, EXT_SRGB)),\n 'texture-formats-depth-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'WEBGL_depth_texture'),\n 'texture-formats-float32-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_float'),\n 'texture-formats-float16-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_half_float'),\n 'texture-formats-norm16-webgl': (gl) => isWebGL2(gl) ? checkExtension(gl, EXT_TEXTURE_NORM16) : false,\n 'texture-filter-linear-float32-webgl': (gl) => checkExtension(gl, 'OES_texture_float_linear'),\n 'texture-filter-linear-float16-webgl': (gl) => checkExtension(gl, 'OES_texture_half_float_linear'),\n 'texture-filter-anisotropic-webgl': (gl) => checkExtension(gl, 'EXT_texture_filter_anisotropic'),\n 'texture-renderable-float32-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_float'), // [false, 'EXT_color_buffer_float'],\n 'texture-renderable-float16-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_half_float'),\n\n 'texture-compression-bc': (gl) => checkExtensions(gl, [X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC]),\n 'texture-compression-bc5-webgl': (gl) => checkExtensions(gl, [X_RGTC]),\n // 'texture-compression-bc7-webgl': gl => checkExtensions(gl, [X_BPTC]),\n // 'texture-compression-bc3-srgb-webgl': gl => checkExtensions(gl, [X_S3TC_SRGB]),\n // 'texture-compression-bc3-webgl': gl => checkExtensions(gl, [X_S3TC]),\n 'texture-compression-etc2': (gl) => checkExtensions(gl, [X_ETC2]),\n 'texture-compression-astc': (gl) => checkExtensions(gl, [X_ASTC]),\n 'texture-compression-etc1-webgl': (gl) => checkExtensions(gl, [X_ETC1]),\n 'texture-compression-pvrtc-webgl': (gl) => checkExtensions(gl, [X_PVRTC]),\n 'texture-compression-atc-webgl': (gl) => checkExtensions(gl, [X_ATC])\n};\n\nexport function checkTextureFeature(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {\n return TEXTURE_FEATURE_CHECKS[feature]?.(gl) || false;\n}\n\nconst checkTextureFeatures = (gl: WebGLRenderingContext, features: DeviceFeature[]): boolean =>\n features.every((feature) => checkTextureFeature(gl, feature));\n\n/** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */\nexport function getTextureFeatures(gl: WebGLRenderingContext): DeviceFeature[] {\n const textureFeatures = Object.keys(TEXTURE_FEATURE_CHECKS) as DeviceFeature[];\n return textureFeatures.filter((feature) => checkTextureFeature(gl, feature));\n}\n\n// TEXTURE FORMATS\n\n/** Map a format to webgl and constants */\ntype Format = {\n gl?: GL;\n /** If a different unsized format is needed in WebGL1 */\n gl1?: GL;\n gl1ext?: string;\n gl2ext?: string; // format requires WebGL2, when using a WebGL 1 context, color renderbuffer formats are limited\n\n b?: number; // (bytes per pixel), for memory usage calculations.\n /** channels */\n c?: number;\n bpp?: number;\n /** packed */\n p?: number;\n x?: string; // compressed\n f?: DeviceFeature; // for compressed texture formats\n render?: DeviceFeature; // renderable if extension is present\n filter?: DeviceFeature;\n\n wgpu?: false; // If not supported on WebGPU\n\n types?: number[];\n\n dataFormat?: GL;\n attachment?: GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;\n};\n\n// TABLES\n\n/** Legal combinations for internalFormat, format and type *\n// [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1ext: DEPTH},\n// [GL.DEPTH_STENCIL]: {gl1ext: DEPTH},\n// Sized texture format\n// R\n[GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RG\n[GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGB\n[GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGBA\n\n[GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},\n[GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},\n[GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},\n[GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}\n*/\n\n/** Texture format data */\n// prettier-ignore\nexport const TEXTURE_FORMATS: Record<TextureFormat, Format> = {\n // Unsized formats that leave the precision up to the driver.\n // TODO - Fix bpp constants\n // 'r8unorm-unsized': {gl: GL.LUMINANCE, b: 4, c: 2, bpp: 4},\n 'rgb8unorm-unsized': {gl: GL.RGB, gl1: GL.RGB, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5]},\n 'rgba8unorm-unsized': {gl: GL.RGBA, gl1: GL.RGBA, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4, GL.UNSIGNED_SHORT_5_5_5_1]},\n // 'rgb8unorm-srgb-unsized': {gl: GL.SRGB_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n // 'rgba8unorm-srgb-unsized': {gl: GL.SRGB_ALPHA_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n\n // 8-bit formats\n 'r8unorm': {gl: GL.R8, b: 1, c: 1},\n 'r8snorm': {gl: GL.R8_SNORM, b: 1, c: 1},\n 'r8uint': {gl: GL.R8UI, b: 1, c: 1},\n 'r8sint': {gl: GL.R8I, b: 1, c: 1},\n\n // 16-bit formats\n 'rg8unorm': {gl: GL.RG8, b: 2, c: 2},\n 'rg8snorm': {gl: GL.RG8_SNORM, b: 2, c: 2},\n 'rg8uint': {gl: GL.RG8UI, b: 2, c: 2},\n 'rg8sint': {gl: GL.RG8I, b: 2, c: 2},\n\n 'r16uint': {gl: GL.R16UI, b: 2, c: 1},\n 'r16sint': {gl: GL.R16I, b: 2, c: 1},\n 'r16float': {gl: GL.R16F, b: 2, c: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'r16unorm-webgl': {gl: GL.R16_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl'},\n 'r16snorm-webgl': {gl: GL.R16_SNORM_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl'},\n\n // Packed 16-bit formats\n 'rgba4unorm-webgl': {gl: GL.RGBA4, b: 2, c: 4, wgpu: false},\n 'rgb565unorm-webgl': {gl: GL.RGB565, b: 2, c: 4, wgpu: false},\n 'rgb5a1unorm-webgl': {gl: GL.RGB5_A1, b: 2, c: 4, wgpu: false},\n\n // 24-bit formats\n 'rbg8unorm-webgl': {gl: GL.RGB8, b: 3, c: 3, wgpu: false},\n 'rbg8snorm-webgl': {gl: GL.RGB8_SNORM, b: 3, c: 3, wgpu: false},\n\n // 32-bit formats \n 'rgba8unorm': {gl: GL.RGBA8, gl1: GL.RGBA, b: 4, c: 2, bpp: 4},\n 'rgba8unorm-srgb': {gl: GL.SRGB8_ALPHA8, gl1: GL.SRGB_ALPHA_EXT, b: 4, c: 4, gl1ext: EXT_SRGB, bpp: 4},\n 'rgba8snorm': {gl: GL.RGBA8_SNORM, b: 4, c: 4},\n 'rgba8uint': {gl: GL.RGBA8UI, b: 4, c: 4, bpp: 4},\n 'rgba8sint': {gl: GL.RGBA8I, b: 4, c: 4, bpp: 4},\n // reverse colors, webgpu only\n 'bgra8unorm': {b: 4, c: 4},\n 'bgra8unorm-srgb': {b: 4, c: 4},\n\n 'rg16uint': {gl: GL.RG16UI, b: 4, c: 1, bpp: 4},\n 'rg16sint': {gl: GL.RG16I, b: 4, c: 2, bpp: 4},\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n 'rg16float': {gl: GL.RG16F, bpp: 4, b: 4, c: 2, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rg16unorm-webgl': {gl: GL.RG16_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl'},\n 'rg16snorm-webgl': {gl: GL.RG16_SNORM_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl'},\n\n 'r32uint': {gl: GL.R32UI, b: 4, c: 1, bpp: 4},\n 'r32sint': {gl: GL.R32I, b: 4, c: 1, bpp: 4},\n 'r32float': {gl: GL.R32F, bpp: 4, b: 4, c: 1, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n\n // Packed 32-bit formats\n 'rgb9e5ufloat': {gl: GL.RGB9_E5, b: 4, c: 3, p: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rg11b10ufloat': {gl: GL.R11F_G11F_B10F, b: 4, c: 3, p: 1,render: 'texture-renderable-float32-webgl'},\n 'rgb10a2unorm': {gl: GL.RGB10_A2, b: 4, c: 4, p: 1},\n // webgl2 only\n 'rgb10a2unorm-webgl': {b: 4, c: 4, gl: GL.RGB10_A2UI, p: 1, wgpu: false, bpp: 4},\n\n // 48-bit formats\n 'rgb16unorm-webgl': {gl: GL.RGB16_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl'},\n 'rgb16snorm-webgl': {gl: GL.RGB16_SNORM_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl'},\n\n // 64-bit formats\n 'rg32uint': {gl: GL.RG32UI, b: 8, c: 2},\n 'rg32sint': {gl: GL.RG32I, b: 8, c: 2},\n 'rg32float': {gl: GL.RG32F, b: 8, c: 2, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n 'rgba16uint': {gl: GL.RGBA16UI, b: 8, c: 4},\n 'rgba16sint': {gl: GL.RGBA16I, b: 8, c: 4},\n 'rgba16float': {gl: GL.RGBA16F, gl1: GL.RGBA, b: 8, c: 4, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rgba16unorm-webgl': {gl: GL.RGBA16_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl'},\n 'rgba16snorm-webgl': {gl: GL.RGBA16_SNORM_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl'},\n\n // 96-bit formats (deprecated!)\n 'rgb32float-webgl': {gl: GL.RGB32F, gl1: GL.RGB, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl',\n gl2ext: EXT_FLOAT_RENDER_WEBGL2, gl1ext: EXT_FLOAT_WEBGL1, // WebGL1 render buffers are supported with GL.RGB32F\n dataFormat: GL.RGB, types: [GL.FLOAT]},\n \n // 128-bit formats\n 'rgba32uint': {gl: GL.RGBA32UI, b: 16, c: 4},\n 'rgba32sint': {gl: GL.RGBA32I, b: 16, c: 4},\n 'rgba32float': {gl: GL.RGBA32F, gl1: GL.RGBA, b: 16, c: 4, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n\n // Depth and stencil formats\n 'stencil8': {gl: GL.STENCIL_INDEX8, b: 1, c: 1, attachment: GL.STENCIL_ATTACHMENT}, // 8 stencil bits\n\n 'depth16unorm': {gl: GL.DEPTH_COMPONENT16, gl1: GL.DEPTH_COMPONENT16, b: 2, c: 1, attachment: GL.DEPTH_ATTACHMENT}, // 16 depth bits\n 'depth24plus': {gl: GL.DEPTH_COMPONENT24, b: 3, c: 1, attachment: GL.DEPTH_ATTACHMENT},\n 'depth32float': {gl: GL.DEPTH_COMPONENT32F, b: 4, c: 1, attachment: GL.DEPTH_ATTACHMENT},\n\n 'depth24plus-stencil8': {b: 4, gl: GL.UNSIGNED_INT_24_8, gl1: GL.DEPTH_STENCIL, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},\n // \"depth24unorm-stencil8\" feature\n 'depth24unorm-stencil8': {gl: GL.DEPTH24_STENCIL8, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},\n // \"depth32float-stencil8\" feature\n \"depth32float-stencil8\": {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},\n\n // BC compressed formats: check device.features.has(\"texture-compression-bc\");\n\n 'bc1-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgb-unorm-srgb-webgl': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n\n 'bc1-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc2-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc2-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc3-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc3-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc4-r-unorm': {gl: GL.COMPRESSED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc4-r-snorm': {gl: GL.COMPRESSED_SIGNED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-unorm': {gl: GL.COMPRESSED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-snorm': {gl: GL.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc6h-rgb-ufloat': {gl: GL.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc6h-rgb-float': {gl: GL.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm': {gl: GL.COMPRESSED_RGBA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n\n // WEBGL_compressed_texture_etc: device.features.has(\"texture-compression-etc2\")\n // Note: Supposedly guaranteed availability compressed formats in WebGL2, but through CPU decompression\n\n 'etc2-rgb8unorm': {gl: GL.COMPRESSED_RGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm': {gl: GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm-srgb': {gl: GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgba8unorm': {gl: GL.COMPRESSED_RGBA8_ETC2_EAC, f: texture_compression_etc2},\n 'etc2-rgba8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, f: texture_compression_etc2},\n\n 'eac-r11unorm': {gl: GL.COMPRESSED_R11_EAC, f: texture_compression_etc2},\n 'eac-r11snorm': {gl: GL.COMPRESSED_SIGNED_R11_EAC, f: texture_compression_etc2},\n 'eac-rg11unorm': {gl: GL.COMPRESSED_RG11_EAC, f: texture_compression_etc2},\n 'eac-rg11snorm': {gl: GL.COMPRESSED_SIGNED_RG11_EAC, f: texture_compression_etc2},\n\n // X_ASTC compressed formats: device.features.has(\"texture-compression-astc\")\n\n 'astc-4x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-4x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x12_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, f: texture_compression_astc},\n\n // WEBGL_compressed_texture_pvrtc\n\n 'pvrtc-rgb4unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba4unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rbg2unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba2unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n\n // WEBGL_compressed_texture_etc1\n\n 'etc1-rbg-unorm-webgl': {gl: GL.COMPRESSED_RGB_ETC1_WEBGL, f: texture_compression_etc1_webgl},\n\n // WEBGL_compressed_texture_atc\n\n 'atc-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_ATC_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgba-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgbai-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL, f: texture_compression_atc_webgl}\n};\n\n// FUNCTIONS\n\nfunction getTextureFormat(format: TextureFormat | GL): TextureFormat {\n if (typeof format === 'string') {\n return format;\n }\n const entry = Object.entries(TEXTURE_FORMATS).find(([, entry]) => (entry.gl === format || entry.gl1 === format));\n if (!entry) {\n throw new Error(`Unknown texture format ${format}`);\n }\n return entry[0] as TextureFormat;\n}\n\n/** Checks if a texture format is supported */\nexport function isTextureFormatSupported(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = getTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return false;\n }\n // Check that we have a GL constant\n if (isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined) {\n return false;\n }\n // Check extensions\n const extension = info.x || (isWebGL2(gl) ? info.gl2ext || info.gl1ext : info.gl1ext);\n if (extension) {\n return Boolean(gl.getExtension(extension));\n }\n // if (info.gl1 === undefined && info.gl2 === undefined) {\n // // No info - always supported\n // }\n return true;\n}\n\n/** Checks if a texture format is supported */\nexport function getTextureFormatSupport(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): {\n supported: boolean;\n filterable?: boolean;\n renderable?: boolean;\n blendable?: boolean;\n storable?: boolean;\n} {\n const format = getTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return {supported: false};\n }\n // let decoded;\n // try {\n // decoded = decodeTextureFormat(format);\n // } catch {}\n\n // Support Check that we have a GL constant\n let supported = isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined;\n supported = supported && checkTextureFeatures(gl, [info.f]);\n\n // Filtering\n // const filterable = info.filter\n // ? checkTextureFeatures(gl, [info.filter])\n // : decoded && !decoded.signed;\n // const renderable = info.filter\n // ? checkTextureFeatures(gl, [info.render])\n // : decoded && !decoded.signed;\n\n return {\n supported,\n renderable: supported && checkTextureFeatures(gl, [info.render]),\n filterable: supported && checkTextureFeatures(gl, [info.filter]),\n blendable: false, // tod,\n storable: false\n };\n}\n\n/** Checks whether linear filtering (interpolated sampling) is available for floating point textures */\nexport function isTextureFormatFilterable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = getTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n try {\n const decoded = decodeTextureFormat(format);\n if (decoded.signed) {\n return false;\n }\n } catch {\n return false;\n }\n if (format.endsWith('32float')) {\n return Boolean(gl.getExtension('OES_texture_float_linear'));\n }\n if (format.endsWith('16float')) {\n return Boolean(gl.getExtension('OES_texture_half_float_linear'));\n }\n // if (typeof format === 'string') {\n // if (format === 'rgba32float') {\n // return gl.device.features.has('texture-renderable-rgba32float-webgl');\n // }\n // if (format.endsWith('32float')) {\n // return gl.device.features.has('texture-renderable-float32-webgl');\n // }\n // if (format.endsWith('16float')) {\n // return gl.device.features.has('texture-renderable-float16-webgl');\n // }\n // }\n return true;\n}\n\nexport function isTextureFormatRenderable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = getTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n if (typeof format === 'number') {\n return false; // isTextureFormatFilterableWebGL(gl, format);\n }\n // TODO depends on device...\n return true;\n}\n\n/**\n * Converts WebGPU string style texture formats to GL constants\n * Pass through GL constants\n */\nexport function getWebGLTextureFormat(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL): GL | undefined {\n const format = getTextureFormat(formatOrGL);\n const formatInfo = TEXTURE_FORMATS[format];\n const webglFormat = isWebGL2(gl) ? formatInfo?.gl : formatInfo?.gl1;\n // Remap or pass through\n if (typeof format === 'number') {\n return webglFormat || format;\n }\n if (webglFormat === undefined) {\n throw new Error(`Unsupported texture format ${format}`);\n }\n return webglFormat;\n}\n\nexport function getWebGLTextureParameters(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL) {\n const format = getTextureFormat(formatOrGL);\n const webglFormat = getWebGLTextureFormat(gl, format);\n const decoded = decodeTextureFormat(format);\n return {\n format: webglFormat,\n dataFormat: getWebGLPixelDataFormat(\n decoded.format,\n decoded.integer,\n decoded.normalized,\n webglFormat\n ),\n type: getWebGLDataType(decoded.dataType),\n // @ts-expect-error\n compressed: decoded.compressed\n };\n}\n\nexport function getWebGLDepthStencilAttachment(\n formatOrGL: TextureFormat | GL\n): GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT {\n const format = getTextureFormat(formatOrGL);\n if (typeof format === 'number') {\n // TODO\n throw new Error('unsupported depth stencil format')\n }\n const info = TEXTURE_FORMATS[format];\n const attachment = info.attachment;\n if (!attachment) {\n throw new Error('not a depth stencil format');\n }\n return attachment;\n}\n\n/**\n * function to test if Float 32 bit format texture can be bound as color attachment\n * @todo Generalize to check arbitrary formats?\n */\nexport function _checkFloat32ColorAttachment(\n gl: WebGLRenderingContext,\n internalFormat = gl.RGBA,\n srcFormat = GL.RGBA,\n srcType = GL.UNSIGNED_BYTE\n) {\n let texture: WebGLTexture | null = null;\n let framebuffer: WebGLFramebuffer | null = null;\n try {\n texture = gl.createTexture();\n gl.bindTexture(GL.TEXTURE_2D, texture);\n\n const level = 0;\n const width = 1;\n const height = 1;\n const border = 0;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n width,\n height,\n border,\n srcFormat,\n srcType,\n pixel\n );\n\n framebuffer = gl.createFramebuffer();\n gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) === GL.FRAMEBUFFER_COMPLETE;\n\n gl.bindTexture(GL.TEXTURE_2D, null);\n return status;\n } finally {\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(framebuffer);\n }\n}\n\n/** @deprecated should be removed */\nconst DATA_FORMAT_CHANNELS = {\n [GL.RED]: 1,\n [GL.RED_INTEGER]: 1,\n [GL.RG]: 2,\n [GL.RG_INTEGER]: 2,\n [GL.RGB]: 3,\n [GL.RGB_INTEGER]: 3,\n [GL.RGBA]: 4,\n [GL.RGBA_INTEGER]: 4,\n [GL.DEPTH_COMPONENT]: 1,\n [GL.DEPTH_STENCIL]: 1,\n [GL.ALPHA]: 1,\n [GL.LUMINANCE]: 1,\n [GL.LUMINANCE_ALPHA]: 2\n};\n\n/** @deprecated should be removed */\nconst TYPE_SIZES = {\n [GL.FLOAT]: 4,\n [GL.UNSIGNED_INT]: 4,\n [GL.INT]: 4,\n [GL.UNSIGNED_SHORT]: 2,\n [GL.SHORT]: 2,\n [GL.HALF_FLOAT]: 2,\n [GL.BYTE]: 1,\n [GL.UNSIGNED_BYTE]: 1\n};\n\n/** TODO - VERY roundabout legacy way of calculating bytes per pixel */\nexport function getTextureFormatBytesPerPixel(gl: WebGLRenderingContext, formatOrGL: TextureFormat | GL): number {\n const format = getTextureFormat(formatOrGL);\n const params = getWebGLTextureParameters(gl, format);\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;\n const channelSize = TYPE_SIZES[params.type] || 1;\n return channels * channelSize;\n}\n\n// DATA TYPE HELPERS\n\nfunction getWebGLPixelDataFormat(\n dataFormat: string,\n integer: boolean,\n normalized: boolean,\n format: GL\n): GL {\n // WebGL1 formats use same internalFormat\n if (format === GL.RGBA || format === GL.RGB) {\n return format;\n }\n // prettier-ignore\n switch (dataFormat) {\n case 'r': return integer && !normalized ? GL.RED_INTEGER : GL.RED;\n case 'rg': return integer && !normalized ? GL.RG_INTEGER : GL.RG;\n case 'rgb': return integer && !normalized ? GL.RGB_INTEGER : GL.RGB;\n case 'rgba': return integer && !normalized ? GL.RGBA_INTEGER : GL.RGBA;\n default: return GL.RGBA;\n }\n}\n\nexport function getWebGLDataType(dataType: string): GL {\n // prettier-ignore\n switch (dataType) {\n case 'uint8': return GL.UNSIGNED_BYTE;\n case 'sint8': return GL.BYTE;\n case 'uint16': return GL.UNSIGNED_SHORT;\n case 'sint16': return GL.SHORT;\n case 'uint32': return GL.UNSIGNED_INT;\n case 'sint32': return GL.INT;\n case 'float16': return GL.HALF_FLOAT;\n case 'float32': return GL.FLOAT;\n default: return GL.UNSIGNED_BYTE;\n }\n}\n"],"file":"texture-formats.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapter/converters/vertex-formats.ts"],"names":["getVertexFormat","type","components","base","getDataFormat","
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapter/converters/vertex-formats.ts"],"names":["getVertexFormat","type","components","base","getDataFormat","Error","String","GL","INT","UNSIGNED_INT","FLOAT"],"mappings":";;;;;;;;;AAAA;;AAGO,SAASA,eAAT,CAAyBC,IAAzB,EAAmCC,UAAnC,EAAqE;AAC1E,MAAMC,IAAI,GAAGC,aAAa,CAACH,IAAD,CAA1B;;AACA,UAAQC,UAAR;AACE,SAAK,CAAL;AAAQ,aAAOC,IAAP;;AACR,SAAK,CAAL;AAAQ,uBAAUA,IAAV;;AACR,SAAK,CAAL;AAAQ,uBAAUA,IAAV;;AACR,SAAK,CAAL;AAAQ,uBAAUA,IAAV;;AACR;AAAS,YAAM,IAAIE,KAAJ,CAAUC,MAAM,CAACJ,UAAD,CAAhB,CAAN;AALX;AAOD;;AAED,SAASE,aAAT,CAAuBH,IAAvB,EAAkE;AAChE,UAAQA,IAAR;AAEE,SAAKM,mBAAGC,GAAR;AAAa,aAAO,QAAP;;AACb,SAAKD,mBAAGE,YAAR;AAAsB,aAAO,QAAP;;AACtB,SAAKF,mBAAGG,KAAR;AAAe,aAAO,SAAP;;AACf;AAAS,YAAM,IAAIL,KAAJ,CAAUC,MAAM,CAACL,IAAD,CAAhB,CAAN;AALX;AAOD","sourcesContent":["import GL from '@luma.gl/constants';\nimport {VertexFormat} from '@luma.gl/api';\n\nexport function getVertexFormat(type: GL, components: number): VertexFormat {\n const base = getDataFormat(type);\n switch (components) {\n case 1: return base;\n case 2: return `${base}x2`;\n case 3: return `${base}x3`;\n case 4: return `${base}x4`;\n default: throw new Error(String(components));\n }\n}\n\nfunction getDataFormat(type: GL): 'sint32' | 'uint32' | 'float32' {\n switch (type) {\n // TODO\n case GL.INT: return 'sint32';\n case GL.UNSIGNED_INT: return 'uint32';\n case GL.FLOAT: return 'float32';\n default: throw new Error(String(type));\n }\n}"],"file":"vertex-formats.js"}
|