@luma.gl/webgl 9.0.0-alpha.5 → 9.0.0-alpha.6
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.d.ts +11 -1
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +15 -2
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +4 -4
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +21 -2
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/texture-formats.js +3 -3
- package/dist/adapter/converters/texture-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 +12 -2
- package/dist/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +40 -16
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/adapter/helpers/uniforms.d.ts +1 -1
- package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
- package/dist/adapter/helpers/uniforms.js +4 -4
- package/dist/adapter/helpers/uniforms.js.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +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 +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +2 -2
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +5 -3
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +2 -0
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +40 -24
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts +2 -2
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- 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 +4 -3
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +19 -19
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +14 -13
- 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 +1 -1
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/classic/buffer.js +14 -6
- package/dist/classic/buffer.js.map +1 -1
- package/dist/context/context/create-context.d.ts.map +1 -1
- package/dist/context/context/create-context.js +8 -2
- package/dist/context/context/create-context.js.map +1 -1
- package/dist/context/context/device-pixels.d.ts.map +1 -1
- package/dist/context/context/device-pixels.js +13 -8
- package/dist/context/context/device-pixels.js.map +1 -1
- package/dist/context/debug/spector.js +1 -1
- package/dist/context/debug/spector.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +1 -1
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +5 -4
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +1 -3
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/context/polyfill/polyfill-table.d.ts +1 -1
- package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-table.js +1 -1
- package/dist/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +1 -1
- package/dist/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/es5/adapter/converters/device-parameters.js +17 -2
- package/dist/es5/adapter/converters/device-parameters.js.map +1 -1
- package/dist/es5/adapter/converters/sampler-parameters.js +21 -2
- package/dist/es5/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/es5/adapter/converters/texture-formats.js +3 -3
- package/dist/es5/adapter/converters/texture-formats.js.map +1 -1
- package/dist/es5/adapter/device-helpers/device-features.js +15 -4
- package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -1
- package/dist/es5/adapter/helpers/get-shader-layout.js +48 -28
- package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/es5/adapter/helpers/uniforms.js +4 -4
- package/dist/es5/adapter/helpers/uniforms.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 +2 -2
- package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-framebuffer.js +4 -3
- package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-render-pass.js +1 -0
- package/dist/es5/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-render-pipeline.js +43 -30
- package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-shader.js +4 -3
- package/dist/es5/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-texture.js +16 -16
- package/dist/es5/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/es5/adapter/webgl-canvas-context.js +1 -1
- package/dist/es5/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/es5/classic/buffer.js +14 -6
- package/dist/es5/classic/buffer.js.map +1 -1
- package/dist/es5/context/context/create-context.js +8 -2
- package/dist/es5/context/context/create-context.js.map +1 -1
- package/dist/es5/context/context/device-pixels.js +14 -8
- package/dist/es5/context/context/device-pixels.js.map +1 -1
- package/dist/es5/context/debug/spector.js +1 -1
- package/dist/es5/context/debug/spector.js.map +1 -1
- package/dist/es5/context/debug/webgl-developer-tools.js +1 -1
- package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/es5/context/parameters/unified-parameter-api.js +2 -2
- package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/es5/context/polyfill/polyfill-table.js +1 -1
- package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/es5/context/state-tracker/track-context-state.js +1 -1
- package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/es5/index.js +22 -16
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/types/webgl.js.map +1 -1
- package/dist/esm/adapter/converters/device-parameters.js +15 -2
- package/dist/esm/adapter/converters/device-parameters.js.map +1 -1
- package/dist/esm/adapter/converters/sampler-parameters.js +21 -2
- package/dist/esm/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/esm/adapter/converters/texture-formats.js +3 -3
- package/dist/esm/adapter/converters/texture-formats.js.map +1 -1
- package/dist/esm/adapter/device-helpers/device-features.js +12 -2
- package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -1
- package/dist/esm/adapter/helpers/get-shader-layout.js +40 -16
- package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/esm/adapter/helpers/uniforms.js +4 -4
- package/dist/esm/adapter/helpers/uniforms.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 +2 -2
- package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-framebuffer.js +5 -3
- package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-render-pass.js +2 -0
- package/dist/esm/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-render-pipeline.js +40 -24
- package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-shader.js +4 -3
- package/dist/esm/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-texture.js +14 -13
- package/dist/esm/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/esm/adapter/webgl-canvas-context.js +1 -1
- package/dist/esm/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/esm/classic/buffer.js +14 -6
- package/dist/esm/classic/buffer.js.map +1 -1
- package/dist/esm/context/context/create-context.js +8 -2
- package/dist/esm/context/context/create-context.js.map +1 -1
- package/dist/esm/context/context/device-pixels.js +13 -8
- package/dist/esm/context/context/device-pixels.js.map +1 -1
- package/dist/esm/context/debug/spector.js +1 -1
- package/dist/esm/context/debug/spector.js.map +1 -1
- package/dist/esm/context/debug/webgl-developer-tools.js +1 -1
- package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/esm/context/parameters/unified-parameter-api.js +1 -3
- package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/esm/context/polyfill/polyfill-table.js +1 -1
- package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/esm/context/state-tracker/track-context-state.js +1 -1
- package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/webgl.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/types/webgl.d.ts +2 -2
- package/dist/types/webgl.d.ts.map +1 -1
- package/dist/types/webgl.js.map +1 -1
- package/package.json +7 -4
- package/src/adapter/converters/device-parameters.ts +28 -2
- package/src/adapter/converters/sampler-parameters.ts +16 -7
- package/src/adapter/converters/texture-formats.ts +3 -3
- package/src/adapter/device-helpers/device-features.ts +9 -1
- package/src/adapter/device-helpers/device-limits.ts +1 -1
- package/src/adapter/helpers/get-shader-layout.ts +40 -21
- package/src/adapter/helpers/uniforms.ts +21 -10
- package/src/adapter/objects/webgl-vertex-array-object.ts +1 -1
- package/src/adapter/resources/webgl-buffer.ts +3 -3
- package/src/adapter/resources/webgl-framebuffer.ts +6 -3
- package/src/adapter/resources/webgl-render-pass.ts +1 -0
- package/src/adapter/resources/webgl-render-pipeline.ts +43 -35
- package/src/adapter/resources/webgl-sampler.ts +5 -3
- package/src/adapter/resources/webgl-shader.ts +5 -4
- package/src/adapter/resources/webgl-texture.ts +37 -25
- package/src/adapter/webgl-canvas-context.ts +1 -1
- package/src/classic/buffer.ts +7 -7
- package/src/context/context/create-context.ts +9 -5
- package/src/context/context/device-pixels.ts +15 -9
- package/src/context/debug/spector.ts +1 -1
- package/src/context/debug/webgl-developer-tools.ts +1 -1
- package/src/context/parameters/unified-parameter-api.ts +12 -9
- package/src/context/polyfill/polyfill-context.ts +1 -1
- package/src/context/polyfill/polyfill-table.ts +1 -1
- package/src/context/state-tracker/track-context-state.ts +1 -1
- package/src/index.ts +11 -5
- package/src/types/webgl.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapter/device-helpers/device-features.ts"],"names":["isWebGL2","isOldIE","getTextureFeatures","_checkFloat32ColorAttachment","getDeviceFeatures","gl","features","getWebGLFeatures","textureFeature","add","getExtension","Set","feature","Object","keys","WEBGL_FEATURES","isFeatureSupported","webgl1Feature","webgl2Feature","featureDefinition","Boolean","canCompileGLSLExtension","behavior","compiledGLSLExtensions","extensionName","opts","source","shader","createShader","VERTEX_SHADER","shaderSource","compileShader","canCompile","getShaderParameter","COMPILE_STATUS","deleteShader"],"mappings":"AAMA,SAAQA,QAAR,QAAuB,oCAAvB;AACA,SAAQC,OAAR,QAAsB,aAAtB;AACA,SAAQC,kBAAR,EAA4BC,4BAA5B,QAA+D,+BAA/D;AAGA,OAAO,SAASC,iBAAT,CAA2BC,EAA3B,EAA0E;AAC/E,QAAMC,QAAQ,GAAGC,gBAAgB,CAACF,EAAD,CAAjC;;AAIA,OAAK,MAAMG,cAAX,IAA6BN,kBAAkB,CAACG,EAAD,CAA/C,EAAqD;AACnDC,IAAAA,QAAQ,CAACG,GAAT,CAAaD,cAAb;AACD;;AASD,SAAOF,QAAP;AACD;AAGD,OAAO,SAASC,gBAAT,CAA0BF,EAA1B,EAAyE;AAE9EA,EAAAA,EAAE,CAACK,YAAH,CAAgB,wBAAhB;AACAL,EAAAA,EAAE,CAACK,YAAH,CAAgB,0BAAhB;AACAL,EAAAA,EAAE,CAACK,YAAH,CAAgB,iBAAhB;AAEA,QAAMJ,QAAQ,GAAG,IAAIK,GAAJ,EAAjB;;AACA,OAAK,MAAMC,OAAX,IAAsBC,MAAM,CAACC,IAAP,CAAYC,cAAZ,CAAtB,EAAmD;AAEjD,QAAIC,kBAAkB,CAACX,EAAD,EAAKO,OAAL,CAAtB,EAAqC;AAEnCN,MAAAA,QAAQ,CAACG,GAAT,CAAaG,OAAb;AACD;AACF;;AACD,SAAON,QAAP;AACD;;AAED,SAASU,kBAAT,CAA4BX,EAA5B,EAAuDO,OAAvD,EAAwF;AACtF,QAAM,CAACK,aAAD,EAAgBC,aAAhB,IAAiCH,cAAc,CAACH,OAAD,CAArD;AAA+D;AAG/D,QAAMO,iBAAiB,GAAGnB,QAAQ,CAACK,EAAD,CAAR,GAAea,aAAf,GAA+BD,aAAzD;;AAGA,MAAI,OAAOE,iBAAP,KAA6B,SAAjC,EAA4C;AAC1C,WAAOA,iBAAP;AACD;;AAED,UAAQP,OAAR;AACE,SAAK,sCAAL;AACE,aAAOZ,QAAQ,CAACK,EAAD,CAAR,GAAee,OAAO,CAACf,EAAE,CAACK,YAAH,CAAgBS,iBAAhB,CAAD,CAAtB,GACLhB,4BAA4B,CAACE,EAAD,CAD9B;;AAEF,SAAK,kBAAL;AACE,aAAOgB,uBAAuB,CAAChB,EAAD,EAAKc,iBAAL,CAA9B;;AACF,SAAK,gBAAL;AACE,aAAOE,uBAAuB,CAAChB,EAAD,EAAKc,iBAAL,EAAwB;AAACG,QAAAA,QAAQ,EAAE;AAAX,OAAxB,CAA9B;;AACF,SAAK,iBAAL;AACE,aAAOD,uBAAuB,CAAChB,EAAD,EAAKc,iBAAL,CAA9B;;AACF;AACE,aAAOC,OAAO,CAACf,EAAE,CAACK,YAAH,CAAgBS,iBAAhB,CAAD,CAAd;AAXJ;AAaD;;AAED,MAAMI,sBAA+C,GAAG,EAAxD;AAeA,OAAO,SAASF,uBAAT,CAAiChB,EAAjC,EAA4DmB,aAA5D,EAA2EC,IAAiB,GAAG,EAA/F,EAAmG;AACxG,MAAI,CAACxB,OAAO,CAACwB,IAAD,CAAZ,EAAoB;AAClB,WAAO,IAAP;AACD;;AAED,MAAID,aAAa,IAAID,sBAArB,EAA6C;AAC3C,WAAOA,sBAAsB,CAACC,aAAD,CAA7B;AACD;;AAED,QAAMF,QAAQ,GAAGG,IAAI,CAACH,QAAL,IAAiB,QAAlC;AACA,QAAMI,MAAM,2BAAoBF,aAApB,gBAAuCF,QAAvC,yBAAZ;AAEA,QAAMK,MAAM,GAAGtB,EAAE,CAACuB,YAAH,CAAgBvB,EAAE,CAACwB,aAAnB,CAAf;AACAxB,EAAAA,EAAE,CAACyB,YAAH,CAAgBH,MAAhB,EAAwBD,MAAxB;AACArB,EAAAA,EAAE,CAAC0B,aAAH,CAAiBJ,MAAjB;AACA,QAAMK,UAAU,GAAG3B,EAAE,CAAC4B,kBAAH,CAAsBN,MAAtB,EAA8BtB,EAAE,CAAC6B,cAAjC,CAAnB;AACA7B,EAAAA,EAAE,CAAC8B,YAAH,CAAgBR,MAAhB;AACAJ,EAAAA,sBAAsB,CAACC,aAAD,CAAtB,GAAwCQ,UAAxC;AACA,SAAOA,UAAP;AACD;AAKD,MAAMjB,cAAoF,GAAG;AAC3F,WAAS,CAAC,IAAD,EAAO,IAAP,CADkF;AAE3F,YAAU,CAAC,KAAD,EAAQ,IAAR,CAFiF;AAI3F,uBAAqB,CAAC,0BAAD,EAA6B,iCAA7B,CAJsE;AAO3F,gCAA8B,CAAC,yBAAD,EAA4B,IAA5B,CAP6D;AAQ3F,gCAA8B,CAAC,wBAAD,EAA2B,IAA3B,CAR6D;AAS3F,oCAAkC,CAAC,oBAAD,EAAuB,IAAvB,CATyD;AAU3F,yBAAuB,CAAC,wBAAD,EAA2B,IAA3B,CAVoE;AAW3F,yBAAuB,CAAC,kBAAD,EAAqB,IAArB,CAXoE;AAY3F,gCAA8B,CAAC,iBAAD,EAAoB,iBAApB,CAZ6D;AAe3F,iCAA+B,CAAC,UAAD,EAAa,IAAb,CAf4D;AAkB3F,kCAAgC,CAAC,qBAAD,EAAwB,IAAxB,CAlB2D;AAmB3F,oCAAkC,CAAC,mBAAD,EAAsB,IAAtB,CAnByD;AAoB3F,oCAAkC,CAAC,wBAAD,EAA2B,IAA3B,CApByD;AAsB3F,yCAAuC,CAAC,0BAAD,EAA6B,0BAA7B,CAtBoD;AAuB3F,yCAAuC,CAAC,+BAAD,EAAkC,+BAAlC,CAvBoD;AAwB3F,sCAAoC,CAAC,gCAAD,EAAmC,gCAAnC,CAxBuD;AA2B3F,0CAAwC,CAAC,0BAAD,EAA6B,wBAA7B,CA3BmD;AA4B3F,sCAAoC,CAAC,KAAD,EAAQ,wBAAR,CA5BuD;AA6B3F,sCAAoC,CAAC,6BAAD,EAAgC,6BAAhC,CA7BuD;AAgC3F,oBAAkB,CAAC,oBAAD,EAAuB,IAAvB,CAhCyE;AAiC3F,qBAAmB,CAAC,gBAAD,EAAmB,IAAnB,CAjCwE;AAkC3F,sBAAoB,CAAC,0BAAD,EAA6B,IAA7B,CAlCuE;AAmC3F,sBAAoB,CAAC,wBAAD,EAA2B,IAA3B;AAnCuE,CAA7F","sourcesContent":["// Feature detection for WebGL\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\nimport {DeviceFeature} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport {isOldIE} from './is-old-ie';\nimport {getTextureFeatures, _checkFloat32ColorAttachment} from '../converters/texture-formats';\n\n/** Get WebGPU style feature strings */\nexport function getDeviceFeatures(gl: WebGLRenderingContext): Set<DeviceFeature> {\n const features = getWebGLFeatures(gl);\n\n // texture features\n // features.add('texture-compression-bc'); \n for (const textureFeature of getTextureFeatures(gl)) {\n features.add(textureFeature);\n }\n\n // TODO\n // features.add('depth-clip-control'); // GPUPrimitiveState.clampDepth\n // features.add('depth24unorm-stencil8'); // GPUTextureFormat 'depth24unorm-stencil8'.\n // features.add('depth32float-stencil8'); // GPUTextureFormat 'depth32float-stencil8'.\n // features.add('timestamp-query'); // GPUQueryType \"timestamp-query\"\n // \"indirect-first-instance\"\n\n return features;\n}\n\n/** Extract all WebGL features */\nexport function getWebGLFeatures(gl: WebGLRenderingContext): Set<DeviceFeature> {\n // Enables EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend\n gl.getExtension('EXT_color_buffer_float');\n gl.getExtension('WEBGL_color_buffer_float');\n gl.getExtension('EXT_float_blend');\n\n const features = new Set<DeviceFeature>();\n for (const feature of Object.keys(WEBGL_FEATURES)) {\n // @ts-expect-error\n if (isFeatureSupported(gl, feature)) {\n // @ts-expect-error\n features.add(feature);\n }\n }\n return features;\n}\n\nfunction isFeatureSupported(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {\n const [webgl1Feature, webgl2Feature] = WEBGL_FEATURES[feature];;\n\n // Get extension name from table\n const featureDefinition = isWebGL2(gl) ? webgl2Feature : webgl1Feature;\n\n // Check if the value is dependent on checking one or more extensions\n if (typeof featureDefinition === 'boolean') {\n return featureDefinition;\n }\n\n switch (feature) {\n case 'texture-renderable-rgba32float-webgl':\n return isWebGL2(gl) ? Boolean(gl.getExtension(featureDefinition)) :\n _checkFloat32ColorAttachment(gl);\n case 'glsl-derivatives':\n return canCompileGLSLExtension(gl, featureDefinition); // TODO options\n case 'glsl-frag-data':\n return canCompileGLSLExtension(gl, featureDefinition, {behavior: 'require'}); // TODO options\n case 'glsl-frag-depth':\n return canCompileGLSLExtension(gl, featureDefinition); // TODO options\n default:\n return Boolean(gl.getExtension(featureDefinition));\n }\n}\n\nconst compiledGLSLExtensions: Record<string, boolean> = {};\n\n/*\n * Enables feature detection in IE11 due to a bug where gl.getExtension may return true\n * but fail to compile when the extension is enabled in the shader. Specifically,\n * the OES_standard_derivatives and WEBGL_draw_buffers extensions fails to compile in IE11 even though its included\n * in the list of supported extensions.\n * opts allows user agent to be overridden for testing\n * Inputs :\n * gl : WebGL context\n * cap : Key of WEBGL_FEATURES object identifying the extension\n * opts :\n * behavior : behavior of extension to be tested, by defualt `enable` is used\n * Returns : true, if shader is compiled successfully, false otherwise\n */\nexport function canCompileGLSLExtension(gl: WebGLRenderingContext, extensionName, opts: {behavior?} = {}) {\n if (!isOldIE(opts)) {\n return true;\n }\n\n if (extensionName in compiledGLSLExtensions) {\n return compiledGLSLExtensions[extensionName];\n }\n\n const behavior = opts.behavior || 'enable';\n const source = `#extension GL_${extensionName} : ${behavior}\\nvoid main(void) {}`;\n\n const shader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n gl.deleteShader(shader);\n compiledGLSLExtensions[extensionName] = canCompile;\n return canCompile;\n}\n\n/** Defines luma.gl \"feature\" names and semantics\n * Format: 'feature-name: [WebGL1 support, WebGL2 support] / [WebGL1 and WebGL2 support]', when support is 'string' it is the name of the extension\n */\nconst WEBGL_FEATURES: Partial<Record<DeviceFeature, [boolean | string, boolean | string]>> = {\n 'webgl': [true, true],\n 'webgl2': [false, true],\n\n 'timer-query-webgl': ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],\n\n // WEBGL1 SUPPORT\n 'vertex-array-object-webgl1': ['OES_vertex_array_object', true],\n 'instanced-rendering-webgl1': ['ANGLE_instanced_arrays', true],\n 'multiple-render-targets-webgl1': ['WEBGL_draw_buffers', true],\n 'index-uint32-webgl1': ['OES_element_index_uint', true],\n 'blend-minmax-webgl1': ['EXT_blend_minmax', true],\n 'texture-blend-float-webgl1': ['EXT_float_blend', 'EXT_float_blend'],\n\n // TEXTURES, RENDERBUFFERS\n 'texture-formats-srgb-webgl1': ['EXT_sRGB', true],\n\n // TEXTURES\n 'texture-formats-depth-webgl1': ['WEBGL_depth_texture', true],\n 'texture-formats-float32-webgl1': ['OES_texture_float', true],\n 'texture-formats-float16-webgl1': ['OES_texture_half_float', true],\n\n 'texture-filter-linear-float32-webgl': ['OES_texture_float_linear', 'OES_texture_float_linear'],\n 'texture-filter-linear-float16-webgl': ['OES_texture_half_float_linear', 'OES_texture_half_float_linear'],\n 'texture-filter-anisotropic-webgl': ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic'],\n\n // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS\n 'texture-renderable-rgba32float-webgl': ['WEBGL_color_buffer_float', 'EXT_color_buffer_float'], // Note override check\n 'texture-renderable-float32-webgl': [false, 'EXT_color_buffer_float'],\n 'texture-renderable-float16-webgl': ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float'],\n\n // GLSL extensions\n 'glsl-frag-data': ['WEBGL_draw_buffers', true],\n 'glsl-frag-depth': ['EXT_frag_depth', true],\n 'glsl-derivatives': ['OES_standard_derivatives', true],\n 'glsl-texture-lod': ['EXT_shader_texture_lod', true]\n};\n"],"file":"device-features.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapter/device-helpers/device-features.ts"],"names":["isWebGL2","isOldIE","getTextureFeatures","_checkFloat32ColorAttachment","getDeviceFeatures","gl","features","getWebGLFeatures","textureFeature","add","getExtension","Set","feature","Object","keys","WEBGL_FEATURES","isFeatureSupported","featureInfo","webgl1Feature","webgl2Feature","featureDefinition","Boolean","canCompileGLSLExtension","behavior","compiledGLSLExtensions","extensionName","opts","source","shader","createShader","VERTEX_SHADER","Error","shaderSource","compileShader","canCompile","getShaderParameter","COMPILE_STATUS","deleteShader"],"mappings":"AAMA,SAAQA,QAAR,QAAuB,oCAAvB;AACA,SAAQC,OAAR,QAAsB,aAAtB;AACA,SAAQC,kBAAR,EAA4BC,4BAA5B,QAA+D,+BAA/D;AAGA,OAAO,SAASC,iBAAT,CAA2BC,EAA3B,EAA0E;AAC/E,QAAMC,QAAQ,GAAGC,gBAAgB,CAACF,EAAD,CAAjC;;AAIA,OAAK,MAAMG,cAAX,IAA6BN,kBAAkB,CAACG,EAAD,CAA/C,EAAqD;AACnDC,IAAAA,QAAQ,CAACG,GAAT,CAAaD,cAAb;AACD;;AASD,SAAOF,QAAP;AACD;AAGD,OAAO,SAASC,gBAAT,CAA0BF,EAA1B,EAAyE;AAE9EA,EAAAA,EAAE,CAACK,YAAH,CAAgB,wBAAhB;AACAL,EAAAA,EAAE,CAACK,YAAH,CAAgB,0BAAhB;AACAL,EAAAA,EAAE,CAACK,YAAH,CAAgB,iBAAhB;AAEA,QAAMJ,QAAQ,GAAG,IAAIK,GAAJ,EAAjB;;AACA,OAAK,MAAMC,OAAX,IAAsBC,MAAM,CAACC,IAAP,CAAYC,cAAZ,CAAtB,EAAmD;AAEjD,QAAIC,kBAAkB,CAACX,EAAD,EAAKO,OAAL,CAAtB,EAAqC;AAEnCN,MAAAA,QAAQ,CAACG,GAAT,CAAaG,OAAb;AACD;AACF;;AACD,SAAON,QAAP;AACD;;AAED,SAASU,kBAAT,CAA4BX,EAA5B,EAAuDO,OAAvD,EAAwF;AACtF,QAAMK,WAAW,GAAGF,cAAc,CAACH,OAAD,CAAlC;;AACA,MAAI,CAACK,WAAL,EAAkB;AAChB,WAAO,KAAP;AACD;;AAED,QAAM,CAACC,aAAD,EAAgBC,aAAhB,IAAiCF,WAAW,IAAI,EAAtD;AAGA,QAAMG,iBAAiB,GAAGpB,QAAQ,CAACK,EAAD,CAAR,GAAec,aAAf,GAA+BD,aAAzD;;AAGA,MAAI,OAAOE,iBAAP,KAA6B,SAAjC,EAA4C;AAC1C,WAAOA,iBAAP;AACD;;AAED,UAAQR,OAAR;AACE,SAAK,sCAAL;AACE,aAAOZ,QAAQ,CAACK,EAAD,CAAR,GAAegB,OAAO,CAAChB,EAAE,CAACK,YAAH,CAAgBU,iBAAhB,CAAD,CAAtB,GACLjB,4BAA4B,CAACE,EAAD,CAD9B;;AAEF,SAAK,kBAAL;AACE,aAAOiB,uBAAuB,CAACjB,EAAD,EAAKe,iBAAL,CAA9B;;AACF,SAAK,gBAAL;AACE,aAAOE,uBAAuB,CAACjB,EAAD,EAAKe,iBAAL,EAAwB;AAACG,QAAAA,QAAQ,EAAE;AAAX,OAAxB,CAA9B;;AACF,SAAK,iBAAL;AACE,aAAOD,uBAAuB,CAACjB,EAAD,EAAKe,iBAAL,CAA9B;;AACF;AACE,aAAOC,OAAO,CAAChB,EAAE,CAACK,YAAH,CAAgBU,iBAAhB,CAAD,CAAd;AAXJ;AAaD;;AAED,MAAMI,sBAA+C,GAAG,EAAxD;AAeA,OAAO,SAASF,uBAAT,CAAiCjB,EAAjC,EAA4DoB,aAA5D,EAA2EC,IAAiB,GAAG,EAA/F,EAAmG;AACxG,MAAI,CAACzB,OAAO,CAACyB,IAAD,CAAZ,EAAoB;AAClB,WAAO,IAAP;AACD;;AAED,MAAID,aAAa,IAAID,sBAArB,EAA6C;AAC3C,WAAOA,sBAAsB,CAACC,aAAD,CAA7B;AACD;;AAED,QAAMF,QAAQ,GAAGG,IAAI,CAACH,QAAL,IAAiB,QAAlC;AACA,QAAMI,MAAM,2BAAoBF,aAApB,gBAAuCF,QAAvC,yBAAZ;AAEA,QAAMK,MAAM,GAAGvB,EAAE,CAACwB,YAAH,CAAgBxB,EAAE,CAACyB,aAAnB,CAAf;;AACA,MAAI,CAACF,MAAL,EAAa;AACX,UAAM,IAAIG,KAAJ,CAAU,QAAV,CAAN;AACD;;AACD1B,EAAAA,EAAE,CAAC2B,YAAH,CAAgBJ,MAAhB,EAAwBD,MAAxB;AACAtB,EAAAA,EAAE,CAAC4B,aAAH,CAAiBL,MAAjB;AACA,QAAMM,UAAU,GAAG7B,EAAE,CAAC8B,kBAAH,CAAsBP,MAAtB,EAA8BvB,EAAE,CAAC+B,cAAjC,CAAnB;AACA/B,EAAAA,EAAE,CAACgC,YAAH,CAAgBT,MAAhB;AACAJ,EAAAA,sBAAsB,CAACC,aAAD,CAAtB,GAAwCS,UAAxC;AACA,SAAOA,UAAP;AACD;AAKD,MAAMnB,cAAoF,GAAG;AAC3F,WAAS,CAAC,IAAD,EAAO,IAAP,CADkF;AAE3F,YAAU,CAAC,KAAD,EAAQ,IAAR,CAFiF;AAI3F,uBAAqB,CAAC,0BAAD,EAA6B,iCAA7B,CAJsE;AAO3F,gCAA8B,CAAC,yBAAD,EAA4B,IAA5B,CAP6D;AAQ3F,gCAA8B,CAAC,wBAAD,EAA2B,IAA3B,CAR6D;AAS3F,oCAAkC,CAAC,oBAAD,EAAuB,IAAvB,CATyD;AAU3F,yBAAuB,CAAC,wBAAD,EAA2B,IAA3B,CAVoE;AAW3F,yBAAuB,CAAC,kBAAD,EAAqB,IAArB,CAXoE;AAY3F,gCAA8B,CAAC,iBAAD,EAAoB,iBAApB,CAZ6D;AAe3F,iCAA+B,CAAC,UAAD,EAAa,IAAb,CAf4D;AAkB3F,kCAAgC,CAAC,qBAAD,EAAwB,IAAxB,CAlB2D;AAmB3F,oCAAkC,CAAC,mBAAD,EAAsB,IAAtB,CAnByD;AAoB3F,oCAAkC,CAAC,wBAAD,EAA2B,IAA3B,CApByD;AAsB3F,yCAAuC,CAAC,0BAAD,EAA6B,0BAA7B,CAtBoD;AAuB3F,yCAAuC,CAAC,+BAAD,EAAkC,+BAAlC,CAvBoD;AAwB3F,sCAAoC,CAAC,gCAAD,EAAmC,gCAAnC,CAxBuD;AA2B3F,0CAAwC,CAAC,0BAAD,EAA6B,wBAA7B,CA3BmD;AA4B3F,sCAAoC,CAAC,KAAD,EAAQ,wBAAR,CA5BuD;AA6B3F,sCAAoC,CAAC,6BAAD,EAAgC,6BAAhC,CA7BuD;AAgC3F,oBAAkB,CAAC,oBAAD,EAAuB,IAAvB,CAhCyE;AAiC3F,qBAAmB,CAAC,gBAAD,EAAmB,IAAnB,CAjCwE;AAkC3F,sBAAoB,CAAC,0BAAD,EAA6B,IAA7B,CAlCuE;AAmC3F,sBAAoB,CAAC,wBAAD,EAA2B,IAA3B;AAnCuE,CAA7F","sourcesContent":["// Feature detection for WebGL\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\nimport {DeviceFeature} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport {isOldIE} from './is-old-ie';\nimport {getTextureFeatures, _checkFloat32ColorAttachment} from '../converters/texture-formats';\n\n/** Get WebGPU style feature strings */\nexport function getDeviceFeatures(gl: WebGLRenderingContext): Set<DeviceFeature> {\n const features = getWebGLFeatures(gl);\n\n // texture features\n // features.add('texture-compression-bc'); \n for (const textureFeature of getTextureFeatures(gl)) {\n features.add(textureFeature);\n }\n\n // TODO\n // features.add('depth-clip-control'); // GPUPrimitiveState.clampDepth\n // features.add('depth24unorm-stencil8'); // GPUTextureFormat 'depth24unorm-stencil8'.\n // features.add('depth32float-stencil8'); // GPUTextureFormat 'depth32float-stencil8'.\n // features.add('timestamp-query'); // GPUQueryType \"timestamp-query\"\n // \"indirect-first-instance\"\n\n return features;\n}\n\n/** Extract all WebGL features */\nexport function getWebGLFeatures(gl: WebGLRenderingContext): Set<DeviceFeature> {\n // Enables EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend\n gl.getExtension('EXT_color_buffer_float');\n gl.getExtension('WEBGL_color_buffer_float');\n gl.getExtension('EXT_float_blend');\n\n const features = new Set<DeviceFeature>();\n for (const feature of Object.keys(WEBGL_FEATURES)) {\n // @ts-expect-error\n if (isFeatureSupported(gl, feature)) {\n // @ts-expect-error\n features.add(feature);\n }\n }\n return features;\n}\n\nfunction isFeatureSupported(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {\n const featureInfo = WEBGL_FEATURES[feature];\n if (!featureInfo) {\n return false;\n }\n\n const [webgl1Feature, webgl2Feature] = featureInfo || [];\n\n // Get extension name from table\n const featureDefinition = isWebGL2(gl) ? webgl2Feature : webgl1Feature;\n\n // Check if the value is dependent on checking one or more extensions\n if (typeof featureDefinition === 'boolean') {\n return featureDefinition;\n }\n\n switch (feature) {\n case 'texture-renderable-rgba32float-webgl':\n return isWebGL2(gl) ? Boolean(gl.getExtension(featureDefinition)) :\n _checkFloat32ColorAttachment(gl);\n case 'glsl-derivatives':\n return canCompileGLSLExtension(gl, featureDefinition); // TODO options\n case 'glsl-frag-data':\n return canCompileGLSLExtension(gl, featureDefinition, {behavior: 'require'}); // TODO options\n case 'glsl-frag-depth':\n return canCompileGLSLExtension(gl, featureDefinition); // TODO options\n default:\n return Boolean(gl.getExtension(featureDefinition));\n }\n}\n\nconst compiledGLSLExtensions: Record<string, boolean> = {};\n\n/*\n * Enables feature detection in IE11 due to a bug where gl.getExtension may return true\n * but fail to compile when the extension is enabled in the shader. Specifically,\n * the OES_standard_derivatives and WEBGL_draw_buffers extensions fails to compile in IE11 even though its included\n * in the list of supported extensions.\n * opts allows user agent to be overridden for testing\n * Inputs :\n * gl : WebGL context\n * cap : Key of WEBGL_FEATURES object identifying the extension\n * opts :\n * behavior : behavior of extension to be tested, by defualt `enable` is used\n * Returns : true, if shader is compiled successfully, false otherwise\n */\nexport function canCompileGLSLExtension(gl: WebGLRenderingContext, extensionName, opts: {behavior?} = {}) {\n if (!isOldIE(opts)) {\n return true;\n }\n\n if (extensionName in compiledGLSLExtensions) {\n return compiledGLSLExtensions[extensionName];\n }\n\n const behavior = opts.behavior || 'enable';\n const source = `#extension GL_${extensionName} : ${behavior}\\nvoid main(void) {}`;\n\n const shader = gl.createShader(gl.VERTEX_SHADER);\n if (!shader) {\n throw new Error('shader');\n }\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n gl.deleteShader(shader);\n compiledGLSLExtensions[extensionName] = canCompile;\n return canCompile;\n}\n\n/** Defines luma.gl \"feature\" names and semantics\n * Format: 'feature-name: [WebGL1 support, WebGL2 support] / [WebGL1 and WebGL2 support]', when support is 'string' it is the name of the extension\n */\nconst WEBGL_FEATURES: Partial<Record<DeviceFeature, [boolean | string, boolean | string]>> = {\n 'webgl': [true, true],\n 'webgl2': [false, true],\n\n 'timer-query-webgl': ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],\n\n // WEBGL1 SUPPORT\n 'vertex-array-object-webgl1': ['OES_vertex_array_object', true],\n 'instanced-rendering-webgl1': ['ANGLE_instanced_arrays', true],\n 'multiple-render-targets-webgl1': ['WEBGL_draw_buffers', true],\n 'index-uint32-webgl1': ['OES_element_index_uint', true],\n 'blend-minmax-webgl1': ['EXT_blend_minmax', true],\n 'texture-blend-float-webgl1': ['EXT_float_blend', 'EXT_float_blend'],\n\n // TEXTURES, RENDERBUFFERS\n 'texture-formats-srgb-webgl1': ['EXT_sRGB', true],\n\n // TEXTURES\n 'texture-formats-depth-webgl1': ['WEBGL_depth_texture', true],\n 'texture-formats-float32-webgl1': ['OES_texture_float', true],\n 'texture-formats-float16-webgl1': ['OES_texture_half_float', true],\n\n 'texture-filter-linear-float32-webgl': ['OES_texture_float_linear', 'OES_texture_float_linear'],\n 'texture-filter-linear-float16-webgl': ['OES_texture_half_float_linear', 'OES_texture_half_float_linear'],\n 'texture-filter-anisotropic-webgl': ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic'],\n\n // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS\n 'texture-renderable-rgba32float-webgl': ['WEBGL_color_buffer_float', 'EXT_color_buffer_float'], // Note override check\n 'texture-renderable-float32-webgl': [false, 'EXT_color_buffer_float'],\n 'texture-renderable-float16-webgl': ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float'],\n\n // GLSL extensions\n 'glsl-frag-data': ['WEBGL_draw_buffers', true],\n 'glsl-frag-depth': ['EXT_frag_depth', true],\n 'glsl-derivatives': ['OES_standard_derivatives', true],\n 'glsl-texture-lod': ['EXT_shader_texture_lod', true]\n};\n"],"file":"device-features.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapter/device-helpers/device-limits.ts"],"names":["GL","getWebGL2Context","getDeviceLimits","gl","gl2","maxTextureDimension1D","maxTextureDimension2D","getParameter","MAX_TEXTURE_SIZE","maxTextureDimension3D","MAX_3D_TEXTURE_SIZE","maxTextureArrayLayers","MAX_ARRAY_TEXTURE_LAYERS","maxBindGroups","maxDynamicUniformBuffersPerPipelineLayout","maxDynamicStorageBuffersPerPipelineLayout","maxSampledTexturesPerShaderStage","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxSamplersPerShaderStage","MAX_COMBINED_TEXTURE_IMAGE_UNITS","maxStorageBuffersPerShaderStage","maxStorageTexturesPerShaderStage","maxUniformBuffersPerShaderStage","MAX_UNIFORM_BUFFER_BINDINGS","maxUniformBufferBindingSize","MAX_UNIFORM_BLOCK_SIZE","maxStorageBufferBindingSize","minUniformBufferOffsetAlignment","UNIFORM_BUFFER_OFFSET_ALIGNMENT","minStorageBufferOffsetAlignment","maxVertexBuffers","maxVertexAttributes","MAX_VERTEX_ATTRIBS","maxVertexBufferArrayStride","maxInterStageShaderComponents","MAX_VARYING_COMPONENTS","maxComputeWorkgroupStorageSize","maxComputeInvocationsPerWorkgroup","maxComputeWorkgroupSizeX","maxComputeWorkgroupSizeY","maxComputeWorkgroupSizeZ","maxComputeWorkgroupsPerDimension","getWebGLLimits","get","pname","get2","defaultValue","ALIASED_LINE_WIDTH_RANGE","ALIASED_POINT_SIZE_RANGE","MAX_CUBE_MAP_TEXTURE_SIZE","MAX_TEXTURE_IMAGE_UNITS","MAX_RENDERBUFFER_SIZE","MAX_VARYING_VECTORS","MAX_VERTEX_UNIFORM_VECTORS","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_VIEWPORT_DIMS","MAX_TEXTURE_MAX_ANISOTROPY_EXT","MAX_CLIENT_WAIT_TIMEOUT_WEBGL","MAX_COLOR_ATTACHMENTS","MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS","MAX_COMBINED_UNIFORM_BLOCKS","MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS","MAX_DRAW_BUFFERS","MAX_ELEMENT_INDEX","MAX_ELEMENTS_INDICES","MAX_ELEMENTS_VERTICES","MAX_FRAGMENT_INPUT_COMPONENTS","MAX_FRAGMENT_UNIFORM_BLOCKS","MAX_FRAGMENT_UNIFORM_COMPONENTS","MAX_SAMPLES","MAX_SERVER_WAIT_TIMEOUT","MAX_TEXTURE_LOD_BIAS","MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS","MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS","MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS","MAX_VERTEX_OUTPUT_COMPONENTS","MAX_VERTEX_UNIFORM_BLOCKS","MAX_VERTEX_UNIFORM_COMPONENTS","MIN_PROGRAM_TEXEL_OFFSET","MAX_PROGRAM_TEXEL_OFFSET"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport type {DeviceLimits} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getWebGL2Context} from '../../context/context/webgl-checks';\n\n/** Populate a WebGPU style device limits */\nexport function getDeviceLimits(gl: WebGLRenderingContext): DeviceLimits {\n const gl2: WebGL2RenderingContext = getWebGL2Context(gl);\n return {\n maxTextureDimension1D: 0, // WebGL does not support 1D textures\n maxTextureDimension2D: gl.getParameter(GL.MAX_TEXTURE_SIZE),\n maxTextureDimension3D: gl2 ? gl2.getParameter(GL.MAX_3D_TEXTURE_SIZE) : 0,\n maxTextureArrayLayers: gl2 ? gl2.getParameter(GL.MAX_ARRAY_TEXTURE_LAYERS) : 0,\n maxBindGroups: 1, // TBD\n maxDynamicUniformBuffersPerPipelineLayout: 0, // TBD\n maxDynamicStorageBuffersPerPipelineLayout: 0, // TBD\n maxSampledTexturesPerShaderStage: gl.getParameter(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS), // TBD\n maxSamplersPerShaderStage: gl.getParameter(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS),\n maxStorageBuffersPerShaderStage: 0, // TBD\n maxStorageTexturesPerShaderStage: 0, // TBD\n maxUniformBuffersPerShaderStage: gl2 ? gl2.getParameter(GL.MAX_UNIFORM_BUFFER_BINDINGS) : 0,\n maxUniformBufferBindingSize: gl2 ? gl2.getParameter(GL.MAX_UNIFORM_BLOCK_SIZE) : 0,\n maxStorageBufferBindingSize: 0,\n minUniformBufferOffsetAlignment: gl2 ? gl2.getParameter(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT) : 0,\n minStorageBufferOffsetAlignment: 0, // TBD\n maxVertexBuffers: 0,\n maxVertexAttributes: gl.getParameter(GL.MAX_VERTEX_ATTRIBS),\n maxVertexBufferArrayStride: 2048, // TBD, this is just the default value from WebGPU\n maxInterStageShaderComponents: gl2 ? gl2.getParameter(GL.MAX_VARYING_COMPONENTS) : 0,\n maxComputeWorkgroupStorageSize: 0, // WebGL does not support compute shaders\n maxComputeInvocationsPerWorkgroup: 0, // WebGL does not support compute shaders\n maxComputeWorkgroupSizeX: 0, // WebGL does not support compute shaders\n maxComputeWorkgroupSizeY: 0, // WebGL does not support compute shaders\n maxComputeWorkgroupSizeZ: 0, // WebGL does not support compute shaders\n maxComputeWorkgroupsPerDimension: 0, // WebGL does not support compute shaders\n }\n}\n\n/** WebGL context limits */\nexport type WebGLLimits = {\n [GL.ALIASED_LINE_WIDTH_RANGE]: [number, number];\n [GL.ALIASED_POINT_SIZE_RANGE]: [number, number];\n [GL.MAX_TEXTURE_SIZE]: number;\n [GL.MAX_CUBE_MAP_TEXTURE_SIZE]: number;\n [GL.MAX_TEXTURE_IMAGE_UNITS]: number;\n [GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS]: number;\n [GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS]: number;\n [GL.MAX_RENDERBUFFER_SIZE]: number;\n [GL.MAX_VARYING_VECTORS]: number;\n [GL.MAX_VERTEX_ATTRIBS]: number;\n [GL.MAX_VERTEX_UNIFORM_VECTORS]: number;\n [GL.MAX_FRAGMENT_UNIFORM_VECTORS]: number;\n [GL.MAX_VIEWPORT_DIMS]: [number, number];\n\n // Extensions\n [GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT]: number;\n\n // WebGL2 Limits\n [GL.MAX_3D_TEXTURE_SIZE]: number;\n [GL.MAX_ARRAY_TEXTURE_LAYERS]: number;\n [GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: number;\n [GL.MAX_COLOR_ATTACHMENTS]: number;\n [GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: number;\n [GL.MAX_COMBINED_UNIFORM_BLOCKS]: number;\n [GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: number;\n [GL.MAX_DRAW_BUFFERS]: number;\n [GL.MAX_ELEMENT_INDEX]: number;\n [GL.MAX_ELEMENTS_INDICES]: number;\n [GL.MAX_ELEMENTS_VERTICES]: number;\n [GL.MAX_FRAGMENT_INPUT_COMPONENTS]: number;\n [GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: number;\n [GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: number;\n [GL.MAX_SAMPLES]: number;\n [GL.MAX_SERVER_WAIT_TIMEOUT]: number;\n [GL.MAX_TEXTURE_LOD_BIAS]: number;\n [GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: number;\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: number;\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: number;\n [GL.MAX_UNIFORM_BLOCK_SIZE]: number;\n [GL.MAX_UNIFORM_BUFFER_BINDINGS]: number;\n [GL.MAX_VARYING_COMPONENTS]: number;\n [GL.MAX_VERTEX_OUTPUT_COMPONENTS]: number;\n [GL.MAX_VERTEX_UNIFORM_BLOCKS]: number;\n [GL.MAX_VERTEX_UNIFORM_COMPONENTS]: number;\n [GL.MIN_PROGRAM_TEXEL_OFFSET]: number;\n [GL.MAX_PROGRAM_TEXEL_OFFSET]: number;\n [GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: number;\n};\n\n\nexport function getWebGLLimits(gl: WebGLRenderingContext): WebGLLimits {\n const gl2 = getWebGL2Context(gl);\n function get<T = number>(pname: number): T {\n return gl.getParameter(pname) as T;\n }\n function get2(pname: number, defaultValue?: number): number;\n function get2<T>(pname: number, defaultValue: T): T;\n function get2<T>(pname: number, defaultValue: T): T {\n return gl2 ? gl2.getParameter(pname) as T : (defaultValue || 0) as T;\n }\n // function getMaxAnistropy() {\n // const extension = gl.getExtension('EXT_texture_filter_anisotropic');\n // }\n return {\n [GL.ALIASED_LINE_WIDTH_RANGE]: get(GL.ALIASED_LINE_WIDTH_RANGE),\n [GL.ALIASED_POINT_SIZE_RANGE]: get(GL.ALIASED_POINT_SIZE_RANGE),\n [GL.MAX_TEXTURE_SIZE]: get(GL.MAX_TEXTURE_SIZE),\n [GL.MAX_CUBE_MAP_TEXTURE_SIZE]: get(GL.MAX_CUBE_MAP_TEXTURE_SIZE), // GLint\n [GL.MAX_TEXTURE_IMAGE_UNITS]: get(GL.MAX_TEXTURE_IMAGE_UNITS), // GLint\n [GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS]: get(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS), // GLint\n [GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS]: get(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS), // GLint\n [GL.MAX_RENDERBUFFER_SIZE]: get(GL.MAX_RENDERBUFFER_SIZE), // GLint\n [GL.MAX_VARYING_VECTORS]: get(GL.MAX_VARYING_VECTORS), // GLint\n [GL.MAX_VERTEX_ATTRIBS]: get(GL.MAX_VERTEX_ATTRIBS), // GLint\n [GL.MAX_VERTEX_UNIFORM_VECTORS]: get(GL.MAX_VERTEX_UNIFORM_VECTORS), // GLint\n [GL.MAX_FRAGMENT_UNIFORM_VECTORS]: get(GL.MAX_FRAGMENT_UNIFORM_VECTORS), // GLint\n [GL.MAX_VIEWPORT_DIMS]: get(GL.MAX_VIEWPORT_DIMS),\n\n // Extensions\n [GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT]: get(GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT), // getMaxAnistropy(),\n\n // WebGL2 Limits\n [GL.MAX_3D_TEXTURE_SIZE]: get2(GL.MAX_3D_TEXTURE_SIZE), // GLint\n [GL.MAX_ARRAY_TEXTURE_LAYERS]: get2(GL.MAX_ARRAY_TEXTURE_LAYERS), // GLint\n [GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: get2(GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL), // GLint64\n [GL.MAX_COLOR_ATTACHMENTS]: get2(GL.MAX_COLOR_ATTACHMENTS), // GLint\n [GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: get2(GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS), // GLint64\n [GL.MAX_COMBINED_UNIFORM_BLOCKS]: get2(GL.MAX_COMBINED_UNIFORM_BLOCKS), // GLint\n [GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: get2(GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS), // GLint64\n [GL.MAX_DRAW_BUFFERS]: get2(GL.MAX_DRAW_BUFFERS), // GLint\n [GL.MAX_ELEMENT_INDEX]: get2(GL.MAX_ELEMENT_INDEX), // GLint64\n [GL.MAX_ELEMENTS_INDICES]: get2(GL.MAX_ELEMENTS_INDICES), // GLint\n [GL.MAX_ELEMENTS_VERTICES]: get2(GL.MAX_ELEMENTS_VERTICES), // GLint\n [GL.MAX_FRAGMENT_INPUT_COMPONENTS]: get2(GL.MAX_FRAGMENT_INPUT_COMPONENTS), // GLint\n [GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: get2(GL.MAX_FRAGMENT_UNIFORM_BLOCKS), // GLint\n [GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: get2(GL.MAX_FRAGMENT_UNIFORM_COMPONENTS), // GLint\n [GL.MAX_SAMPLES]: get2(GL.MAX_SAMPLES), // GLint\n [GL.MAX_SERVER_WAIT_TIMEOUT]: get2(GL.MAX_SERVER_WAIT_TIMEOUT), // GLint64\n [GL.MAX_TEXTURE_LOD_BIAS]: get2(GL.MAX_TEXTURE_LOD_BIAS), // GLfloat\n [GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: get2(GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS), // GLint\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: get2(GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS), // GLint\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: get2(GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS), // GLint\n [GL.MAX_UNIFORM_BLOCK_SIZE]: get2(GL.MAX_UNIFORM_BLOCK_SIZE), // GLint64\n [GL.MAX_UNIFORM_BUFFER_BINDINGS]: get2(GL.MAX_UNIFORM_BUFFER_BINDINGS), // GLint\n [GL.MAX_VARYING_COMPONENTS]: get2(GL.MAX_VARYING_COMPONENTS), // GLint\n [GL.MAX_VERTEX_OUTPUT_COMPONENTS]: get2(GL.MAX_VERTEX_OUTPUT_COMPONENTS), // GLint\n [GL.MAX_VERTEX_UNIFORM_BLOCKS]: get2(GL.MAX_VERTEX_UNIFORM_BLOCKS), // GLint\n [GL.MAX_VERTEX_UNIFORM_COMPONENTS]: get2(GL.MAX_VERTEX_UNIFORM_COMPONENTS), // GLint\n [GL.MIN_PROGRAM_TEXEL_OFFSET]: get2(GL.MIN_PROGRAM_TEXEL_OFFSET), // GLint\n [GL.MAX_PROGRAM_TEXEL_OFFSET]: get2(GL.MAX_PROGRAM_TEXEL_OFFSET), // GLint\n [GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: get2(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT) // GLint\n };\n}\n"],"file":"device-limits.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapter/device-helpers/device-limits.ts"],"names":["GL","getWebGL2Context","getDeviceLimits","gl","gl2","maxTextureDimension1D","maxTextureDimension2D","getParameter","MAX_TEXTURE_SIZE","maxTextureDimension3D","MAX_3D_TEXTURE_SIZE","maxTextureArrayLayers","MAX_ARRAY_TEXTURE_LAYERS","maxBindGroups","maxDynamicUniformBuffersPerPipelineLayout","maxDynamicStorageBuffersPerPipelineLayout","maxSampledTexturesPerShaderStage","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxSamplersPerShaderStage","MAX_COMBINED_TEXTURE_IMAGE_UNITS","maxStorageBuffersPerShaderStage","maxStorageTexturesPerShaderStage","maxUniformBuffersPerShaderStage","MAX_UNIFORM_BUFFER_BINDINGS","maxUniformBufferBindingSize","MAX_UNIFORM_BLOCK_SIZE","maxStorageBufferBindingSize","minUniformBufferOffsetAlignment","UNIFORM_BUFFER_OFFSET_ALIGNMENT","minStorageBufferOffsetAlignment","maxVertexBuffers","maxVertexAttributes","MAX_VERTEX_ATTRIBS","maxVertexBufferArrayStride","maxInterStageShaderComponents","MAX_VARYING_COMPONENTS","maxComputeWorkgroupStorageSize","maxComputeInvocationsPerWorkgroup","maxComputeWorkgroupSizeX","maxComputeWorkgroupSizeY","maxComputeWorkgroupSizeZ","maxComputeWorkgroupsPerDimension","getWebGLLimits","get","pname","get2","defaultValue","ALIASED_LINE_WIDTH_RANGE","ALIASED_POINT_SIZE_RANGE","MAX_CUBE_MAP_TEXTURE_SIZE","MAX_TEXTURE_IMAGE_UNITS","MAX_RENDERBUFFER_SIZE","MAX_VARYING_VECTORS","MAX_VERTEX_UNIFORM_VECTORS","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_VIEWPORT_DIMS","MAX_TEXTURE_MAX_ANISOTROPY_EXT","MAX_CLIENT_WAIT_TIMEOUT_WEBGL","MAX_COLOR_ATTACHMENTS","MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS","MAX_COMBINED_UNIFORM_BLOCKS","MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS","MAX_DRAW_BUFFERS","MAX_ELEMENT_INDEX","MAX_ELEMENTS_INDICES","MAX_ELEMENTS_VERTICES","MAX_FRAGMENT_INPUT_COMPONENTS","MAX_FRAGMENT_UNIFORM_BLOCKS","MAX_FRAGMENT_UNIFORM_COMPONENTS","MAX_SAMPLES","MAX_SERVER_WAIT_TIMEOUT","MAX_TEXTURE_LOD_BIAS","MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS","MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS","MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS","MAX_VERTEX_OUTPUT_COMPONENTS","MAX_VERTEX_UNIFORM_BLOCKS","MAX_VERTEX_UNIFORM_COMPONENTS","MIN_PROGRAM_TEXEL_OFFSET","MAX_PROGRAM_TEXEL_OFFSET"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport type {DeviceLimits} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getWebGL2Context} from '../../context/context/webgl-checks';\n\n/** Populate a WebGPU style device limits */\nexport function getDeviceLimits(gl: WebGLRenderingContext): DeviceLimits {\n const gl2: WebGL2RenderingContext | null = getWebGL2Context(gl);\n return {\n maxTextureDimension1D: 0, // WebGL does not support 1D textures\n maxTextureDimension2D: gl.getParameter(GL.MAX_TEXTURE_SIZE),\n maxTextureDimension3D: gl2 ? gl2.getParameter(GL.MAX_3D_TEXTURE_SIZE) : 0,\n maxTextureArrayLayers: gl2 ? gl2.getParameter(GL.MAX_ARRAY_TEXTURE_LAYERS) : 0,\n maxBindGroups: 1, // TBD\n maxDynamicUniformBuffersPerPipelineLayout: 0, // TBD\n maxDynamicStorageBuffersPerPipelineLayout: 0, // TBD\n maxSampledTexturesPerShaderStage: gl.getParameter(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS), // TBD\n maxSamplersPerShaderStage: gl.getParameter(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS),\n maxStorageBuffersPerShaderStage: 0, // TBD\n maxStorageTexturesPerShaderStage: 0, // TBD\n maxUniformBuffersPerShaderStage: gl2 ? gl2.getParameter(GL.MAX_UNIFORM_BUFFER_BINDINGS) : 0,\n maxUniformBufferBindingSize: gl2 ? gl2.getParameter(GL.MAX_UNIFORM_BLOCK_SIZE) : 0,\n maxStorageBufferBindingSize: 0,\n minUniformBufferOffsetAlignment: gl2 ? gl2.getParameter(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT) : 0,\n minStorageBufferOffsetAlignment: 0, // TBD\n maxVertexBuffers: 0,\n maxVertexAttributes: gl.getParameter(GL.MAX_VERTEX_ATTRIBS),\n maxVertexBufferArrayStride: 2048, // TBD, this is just the default value from WebGPU\n maxInterStageShaderComponents: gl2 ? gl2.getParameter(GL.MAX_VARYING_COMPONENTS) : 0,\n maxComputeWorkgroupStorageSize: 0, // WebGL does not support compute shaders\n maxComputeInvocationsPerWorkgroup: 0, // WebGL does not support compute shaders\n maxComputeWorkgroupSizeX: 0, // WebGL does not support compute shaders\n maxComputeWorkgroupSizeY: 0, // WebGL does not support compute shaders\n maxComputeWorkgroupSizeZ: 0, // WebGL does not support compute shaders\n maxComputeWorkgroupsPerDimension: 0, // WebGL does not support compute shaders\n }\n}\n\n/** WebGL context limits */\nexport type WebGLLimits = {\n [GL.ALIASED_LINE_WIDTH_RANGE]: [number, number];\n [GL.ALIASED_POINT_SIZE_RANGE]: [number, number];\n [GL.MAX_TEXTURE_SIZE]: number;\n [GL.MAX_CUBE_MAP_TEXTURE_SIZE]: number;\n [GL.MAX_TEXTURE_IMAGE_UNITS]: number;\n [GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS]: number;\n [GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS]: number;\n [GL.MAX_RENDERBUFFER_SIZE]: number;\n [GL.MAX_VARYING_VECTORS]: number;\n [GL.MAX_VERTEX_ATTRIBS]: number;\n [GL.MAX_VERTEX_UNIFORM_VECTORS]: number;\n [GL.MAX_FRAGMENT_UNIFORM_VECTORS]: number;\n [GL.MAX_VIEWPORT_DIMS]: [number, number];\n\n // Extensions\n [GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT]: number;\n\n // WebGL2 Limits\n [GL.MAX_3D_TEXTURE_SIZE]: number;\n [GL.MAX_ARRAY_TEXTURE_LAYERS]: number;\n [GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: number;\n [GL.MAX_COLOR_ATTACHMENTS]: number;\n [GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: number;\n [GL.MAX_COMBINED_UNIFORM_BLOCKS]: number;\n [GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: number;\n [GL.MAX_DRAW_BUFFERS]: number;\n [GL.MAX_ELEMENT_INDEX]: number;\n [GL.MAX_ELEMENTS_INDICES]: number;\n [GL.MAX_ELEMENTS_VERTICES]: number;\n [GL.MAX_FRAGMENT_INPUT_COMPONENTS]: number;\n [GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: number;\n [GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: number;\n [GL.MAX_SAMPLES]: number;\n [GL.MAX_SERVER_WAIT_TIMEOUT]: number;\n [GL.MAX_TEXTURE_LOD_BIAS]: number;\n [GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: number;\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: number;\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: number;\n [GL.MAX_UNIFORM_BLOCK_SIZE]: number;\n [GL.MAX_UNIFORM_BUFFER_BINDINGS]: number;\n [GL.MAX_VARYING_COMPONENTS]: number;\n [GL.MAX_VERTEX_OUTPUT_COMPONENTS]: number;\n [GL.MAX_VERTEX_UNIFORM_BLOCKS]: number;\n [GL.MAX_VERTEX_UNIFORM_COMPONENTS]: number;\n [GL.MIN_PROGRAM_TEXEL_OFFSET]: number;\n [GL.MAX_PROGRAM_TEXEL_OFFSET]: number;\n [GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: number;\n};\n\n\nexport function getWebGLLimits(gl: WebGLRenderingContext): WebGLLimits {\n const gl2 = getWebGL2Context(gl);\n function get<T = number>(pname: number): T {\n return gl.getParameter(pname) as T;\n }\n function get2(pname: number, defaultValue?: number): number;\n function get2<T>(pname: number, defaultValue: T): T;\n function get2<T>(pname: number, defaultValue: T): T {\n return gl2 ? gl2.getParameter(pname) as T : (defaultValue || 0) as T;\n }\n // function getMaxAnistropy() {\n // const extension = gl.getExtension('EXT_texture_filter_anisotropic');\n // }\n return {\n [GL.ALIASED_LINE_WIDTH_RANGE]: get(GL.ALIASED_LINE_WIDTH_RANGE),\n [GL.ALIASED_POINT_SIZE_RANGE]: get(GL.ALIASED_POINT_SIZE_RANGE),\n [GL.MAX_TEXTURE_SIZE]: get(GL.MAX_TEXTURE_SIZE),\n [GL.MAX_CUBE_MAP_TEXTURE_SIZE]: get(GL.MAX_CUBE_MAP_TEXTURE_SIZE), // GLint\n [GL.MAX_TEXTURE_IMAGE_UNITS]: get(GL.MAX_TEXTURE_IMAGE_UNITS), // GLint\n [GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS]: get(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS), // GLint\n [GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS]: get(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS), // GLint\n [GL.MAX_RENDERBUFFER_SIZE]: get(GL.MAX_RENDERBUFFER_SIZE), // GLint\n [GL.MAX_VARYING_VECTORS]: get(GL.MAX_VARYING_VECTORS), // GLint\n [GL.MAX_VERTEX_ATTRIBS]: get(GL.MAX_VERTEX_ATTRIBS), // GLint\n [GL.MAX_VERTEX_UNIFORM_VECTORS]: get(GL.MAX_VERTEX_UNIFORM_VECTORS), // GLint\n [GL.MAX_FRAGMENT_UNIFORM_VECTORS]: get(GL.MAX_FRAGMENT_UNIFORM_VECTORS), // GLint\n [GL.MAX_VIEWPORT_DIMS]: get(GL.MAX_VIEWPORT_DIMS),\n\n // Extensions\n [GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT]: get(GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT), // getMaxAnistropy(),\n\n // WebGL2 Limits\n [GL.MAX_3D_TEXTURE_SIZE]: get2(GL.MAX_3D_TEXTURE_SIZE), // GLint\n [GL.MAX_ARRAY_TEXTURE_LAYERS]: get2(GL.MAX_ARRAY_TEXTURE_LAYERS), // GLint\n [GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: get2(GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL), // GLint64\n [GL.MAX_COLOR_ATTACHMENTS]: get2(GL.MAX_COLOR_ATTACHMENTS), // GLint\n [GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: get2(GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS), // GLint64\n [GL.MAX_COMBINED_UNIFORM_BLOCKS]: get2(GL.MAX_COMBINED_UNIFORM_BLOCKS), // GLint\n [GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: get2(GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS), // GLint64\n [GL.MAX_DRAW_BUFFERS]: get2(GL.MAX_DRAW_BUFFERS), // GLint\n [GL.MAX_ELEMENT_INDEX]: get2(GL.MAX_ELEMENT_INDEX), // GLint64\n [GL.MAX_ELEMENTS_INDICES]: get2(GL.MAX_ELEMENTS_INDICES), // GLint\n [GL.MAX_ELEMENTS_VERTICES]: get2(GL.MAX_ELEMENTS_VERTICES), // GLint\n [GL.MAX_FRAGMENT_INPUT_COMPONENTS]: get2(GL.MAX_FRAGMENT_INPUT_COMPONENTS), // GLint\n [GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: get2(GL.MAX_FRAGMENT_UNIFORM_BLOCKS), // GLint\n [GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: get2(GL.MAX_FRAGMENT_UNIFORM_COMPONENTS), // GLint\n [GL.MAX_SAMPLES]: get2(GL.MAX_SAMPLES), // GLint\n [GL.MAX_SERVER_WAIT_TIMEOUT]: get2(GL.MAX_SERVER_WAIT_TIMEOUT), // GLint64\n [GL.MAX_TEXTURE_LOD_BIAS]: get2(GL.MAX_TEXTURE_LOD_BIAS), // GLfloat\n [GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: get2(GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS), // GLint\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: get2(GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS), // GLint\n [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: get2(GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS), // GLint\n [GL.MAX_UNIFORM_BLOCK_SIZE]: get2(GL.MAX_UNIFORM_BLOCK_SIZE), // GLint64\n [GL.MAX_UNIFORM_BUFFER_BINDINGS]: get2(GL.MAX_UNIFORM_BUFFER_BINDINGS), // GLint\n [GL.MAX_VARYING_COMPONENTS]: get2(GL.MAX_VARYING_COMPONENTS), // GLint\n [GL.MAX_VERTEX_OUTPUT_COMPONENTS]: get2(GL.MAX_VERTEX_OUTPUT_COMPONENTS), // GLint\n [GL.MAX_VERTEX_UNIFORM_BLOCKS]: get2(GL.MAX_VERTEX_UNIFORM_BLOCKS), // GLint\n [GL.MAX_VERTEX_UNIFORM_COMPONENTS]: get2(GL.MAX_VERTEX_UNIFORM_COMPONENTS), // GLint\n [GL.MIN_PROGRAM_TEXEL_OFFSET]: get2(GL.MIN_PROGRAM_TEXEL_OFFSET), // GLint\n [GL.MAX_PROGRAM_TEXEL_OFFSET]: get2(GL.MAX_PROGRAM_TEXEL_OFFSET), // GLint\n [GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: get2(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT) // GLint\n };\n}\n"],"file":"device-limits.js"}
|
|
@@ -89,11 +89,17 @@ function readAttributeBindings(gl, program) {
|
|
|
89
89
|
const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
|
|
90
90
|
|
|
91
91
|
for (let index = 0; index < count; index++) {
|
|
92
|
+
const activeInfo = gl.getActiveAttrib(program, index);
|
|
93
|
+
|
|
94
|
+
if (!activeInfo) {
|
|
95
|
+
throw new Error('activeInfo');
|
|
96
|
+
}
|
|
97
|
+
|
|
92
98
|
const {
|
|
93
99
|
name,
|
|
94
100
|
type: compositeType,
|
|
95
101
|
size
|
|
96
|
-
} =
|
|
102
|
+
} = activeInfo;
|
|
97
103
|
const location = gl.getAttribLocation(program, name);
|
|
98
104
|
|
|
99
105
|
if (location >= 0) {
|
|
@@ -101,6 +107,7 @@ function readAttributeBindings(gl, program) {
|
|
|
101
107
|
glType,
|
|
102
108
|
components
|
|
103
109
|
} = decodeAttributeType(compositeType);
|
|
110
|
+
;
|
|
104
111
|
const accessor = {
|
|
105
112
|
type: glType,
|
|
106
113
|
size: size * components
|
|
@@ -133,15 +140,22 @@ function readVaryings(gl, program) {
|
|
|
133
140
|
const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);
|
|
134
141
|
|
|
135
142
|
for (let location = 0; location < count; location++) {
|
|
143
|
+
const activeInfo = gl2.getTransformFeedbackVarying(program, location);
|
|
144
|
+
|
|
145
|
+
if (!activeInfo) {
|
|
146
|
+
throw new Error('activeInfo');
|
|
147
|
+
}
|
|
148
|
+
|
|
136
149
|
const {
|
|
137
150
|
name,
|
|
138
151
|
type: compositeType,
|
|
139
152
|
size
|
|
140
|
-
} =
|
|
153
|
+
} = activeInfo;
|
|
141
154
|
const {
|
|
142
155
|
glType,
|
|
143
156
|
components
|
|
144
157
|
} = decodeUniformType(compositeType);
|
|
158
|
+
;
|
|
145
159
|
const accessor = new Accessor({
|
|
146
160
|
type: glType,
|
|
147
161
|
size: size * components
|
|
@@ -163,11 +177,17 @@ function readUniformBindings(gl, program) {
|
|
|
163
177
|
const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);
|
|
164
178
|
|
|
165
179
|
for (let i = 0; i < uniformCount; i++) {
|
|
180
|
+
const activeInfo = gl.getActiveUniform(program, i);
|
|
181
|
+
|
|
182
|
+
if (!activeInfo) {
|
|
183
|
+
throw new Error('activeInfo');
|
|
184
|
+
}
|
|
185
|
+
|
|
166
186
|
const {
|
|
167
187
|
name: rawName,
|
|
168
188
|
size,
|
|
169
189
|
type
|
|
170
|
-
} =
|
|
190
|
+
} = activeInfo;
|
|
171
191
|
const {
|
|
172
192
|
name,
|
|
173
193
|
isArray
|
|
@@ -212,7 +232,7 @@ function readUniformBlocks(gl, program) {
|
|
|
212
232
|
|
|
213
233
|
for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {
|
|
214
234
|
const blockInfo = {
|
|
215
|
-
name: gl2.getActiveUniformBlockName(program, blockIndex),
|
|
235
|
+
name: gl2.getActiveUniformBlockName(program, blockIndex) || '',
|
|
216
236
|
location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),
|
|
217
237
|
byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),
|
|
218
238
|
vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
|
|
@@ -220,7 +240,7 @@ function readUniformBlocks(gl, program) {
|
|
|
220
240
|
uniformCount: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORMS),
|
|
221
241
|
uniforms: []
|
|
222
242
|
};
|
|
223
|
-
const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES);
|
|
243
|
+
const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) || [];
|
|
224
244
|
const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE);
|
|
225
245
|
const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE);
|
|
226
246
|
const uniformBlockIndex = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_BLOCK_INDEX);
|
|
@@ -230,15 +250,19 @@ function readUniformBlocks(gl, program) {
|
|
|
230
250
|
const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);
|
|
231
251
|
|
|
232
252
|
for (let i = 0; i < blockInfo.uniformCount; ++i) {
|
|
253
|
+
const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);
|
|
254
|
+
|
|
255
|
+
if (!activeInfo) {
|
|
256
|
+
throw new Error('activeInfo');
|
|
257
|
+
}
|
|
258
|
+
|
|
233
259
|
blockInfo.uniforms.push({
|
|
234
|
-
name:
|
|
260
|
+
name: activeInfo.name,
|
|
235
261
|
format: decodeUniformType(uniformType[i]).format,
|
|
236
262
|
type: uniformType[i],
|
|
237
263
|
arrayLength: uniformArrayLength[i],
|
|
238
264
|
byteOffset: uniformOffset[i],
|
|
239
|
-
byteStride: uniformStride[i]
|
|
240
|
-
matrixStride: uniformStride[i],
|
|
241
|
-
rowMajor: uniformRowMajor[i]
|
|
265
|
+
byteStride: uniformStride[i]
|
|
242
266
|
});
|
|
243
267
|
}
|
|
244
268
|
|
|
@@ -270,15 +294,15 @@ const SAMPLER_UNIFORMS_GL_TO_GPU = {
|
|
|
270
294
|
function getSamplerInfo(type) {
|
|
271
295
|
let sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];
|
|
272
296
|
|
|
273
|
-
if (sampler) {
|
|
274
|
-
|
|
275
|
-
return {
|
|
276
|
-
viewDimension,
|
|
277
|
-
sampleType
|
|
278
|
-
};
|
|
297
|
+
if (!sampler) {
|
|
298
|
+
throw new Error('sampler');
|
|
279
299
|
}
|
|
280
300
|
|
|
281
|
-
|
|
301
|
+
const [viewDimension, sampleType] = sampler;
|
|
302
|
+
return {
|
|
303
|
+
viewDimension,
|
|
304
|
+
sampleType
|
|
305
|
+
};
|
|
282
306
|
}
|
|
283
307
|
|
|
284
308
|
function parseUniformName(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapter/helpers/get-shader-layout.ts"],"names":["GL","isWebGL2","Accessor","decodeUniformType","decodeAttributeType","getVertexFormat","isSamplerUniform","getShaderLayout","gl","program","programBindings","getProgramBindings","shaderLayout","attributes","bindings","attribute","format","accessor","type","FLOAT","size","push","name","location","stepMode","divisor","uniformBlock","uniformBlocks","uniforms","map","uniform","byteOffset","byteStride","arrayLength","visibility","vertex","fragment","minBindingSize","byteLength","textureUnit","viewDimension","sampleType","getSamplerInfo","filter","length","varyings","config","readAttributeBindings","readUniformBindings","readUniformBlocks","readVaryings","Object","seal","count","getProgramParameter","ACTIVE_ATTRIBUTES","index","compositeType","getActiveAttrib","getAttribLocation","glType","components","test","attributeInfo","sort","a","b","gl2","TRANSFORM_FEEDBACK_VARYINGS","getTransformFeedbackVarying","varying","uniformCount","ACTIVE_UNIFORMS","i","rawName","getActiveUniform","isArray","parseUniformName","webglLocation","getUniformLocation","uniformInfo","j","elementName","arrayElementUniformInfo","getBlockParameter","blockIndex","pname","getActiveUniformBlockParameter","blockCount","ACTIVE_UNIFORM_BLOCKS","blockInfo","getActiveUniformBlockName","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","UNIFORM_BLOCK_ACTIVE_UNIFORMS","uniformIndices","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","uniformType","getActiveUniforms","UNIFORM_TYPE","uniformArrayLength","UNIFORM_SIZE","uniformBlockIndex","UNIFORM_BLOCK_INDEX","uniformOffset","UNIFORM_OFFSET","uniformStride","UNIFORM_ARRAY_STRIDE","uniformMatrixStride","UNIFORM_MATRIX_STRIDE","uniformRowMajor","UNIFORM_IS_ROW_MAJOR","matrixStride","rowMajor","SAMPLER_UNIFORMS_GL_TO_GPU","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","sampler","UNIFORM_NAME_REGEXP","matches","match","Error","Boolean"],"mappings":"AAWA,OAAOA,EAAP,MAAe,oBAAf;AACA,SAAQC,QAAR,QAAuB,oCAAvB;AACA,OAAOC,QAAP,MAAqB,wBAArB;AACA,SAAQC,iBAAR,EAA2BC,mBAA3B,QAAqD,YAArD;AACA,SAAQC,eAAR,QAA8B,8BAA9B;AACA,SAAQC,gBAAR,QAA+B,YAA/B;AAMA,OAAO,SAASC,eAAT,CAAyBC,EAAzB,EAAoDC,OAApD,EAAyF;AAAA;;AAC9F,QAAMC,eAAe,GAAGC,kBAAkB,CAACH,EAAD,EAAKC,OAAL,CAA1C;AAEA,QAAMG,YAA0B,GAAG;AACjCC,IAAAA,UAAU,EAAE,EADqB;AAEjCC,IAAAA,QAAQ,EAAE;AAFuB,GAAnC;;AAKA,OAAK,MAAMC,SAAX,IAAwBL,eAAe,CAACG,UAAxC,EAAoD;AAClD,UAAMG,MAAM,GAEVX,eAAe,CAACU,SAAS,CAACE,QAAV,CAAmBC,IAAnB,IAA2BlB,EAAE,CAACmB,KAA/B,EAAsCJ,SAAS,CAACE,QAAV,CAAmBG,IAAzD,CAFjB;AAGAR,IAAAA,YAAY,CAACC,UAAb,CAAwBQ,IAAxB,CAA6B;AAC3BC,MAAAA,IAAI,EAAEP,SAAS,CAACO,IADW;AAE3BC,MAAAA,QAAQ,EAAER,SAAS,CAACQ,QAFO;AAG3BP,MAAAA,MAH2B;AAI3BQ,MAAAA,QAAQ,EAAET,SAAS,CAACE,QAAV,CAAmBQ,OAAnB,KAA+B,CAA/B,GAAmC,UAAnC,GAAgD;AAJ/B,KAA7B;AAMD;;AAGD,OAAK,MAAMC,YAAX,IAA2BhB,eAAe,CAACiB,aAA3C,EAA0D;AACxD,UAAMC,QAAQ,GAAGF,YAAY,CAACE,QAAb,CAAsBC,GAAtB,CAA2BC,OAAD,KAAc;AACvDR,MAAAA,IAAI,EAAEQ,OAAO,CAACR,IADyC;AAEvDN,MAAAA,MAAM,EAAEc,OAAO,CAACd,MAFuC;AAGvDe,MAAAA,UAAU,EAAED,OAAO,CAACC,UAHmC;AAIvDC,MAAAA,UAAU,EAAEF,OAAO,CAACE,UAJmC;AAKvDC,MAAAA,WAAW,EAAEH,OAAO,CAACG;AALkC,KAAd,CAA1B,CAAjB;AAOArB,IAAAA,YAAY,CAACE,QAAb,CAAsBO,IAAtB,CAA2B;AACzBH,MAAAA,IAAI,EAAE,SADmB;AAEzBI,MAAAA,IAAI,EAAEI,YAAY,CAACJ,IAFM;AAGzBC,MAAAA,QAAQ,EAAEG,YAAY,CAACH,QAHE;AAIzBW,MAAAA,UAAU,EAAE,CAACR,YAAY,CAACS,MAAb,GAAsB,GAAtB,GAA4B,CAA7B,KAAmCT,YAAY,CAACU,QAAb,GAAwB,GAAxB,GAA8B,CAAjE,CAJa;AAKzBC,MAAAA,cAAc,EAAEX,YAAY,CAACY,UALJ;AAMzBV,MAAAA;AANyB,KAA3B;AAQD;;AAED,MAAIW,WAAW,GAAG,CAAlB;;AACA,OAAK,MAAMT,OAAX,IAAsBpB,eAAe,CAACkB,QAAtC,EAAgD;AAC9C,QAAItB,gBAAgB,CAACwB,OAAO,CAACZ,IAAT,CAApB,EAAoC;AAClC,YAAM;AAACsB,QAAAA,aAAD;AAAgBC,QAAAA;AAAhB,UAA8BC,cAAc,CAACZ,OAAO,CAACZ,IAAT,CAAlD;AACAN,MAAAA,YAAY,CAACE,QAAb,CAAsBO,IAAtB,CAA2B;AACzBH,QAAAA,IAAI,EAAE,SADmB;AAEzBI,QAAAA,IAAI,EAAEQ,OAAO,CAACR,IAFW;AAGzBC,QAAAA,QAAQ,EAAEgB,WAHe;AAIzBC,QAAAA,aAJyB;AAKzBC,QAAAA;AALyB,OAA3B;AASAX,MAAAA,OAAO,CAACS,WAAR,GAAsBA,WAAtB;AACAA,MAAAA,WAAW,IAAI,CAAf;AACD;AACF;;AAED,QAAMX,QAAQ,GAAG,0BAAAlB,eAAe,CAACkB,QAAhB,gFAA0Be,MAA1B,CAAkCb,OAAD,IAAaA,OAAO,CAACP,QAAR,KAAqB,IAAnE,MAA4E,EAA7F;;AACA,MAAIK,QAAQ,CAACgB,MAAb,EAAqB;AACnBhC,IAAAA,YAAY,CAACgB,QAAb,GAAwBA,QAAxB;AACD;;AACD,+BAAIlB,eAAe,CAACmC,QAApB,kDAAI,sBAA0BD,MAA9B,EAAsC;AACpChC,IAAAA,YAAY,CAACiC,QAAb,GAAwBnC,eAAe,CAACmC,QAAxC;AACD;;AAED,SAAOjC,YAAP;AACD;AAOD,OAAO,SAASD,kBAAT,CACLH,EADK,EAELC,OAFK,EAGY;AACjB,QAAMqC,MAAuB,GAAG;AAC9BjC,IAAAA,UAAU,EAAEkC,qBAAqB,CAACvC,EAAD,EAAKC,OAAL,CADH;AAE9BmB,IAAAA,QAAQ,EAAEoB,mBAAmB,CAACxC,EAAD,EAAKC,OAAL,CAFC;AAG9BkB,IAAAA,aAAa,EAAEsB,iBAAiB,CAACzC,EAAD,EAAKC,OAAL,CAHF;AAI9BoC,IAAAA,QAAQ,EAAEK,YAAY,CAAC1C,EAAD,EAAKC,OAAL;AAJQ,GAAhC;AAOA0C,EAAAA,MAAM,CAACC,IAAP,CAAYN,MAAZ;AACA,SAAOA,MAAP;AAED;;AAOD,SAASC,qBAAT,CACEvC,EADF,EAEEC,OAFF,EAGsB;AACpB,QAAMI,UAA8B,GAAG,EAAvC;AAEA,QAAMwC,KAAK,GAAG7C,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCD,EAAE,CAAC+C,iBAAnC,CAAd;;AAEA,OAAK,IAAIC,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGH,KAA5B,EAAmCG,KAAK,EAAxC,EAA4C;AAC1C,UAAM;AAAClC,MAAAA,IAAD;AAAOJ,MAAAA,IAAI,EAAEuC,aAAb;AAA4BrC,MAAAA;AAA5B,QAAoCZ,EAAE,CAACkD,eAAH,CAAmBjD,OAAnB,EAA4B+C,KAA5B,CAA1C;AACA,UAAMjC,QAAQ,GAAGf,EAAE,CAACmD,iBAAH,CAAqBlD,OAArB,EAA8Ba,IAA9B,CAAjB;;AAGA,QAAIC,QAAQ,IAAI,CAAhB,EAAmB;AACjB,YAAM;AAACqC,QAAAA,MAAD;AAASC,QAAAA;AAAT,UAAuBzD,mBAAmB,CAACqD,aAAD,CAAhD;AACA,YAAMxC,QAAwB,GAAG;AAACC,QAAAA,IAAI,EAAE0C,MAAP;AAAexC,QAAAA,IAAI,EAAEA,IAAI,GAAGyC;AAA5B,OAAjC;;AAEA,UAAI,YAAYC,IAAZ,CAAiBxC,IAAjB,CAAJ,EAA4B;AAC1BL,QAAAA,QAAQ,CAACQ,OAAT,GAAmB,CAAnB;AACD;;AACD,YAAMsC,aAAa,GAAG;AAACxC,QAAAA,QAAD;AAAWD,QAAAA,IAAX;AAAiBL,QAAAA,QAAQ,EAAE,IAAIf,QAAJ,CAAae,QAAb;AAA3B,OAAtB;AACAJ,MAAAA,UAAU,CAACQ,IAAX,CAAgB0C,aAAhB;AACD;AACF;;AAEDlD,EAAAA,UAAU,CAACmD,IAAX,CAAgB,CAACC,CAAD,EAAsBC,CAAtB,KAA8CD,CAAC,CAAC1C,QAAF,GAAa2C,CAAC,CAAC3C,QAA7E;AACA,SAAOV,UAAP;AACD;;AAOD,SAASqC,YAAT,CAAsB1C,EAAtB,EAAiDC,OAAjD,EAA0F;AACxF,MAAI,CAACR,QAAQ,CAACO,EAAD,CAAb,EAAmB;AACjB,WAAO,EAAP;AACD;;AACD,QAAM2D,GAAG,GAAG3D,EAAZ;AAEA,QAAMqC,QAA0B,GAAG,EAAnC;AAEA,QAAMQ,KAAK,GAAG7C,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCT,EAAE,CAACoE,2BAAnC,CAAd;;AACA,OAAK,IAAI7C,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAG8B,KAAlC,EAAyC9B,QAAQ,EAAjD,EAAqD;AACnD,UAAM;AAACD,MAAAA,IAAD;AAAOJ,MAAAA,IAAI,EAAEuC,aAAb;AAA4BrC,MAAAA;AAA5B,QAAoC+C,GAAG,CAACE,2BAAJ,CAAgC5D,OAAhC,EAAyCc,QAAzC,CAA1C;AACA,UAAM;AAACqC,MAAAA,MAAD;AAASC,MAAAA;AAAT,QAAuB1D,iBAAiB,CAACsD,aAAD,CAA9C;AACA,UAAMxC,QAAQ,GAAG,IAAIf,QAAJ,CAAa;AAACgB,MAAAA,IAAI,EAAE0C,MAAP;AAAexC,MAAAA,IAAI,EAAEA,IAAI,GAAGyC;AAA5B,KAAb,CAAjB;AACA,UAAMS,OAAO,GAAG;AAAC/C,MAAAA,QAAD;AAAWD,MAAAA,IAAX;AAAiBL,MAAAA;AAAjB,KAAhB;AACA4B,IAAAA,QAAQ,CAACxB,IAAT,CAAciD,OAAd;AACD;;AAEDzB,EAAAA,QAAQ,CAACmB,IAAT,CAAc,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC1C,QAAF,GAAa2C,CAAC,CAAC3C,QAAvC;AACA,SAAOsB,QAAP;AACD;;AAOD,SAASG,mBAAT,CAA6BxC,EAA7B,EAAwDC,OAAxD,EAAiG;AAC/F,QAAMmB,QAA0B,GAAG,EAAnC;AAEA,QAAM2C,YAAY,GAAG/D,EAAE,CAAC8C,mBAAH,CAAuB7C,OAAvB,EAAgCT,EAAE,CAACwE,eAAnC,CAArB;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,YAApB,EAAkCE,CAAC,EAAnC,EAAuC;AACrC,UAAM;AAACnD,MAAAA,IAAI,EAAEoD,OAAP;AAAgBtD,MAAAA,IAAhB;AAAsBF,MAAAA;AAAtB,QAA8BV,EAAE,CAACmE,gBAAH,CAAoBlE,OAApB,EAA6BgE,CAA7B,CAApC;AACA,UAAM;AAACnD,MAAAA,IAAD;AAAOsD,MAAAA;AAAP,QAAkBC,gBAAgB,CAACH,OAAD,CAAxC;AACA,QAAII,aAAa,GAAGtE,EAAE,CAACuE,kBAAH,CAAsBtE,OAAtB,EAA+Ba,IAA/B,CAApB;AACA,UAAM0D,WAAW,GAAG;AAElBzD,MAAAA,QAAQ,EAAEuD,aAFQ;AAGlBxD,MAAAA,IAHkB;AAIlBF,MAAAA,IAJkB;AAKlBF,MAAAA,IALkB;AAMlB0D,MAAAA;AANkB,KAApB;AAQAhD,IAAAA,QAAQ,CAACP,IAAT,CAAc2D,WAAd;;AAGA,QAAIA,WAAW,CAAC5D,IAAZ,GAAmB,CAAvB,EAA0B;AACxB,WAAK,IAAI6D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,WAAW,CAAC5D,IAAhC,EAAsC6D,CAAC,EAAvC,EAA2C;AACzC,cAAMC,WAAW,aAAM5D,IAAN,cAAc2D,CAAd,MAAjB;AAEAH,QAAAA,aAAa,GAAGtE,EAAE,CAACuE,kBAAH,CAAsBtE,OAAtB,EAA+ByE,WAA/B,CAAhB;AAEA,cAAMC,uBAAuB,GAAG,EAC9B,GAAGH,WAD2B;AAE9B1D,UAAAA,IAAI,EAAE4D,WAFwB;AAG9B3D,UAAAA,QAAQ,EAAEuD;AAHoB,SAAhC;AAMAlD,QAAAA,QAAQ,CAACP,IAAT,CAAc8D,uBAAd;AACD;AACF;AACF;;AACD,SAAOvD,QAAP;AACD;;AAQD,SAASqB,iBAAT,CACEzC,EADF,EAEEC,OAFF,EAGyB;AACvB,MAAI,CAACR,QAAQ,CAACO,EAAD,CAAb,EAAmB;AACjB,WAAO,EAAP;AACD;;AACD,QAAM2D,GAAG,GAAG3D,EAAZ;;AAEA,QAAM4E,iBAAiB,GAAG,CAACC,UAAD,EAAqBC,KAArB,KACxBnB,GAAG,CAACoB,8BAAJ,CAAmC9E,OAAnC,EAA4C4E,UAA5C,EAAwDC,KAAxD,CADF;;AAGA,QAAM3D,aAAoC,GAAG,EAA7C;AAEA,QAAM6D,UAAU,GAAGrB,GAAG,CAACb,mBAAJ,CAAwB7C,OAAxB,EAAiCT,EAAE,CAACyF,qBAApC,CAAnB;;AACA,OAAK,IAAIJ,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGG,UAAtC,EAAkDH,UAAU,EAA5D,EAAgE;AAC9D,UAAMK,SAAS,GAAG;AAChBpE,MAAAA,IAAI,EAAE6C,GAAG,CAACwB,yBAAJ,CAA8BlF,OAA9B,EAAuC4E,UAAvC,CADU;AAEhB9D,MAAAA,QAAQ,EAAE6D,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAAC4F,qBAAhB,CAFX;AAGhBtD,MAAAA,UAAU,EAAE8C,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAAC6F,uBAAhB,CAHb;AAIhB1D,MAAAA,MAAM,EAAEiD,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAAC8F,yCAAhB,CAJT;AAKhB1D,MAAAA,QAAQ,EAAEgD,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAAC+F,2CAAhB,CALX;AAMhBxB,MAAAA,YAAY,EAAEa,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAACgG,6BAAhB,CANf;AAOhBpE,MAAAA,QAAQ,EAAE;AAPM,KAAlB;AAUA,UAAMqE,cAAc,GAAGb,iBAAiB,CAACC,UAAD,EAAarF,EAAE,CAACkG,oCAAhB,CAAxC;AAEA,UAAMC,WAAW,GAAGhC,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAACqG,YAAlD,CAApB;AACA,UAAMC,kBAAkB,GAAGnC,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAACuG,YAAlD,CAA3B;AACA,UAAMC,iBAAiB,GAAGrC,GAAG,CAACiC,iBAAJ,CACxB3F,OADwB,EAExBwF,cAFwB,EAGxBjG,EAAE,CAACyG,mBAHqB,CAA1B;AAKA,UAAMC,aAAa,GAAGvC,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAAC2G,cAAlD,CAAtB;AACA,UAAMC,aAAa,GAAGzC,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAAC6G,oBAAlD,CAAtB;AACA,UAAMC,mBAAmB,GAAG3C,GAAG,CAACiC,iBAAJ,CAC1B3F,OAD0B,EAE1BwF,cAF0B,EAG1BjG,EAAE,CAAC+G,qBAHuB,CAA5B;AAKA,UAAMC,eAAe,GAAG7C,GAAG,CAACiC,iBAAJ,CAAsB3F,OAAtB,EAA+BwF,cAA/B,EAA+CjG,EAAE,CAACiH,oBAAlD,CAAxB;;AACA,SAAK,IAAIxC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiB,SAAS,CAACnB,YAA9B,EAA4C,EAAEE,CAA9C,EAAiD;AAC/CiB,MAAAA,SAAS,CAAC9D,QAAV,CAAmBP,IAAnB,CAAwB;AACtBC,QAAAA,IAAI,EAAE6C,GAAG,CAACQ,gBAAJ,CAAqBlE,OAArB,EAA8BwF,cAAc,CAACxB,CAAD,CAA5C,EAAiDnD,IADjC;AAEtBN,QAAAA,MAAM,EAAEb,iBAAiB,CAACgG,WAAW,CAAC1B,CAAD,CAAZ,CAAjB,CAAkCzD,MAFpB;AAGtBE,QAAAA,IAAI,EAAEiF,WAAW,CAAC1B,CAAD,CAHK;AAItBxC,QAAAA,WAAW,EAAEqE,kBAAkB,CAAC7B,CAAD,CAJT;AAKtB1C,QAAAA,UAAU,EAAE2E,aAAa,CAACjC,CAAD,CALH;AAMtBzC,QAAAA,UAAU,EAAE4E,aAAa,CAACnC,CAAD,CANH;AAOtByC,QAAAA,YAAY,EAAEN,aAAa,CAACnC,CAAD,CAPL;AAQtB0C,QAAAA,QAAQ,EAAEH,eAAe,CAACvC,CAAD;AARH,OAAxB;AAUD;;AAED9C,IAAAA,aAAa,CAACN,IAAd,CAAmBqE,SAAnB;AACD;;AAED/D,EAAAA,aAAa,CAACqC,IAAd,CAAmB,CAACC,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC1C,QAAF,GAAa2C,CAAC,CAAC3C,QAA5C;AACA,SAAOI,aAAP;AACD;;AAED,MAAMyF,0BAML,GAAG;AACF,GAACpH,EAAE,CAACqH,UAAJ,GAAiB,CAAC,IAAD,EAAO,OAAP,CADf;AAEF,GAACrH,EAAE,CAACsH,YAAJ,GAAmB,CAAC,MAAD,EAAS,OAAT,CAFjB;AAGF,GAACtH,EAAE,CAACuH,UAAJ,GAAiB,CAAC,IAAD,EAAO,OAAP,CAHf;AAIF,GAACvH,EAAE,CAACwH,iBAAJ,GAAwB,CAAC,IAAD,EAAO,OAAP,CAJtB;AAKF,GAACxH,EAAE,CAACyH,gBAAJ,GAAuB,CAAC,UAAD,EAAa,OAAb,CALrB;AAMF,GAACzH,EAAE,CAAC0H,uBAAJ,GAA8B,CAAC,UAAD,EAAa,OAAb,CAN5B;AAOF,GAAC1H,EAAE,CAAC2H,mBAAJ,GAA0B,CAAC,MAAD,EAAS,OAAT,CAPxB;AAQF,GAAC3H,EAAE,CAAC4H,cAAJ,GAAqB,CAAC,IAAD,EAAO,MAAP,CARnB;AASF,GAAC5H,EAAE,CAAC6H,cAAJ,GAAqB,CAAC,IAAD,EAAO,MAAP,CATnB;AAUF,GAAC7H,EAAE,CAAC8H,gBAAJ,GAAuB,CAAC,MAAD,EAAS,MAAT,CAVrB;AAWF,GAAC9H,EAAE,CAAC+H,oBAAJ,GAA2B,CAAC,UAAD,EAAa,MAAb,CAXzB;AAYF,GAAC/H,EAAE,CAACgI,uBAAJ,GAA8B,CAAC,IAAD,EAAO,MAAP,CAZ5B;AAaF,GAAChI,EAAE,CAACiI,uBAAJ,GAA8B,CAAC,IAAD,EAAO,MAAP,CAb5B;AAcF,GAACjI,EAAE,CAACkI,yBAAJ,GAAgC,CAAC,MAAD,EAAS,MAAT,CAd9B;AAeF,GAAClI,EAAE,CAACmI,6BAAJ,GAAoC,CAAC,UAAD,EAAa,MAAb;AAflC,CANJ;;AAwBA,SAASzF,cAAT,CAAwBxB,IAAxB,EAKc;AACZ,MAAIkH,OAAO,GAAGhB,0BAA0B,CAAClG,IAAD,CAAxC;;AACA,MAAIkH,OAAJ,EAAa;AACX,UAAM,CAAC5F,aAAD,EAAgBC,UAAhB,IAA8B2F,OAApC;AACA,WAAO;AAAC5F,MAAAA,aAAD;AAAgBC,MAAAA;AAAhB,KAAP;AACD;;AACD,SAAO,IAAP;AACD;;AAID,SAASoC,gBAAT,CAA0BvD,IAA1B,EAA0F;AAExF,MAAIA,IAAI,CAACA,IAAI,CAACsB,MAAL,GAAc,CAAf,CAAJ,KAA0B,GAA9B,EAAmC;AACjC,WAAO;AACLtB,MAAAA,IADK;AAELsB,MAAAA,MAAM,EAAE,CAFH;AAGLgC,MAAAA,OAAO,EAAE;AAHJ,KAAP;AAKD;;AAGD,QAAMyD,mBAAmB,GAAG,sBAA5B;AACA,QAAMC,OAAO,GAAGhH,IAAI,CAACiH,KAAL,CAAWF,mBAAX,CAAhB;;AACA,MAAI,CAACC,OAAD,IAAYA,OAAO,CAAC1F,MAAR,GAAiB,CAAjC,EAAoC;AAClC,UAAM,IAAI4F,KAAJ,6CAA+ClH,IAA/C,EAAN;AACD;;AAED,SAAO;AACLA,IAAAA,IAAI,EAAEgH,OAAO,CAAC,CAAD,CADR;AAEL1F,IAAAA,MAAM,EAAE0F,OAAO,CAAC,CAAD,CAAP,GAAa,CAAb,GAAiB,CAFpB;AAGL1D,IAAAA,OAAO,EAAE6D,OAAO,CAACH,OAAO,CAAC,CAAD,CAAR;AAHX,GAAP;AAKD","sourcesContent":["import {\n ShaderLayout,\n BindingLayout,\n UniformBinding,\n UniformBlockBinding,\n ProgramBindings,\n AttributeBinding,\n VaryingBinding,\n AttributeLayout,\n AccessorObject\n} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport Accessor from '../../classic/accessor'; // TODO - should NOT depend on classic API\nimport {decodeUniformType, decodeAttributeType} from './uniforms';\nimport {getVertexFormat} from '../converters/vertex-formats';\nimport {isSamplerUniform} from './uniforms';\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {\n const programBindings = getProgramBindings(gl, program);\n\n const shaderLayout: ShaderLayout = {\n attributes: [],\n bindings: []\n };\n\n for (const attribute of programBindings.attributes) {\n const format =\n // attribute.accessor.format ||\n getVertexFormat(attribute.accessor.type || GL.FLOAT, attribute.accessor.size);\n shaderLayout.attributes.push({\n name: attribute.name,\n location: attribute.location,\n format,\n stepMode: attribute.accessor.divisor === 1 ? 'instance' : 'vertex'\n });\n }\n\n // Uniform blocks\n for (const uniformBlock of programBindings.uniformBlocks) {\n const uniforms = uniformBlock.uniforms.map((uniform) => ({\n name: uniform.name,\n format: uniform.format,\n byteOffset: uniform.byteOffset,\n byteStride: uniform.byteStride,\n arrayLength: uniform.arrayLength\n }));\n shaderLayout.bindings.push({\n type: 'uniform',\n name: uniformBlock.name,\n location: uniformBlock.location,\n visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),\n minBindingSize: uniformBlock.byteLength,\n uniforms\n });\n }\n\n let textureUnit = 0;\n for (const uniform of programBindings.uniforms) {\n if (isSamplerUniform(uniform.type)) {\n const {viewDimension, sampleType} = getSamplerInfo(uniform.type);\n shaderLayout.bindings.push({\n type: 'texture',\n name: uniform.name,\n location: textureUnit,\n viewDimension,\n sampleType\n });\n\n // @ts-expect-error\n uniform.textureUnit = textureUnit;\n textureUnit += 1;\n }\n }\n\n const uniforms = programBindings.uniforms?.filter((uniform) => uniform.location !== null) || [];\n if (uniforms.length) {\n shaderLayout.uniforms = uniforms;\n }\n if (programBindings.varyings?.length) {\n shaderLayout.varyings = programBindings.varyings;\n }\n\n return shaderLayout;\n}\n\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getProgramBindings(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): ProgramBindings {\n const config: ProgramBindings = {\n attributes: readAttributeBindings(gl, program),\n uniforms: readUniformBindings(gl, program),\n uniformBlocks: readUniformBlocks(gl, program),\n varyings: readVaryings(gl, program)\n };\n\n Object.seal(config);\n return config;\n // generateWebGPUStyleBindings(bindings);\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readAttributeBindings(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): AttributeBinding[] {\n const attributes: AttributeBinding[] = [];\n\n const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n for (let index = 0; index < count; index++) {\n const {name, type: compositeType, size} = gl.getActiveAttrib(program, index);\n const location = gl.getAttribLocation(program, name);\n // Add only user provided attributes, for built-in attributes like\n // `gl_InstanceID` locaiton will be < 0\n if (location >= 0) {\n const {glType, components} = decodeAttributeType(compositeType);\n const accessor: AccessorObject = {type: glType, size: size * components};\n // Any attribute name containing the word \"instance\" will be assumed to be instanced\n if (/instance/i.test(name)) {\n accessor.divisor = 1;\n }\n const attributeInfo = {location, name, accessor: new Accessor(accessor)}; // Base values\n attributes.push(attributeInfo);\n }\n }\n\n attributes.sort((a: AttributeBinding, b: AttributeBinding) => a.location - b.location);\n return attributes;\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): VaryingBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const varyings: VaryingBinding[] = [];\n\n const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);\n for (let location = 0; location < count; location++) {\n const {name, type: compositeType, size} = gl2.getTransformFeedbackVarying(program, location);\n const {glType, components} = decodeUniformType(compositeType);\n const accessor = new Accessor({type: glType, size: size * components});\n const varying = {location, name, accessor}; // Base values\n varyings.push(varying);\n }\n\n varyings.sort((a, b) => a.location - b.location);\n return varyings;\n}\n\n/**\n * Extract info about all uniforms\n *\n * Query uniform locations and build name to setter map.\n */\nfunction readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram): UniformBinding[] {\n const uniforms: UniformBinding[] = [];\n\n const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);\n for (let i = 0; i < uniformCount; i++) {\n const {name: rawName, size, type} = gl.getActiveUniform(program, i);\n const {name, isArray} = parseUniformName(rawName);\n let webglLocation = gl.getUniformLocation(program, name);\n const uniformInfo = {\n // WebGL locations are uniquely typed but just numbers\n location: webglLocation as number,\n name,\n size,\n type,\n isArray\n };\n uniforms.push(uniformInfo);\n\n // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks\n if (uniformInfo.size > 1) {\n for (let j = 0; j < uniformInfo.size; j++) {\n const elementName = `${name}[${j}]`;\n\n webglLocation = gl.getUniformLocation(program, elementName);\n\n const arrayElementUniformInfo = {\n ...uniformInfo,\n name: elementName,\n location: webglLocation as number\n };\n\n uniforms.push(arrayElementUniformInfo);\n }\n }\n }\n return uniforms;\n}\n\n/**\n * Extract info about all \"active\" uniform blocks\n *\n * (\"Active\" just means that unused (aka inactive) blocks may have been\n * optimized away during linking)\n */\nfunction readUniformBlocks(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): UniformBlockBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const getBlockParameter = (blockIndex: number, pname: GL): any =>\n gl2.getActiveUniformBlockParameter(program, blockIndex, pname);\n\n const uniformBlocks: UniformBlockBinding[] = [];\n\n const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {\n const blockInfo = {\n name: gl2.getActiveUniformBlockName(program, blockIndex),\n location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),\n byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),\n vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n fragment: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n uniformCount: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n uniforms: [] as any[]\n };\n\n const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES);\n\n const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.\n const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE); // Array of GLuint indicating the sizes of the uniforms.\n const uniformBlockIndex = gl2.getActiveUniforms(\n program,\n uniformIndices,\n GL.UNIFORM_BLOCK_INDEX\n ); // Array of GLint indicating the block indices of the uniforms.\n const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.\n const uniformStride = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_ARRAY_STRIDE); // Array of GLint indicating the strides between the elements.\n const uniformMatrixStride = gl2.getActiveUniforms(\n program,\n uniformIndices,\n GL.UNIFORM_MATRIX_STRIDE\n ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.\n const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);\n for (let i = 0; i < blockInfo.uniformCount; ++i) {\n blockInfo.uniforms.push({\n name: gl2.getActiveUniform(program, uniformIndices[i]).name,\n format: decodeUniformType(uniformType[i]).format,\n type: uniformType[i],\n arrayLength: uniformArrayLength[i],\n byteOffset: uniformOffset[i],\n byteStride: uniformStride[i],\n matrixStride: uniformStride[i],\n rowMajor: uniformRowMajor[i]\n });\n }\n\n uniformBlocks.push(blockInfo);\n }\n\n uniformBlocks.sort((a, b) => a.location - b.location);\n return uniformBlocks;\n}\n\nconst SAMPLER_UNIFORMS_GL_TO_GPU: Record<\n number,\n [\n '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d',\n 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint'\n ]\n> = {\n [GL.SAMPLER_2D]: ['2d', 'float'],\n [GL.SAMPLER_CUBE]: ['cube', 'float'],\n [GL.SAMPLER_3D]: ['3d', 'float'],\n [GL.SAMPLER_2D_SHADOW]: ['3d', 'depth'],\n [GL.SAMPLER_2D_ARRAY]: ['2d-array', 'float'],\n [GL.SAMPLER_2D_ARRAY_SHADOW]: ['2d-array', 'depth'],\n [GL.SAMPLER_CUBE_SHADOW]: ['cube', 'float'],\n [GL.INT_SAMPLER_2D]: ['2d', 'sint'],\n [GL.INT_SAMPLER_3D]: ['3d', 'sint'],\n [GL.INT_SAMPLER_CUBE]: ['cube', 'sint'],\n [GL.INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D]: ['2d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_3D]: ['3d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: ['cube', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']\n};\n\nfunction getSamplerInfo(type: GL):\n | {\n viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';\n sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';\n }\n | undefined {\n let sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];\n if (sampler) {\n const [viewDimension, sampleType] = sampler;\n return {viewDimension, sampleType};\n }\n return null;\n}\n\n// HELPERS\n\nfunction parseUniformName(name: string): {name: string; length: number; isArray: boolean} {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] ? 1 : 0,\n isArray: Boolean(matches[2])\n };\n}\n\n/**\n * TODO - verify this is a copy of above and delete\n * import type {TextureFormat} from '@luma.gl/api';\n* Extract info about all \"active\" uniform blocks\n * (\"Active\" just means that unused (inactive) blocks may have been optimized away during linking)\n *\n function getUniformBlockBindings(gl, program): Binding[] {\n if (!isWebGL2(gl)) {\n return;\n }\n const bindings: Binding[] = [];\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < count; blockIndex++) {\n const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n const visibility = (vertex) + (fragment);\n const binding: BufferBinding = {\n location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),\n // name: gl.getActiveUniformBlockName(program, blockIndex),\n type: 'uniform',\n visibility,\n minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),\n // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n }\n bindings.push(binding);\n }\n return bindings;\n}\n\nfunction setBindings(gl2: WebGL2RenderingContext, program: WebGLProgram, bindings: Binding[][]): void {\n for (const bindGroup of bindings) {\n for (const binding of bindGroup) {\n\n }\n }\n\n // Set up indirection table\n // this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);\n}\n */\n"],"file":"get-shader-layout.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapter/helpers/get-shader-layout.ts"],"names":["GL","isWebGL2","Accessor","decodeUniformType","decodeAttributeType","getVertexFormat","isSamplerUniform","getShaderLayout","gl","program","programBindings","getProgramBindings","shaderLayout","attributes","bindings","attribute","format","accessor","type","FLOAT","size","push","name","location","stepMode","divisor","uniformBlock","uniformBlocks","uniforms","map","uniform","byteOffset","byteStride","arrayLength","visibility","vertex","fragment","minBindingSize","byteLength","textureUnit","viewDimension","sampleType","getSamplerInfo","filter","length","varyings","config","readAttributeBindings","readUniformBindings","readUniformBlocks","readVaryings","Object","seal","count","getProgramParameter","ACTIVE_ATTRIBUTES","index","activeInfo","getActiveAttrib","Error","compositeType","getAttribLocation","glType","components","test","attributeInfo","sort","a","b","gl2","TRANSFORM_FEEDBACK_VARYINGS","getTransformFeedbackVarying","varying","uniformCount","ACTIVE_UNIFORMS","i","getActiveUniform","rawName","isArray","parseUniformName","webglLocation","getUniformLocation","uniformInfo","j","elementName","arrayElementUniformInfo","getBlockParameter","blockIndex","pname","getActiveUniformBlockParameter","blockCount","ACTIVE_UNIFORM_BLOCKS","blockInfo","getActiveUniformBlockName","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","UNIFORM_BLOCK_ACTIVE_UNIFORMS","uniformIndices","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","uniformType","getActiveUniforms","UNIFORM_TYPE","uniformArrayLength","UNIFORM_SIZE","uniformBlockIndex","UNIFORM_BLOCK_INDEX","uniformOffset","UNIFORM_OFFSET","uniformStride","UNIFORM_ARRAY_STRIDE","uniformMatrixStride","UNIFORM_MATRIX_STRIDE","uniformRowMajor","UNIFORM_IS_ROW_MAJOR","SAMPLER_UNIFORMS_GL_TO_GPU","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","sampler","UNIFORM_NAME_REGEXP","matches","match","Boolean"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n\nimport {\n ShaderLayout,\n BindingLayout,\n UniformBinding,\n UniformBlockBinding,\n ProgramBindings,\n AttributeBinding,\n VaryingBinding,\n AttributeLayout,\n AccessorObject\n} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport Accessor from '../../classic/accessor'; // TODO - should NOT depend on classic API\nimport {decodeUniformType, decodeAttributeType} from './uniforms';\nimport {getVertexFormat} from '../converters/vertex-formats';\nimport {isSamplerUniform} from './uniforms';\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {\n const programBindings = getProgramBindings(gl, program);\n\n const shaderLayout: ShaderLayout = {\n attributes: [],\n bindings: []\n };\n\n for (const attribute of programBindings.attributes) {\n const format =\n // attribute.accessor.format ||\n getVertexFormat(attribute.accessor.type || GL.FLOAT, attribute.accessor.size);\n shaderLayout.attributes.push({\n name: attribute.name,\n location: attribute.location,\n format,\n stepMode: attribute.accessor.divisor === 1 ? 'instance' : 'vertex'\n });\n }\n\n // Uniform blocks\n for (const uniformBlock of programBindings.uniformBlocks) {\n const uniforms = uniformBlock.uniforms.map((uniform) => ({\n name: uniform.name,\n format: uniform.format,\n byteOffset: uniform.byteOffset,\n byteStride: uniform.byteStride,\n arrayLength: uniform.arrayLength\n }));\n shaderLayout.bindings.push({\n type: 'uniform',\n name: uniformBlock.name,\n location: uniformBlock.location,\n visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),\n minBindingSize: uniformBlock.byteLength,\n uniforms\n });\n }\n\n let textureUnit = 0;\n for (const uniform of programBindings.uniforms) {\n if (isSamplerUniform(uniform.type)) {\n const {viewDimension, sampleType} = getSamplerInfo(uniform.type);\n shaderLayout.bindings.push({\n type: 'texture',\n name: uniform.name,\n location: textureUnit,\n viewDimension,\n sampleType\n });\n\n // @ts-expect-error\n uniform.textureUnit = textureUnit;\n textureUnit += 1;\n }\n }\n\n const uniforms = programBindings.uniforms?.filter((uniform) => uniform.location !== null) || [];\n if (uniforms.length) {\n shaderLayout.uniforms = uniforms;\n }\n if (programBindings.varyings?.length) {\n shaderLayout.varyings = programBindings.varyings;\n }\n\n return shaderLayout;\n}\n\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getProgramBindings(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): ProgramBindings {\n const config: ProgramBindings = {\n attributes: readAttributeBindings(gl, program),\n uniforms: readUniformBindings(gl, program),\n uniformBlocks: readUniformBlocks(gl, program),\n varyings: readVaryings(gl, program)\n };\n\n Object.seal(config);\n return config;\n // generateWebGPUStyleBindings(bindings);\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readAttributeBindings(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): AttributeBinding[] {\n const attributes: AttributeBinding[] = [];\n\n const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n for (let index = 0; index < count; index++) {\n const activeInfo = gl.getActiveAttrib(program, index);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name, type: compositeType, size} = activeInfo;\n const location = gl.getAttribLocation(program, name);\n // Add only user provided attributes, for built-in attributes like\n // `gl_InstanceID` locaiton will be < 0\n if (location >= 0) {\n const {glType, components} = decodeAttributeType(compositeType);;\n const accessor: AccessorObject = {type: glType, size: size * components};\n // Any attribute name containing the word \"instance\" will be assumed to be instanced\n if (/instance/i.test(name)) {\n accessor.divisor = 1;\n }\n const attributeInfo = {location, name, accessor: new Accessor(accessor)}; // Base values\n attributes.push(attributeInfo);\n }\n }\n\n attributes.sort((a: AttributeBinding, b: AttributeBinding) => a.location - b.location);\n return attributes;\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): VaryingBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const varyings: VaryingBinding[] = [];\n\n const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);\n for (let location = 0; location < count; location++) {\n const activeInfo = gl2.getTransformFeedbackVarying(program, location);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name, type: compositeType, size} = activeInfo;\n const {glType, components} = decodeUniformType(compositeType);;\n const accessor = new Accessor({type: glType, size: size * components});\n const varying = {location, name, accessor}; // Base values\n varyings.push(varying);\n }\n\n varyings.sort((a, b) => a.location - b.location);\n return varyings;\n}\n\n/**\n * Extract info about all uniforms\n *\n * Query uniform locations and build name to setter map.\n */\nfunction readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram): UniformBinding[] {\n const uniforms: UniformBinding[] = [];\n\n const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);\n for (let i = 0; i < uniformCount; i++) {\n const activeInfo = gl.getActiveUniform(program, i);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name: rawName, size, type} = activeInfo;\n const {name, isArray} = parseUniformName(rawName);\n let webglLocation = gl.getUniformLocation(program, name);\n const uniformInfo = {\n // WebGL locations are uniquely typed but just numbers\n location: webglLocation as number,\n name,\n size,\n type,\n isArray\n };\n uniforms.push(uniformInfo);\n\n // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks\n if (uniformInfo.size > 1) {\n for (let j = 0; j < uniformInfo.size; j++) {\n const elementName = `${name}[${j}]`;\n\n webglLocation = gl.getUniformLocation(program, elementName);\n\n const arrayElementUniformInfo = {\n ...uniformInfo,\n name: elementName,\n location: webglLocation as number\n };\n\n uniforms.push(arrayElementUniformInfo);\n }\n }\n }\n return uniforms;\n}\n\n/**\n * Extract info about all \"active\" uniform blocks\n *\n * (\"Active\" just means that unused (aka inactive) blocks may have been\n * optimized away during linking)\n */\nfunction readUniformBlocks(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): UniformBlockBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const getBlockParameter = (blockIndex: number, pname: GL): any =>\n gl2.getActiveUniformBlockParameter(program, blockIndex, pname);\n\n const uniformBlocks: UniformBlockBinding[] = [];\n\n const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {\n const blockInfo: UniformBlockBinding = {\n name: gl2.getActiveUniformBlockName(program, blockIndex) || '',\n location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),\n byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),\n vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n fragment: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n uniformCount: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n uniforms: [] as any[]\n };\n\n const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) as number[] || [];\n\n const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.\n const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE); // Array of GLuint indicating the sizes of the uniforms.\n const uniformBlockIndex = gl2.getActiveUniforms(\n program,\n uniformIndices,\n GL.UNIFORM_BLOCK_INDEX\n ); // Array of GLint indicating the block indices of the uniforms.\n const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.\n const uniformStride = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_ARRAY_STRIDE); // Array of GLint indicating the strides between the elements.\n const uniformMatrixStride = gl2.getActiveUniforms(\n program,\n uniformIndices,\n GL.UNIFORM_MATRIX_STRIDE\n ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.\n const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);\n for (let i = 0; i < blockInfo.uniformCount; ++i) {\n const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n \n blockInfo.uniforms.push({\n name: activeInfo.name,\n format: decodeUniformType(uniformType[i]).format,\n type: uniformType[i],\n arrayLength: uniformArrayLength[i],\n byteOffset: uniformOffset[i],\n byteStride: uniformStride[i],\n // matrixStride: uniformStride[i],\n // rowMajor: uniformRowMajor[i]\n });\n }\n\n uniformBlocks.push(blockInfo);\n }\n\n uniformBlocks.sort((a, b) => a.location - b.location);\n return uniformBlocks;\n}\n\nconst SAMPLER_UNIFORMS_GL_TO_GPU: Record<\n number,\n [\n '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d',\n 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint'\n ]\n> = {\n [GL.SAMPLER_2D]: ['2d', 'float'],\n [GL.SAMPLER_CUBE]: ['cube', 'float'],\n [GL.SAMPLER_3D]: ['3d', 'float'],\n [GL.SAMPLER_2D_SHADOW]: ['3d', 'depth'],\n [GL.SAMPLER_2D_ARRAY]: ['2d-array', 'float'],\n [GL.SAMPLER_2D_ARRAY_SHADOW]: ['2d-array', 'depth'],\n [GL.SAMPLER_CUBE_SHADOW]: ['cube', 'float'],\n [GL.INT_SAMPLER_2D]: ['2d', 'sint'],\n [GL.INT_SAMPLER_3D]: ['3d', 'sint'],\n [GL.INT_SAMPLER_CUBE]: ['cube', 'sint'],\n [GL.INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D]: ['2d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_3D]: ['3d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: ['cube', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']\n};\n\ntype SamplerInfo = | {\n viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';\n sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';\n};\n\nfunction getSamplerInfo(type: GL): SamplerInfo {\n let sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];\n if (!sampler) {\n throw new Error('sampler');\n }\n const [viewDimension, sampleType] = sampler;\n return {viewDimension, sampleType};\n}\n\n// HELPERS\n\nfunction parseUniformName(name: string): {name: string; length: number; isArray: boolean} {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] ? 1 : 0,\n isArray: Boolean(matches[2])\n };\n}\n\n/**\n * TODO - verify this is a copy of above and delete\n * import type {TextureFormat} from '@luma.gl/api';\n* Extract info about all \"active\" uniform blocks\n * (\"Active\" just means that unused (inactive) blocks may have been optimized away during linking)\n *\n function getUniformBlockBindings(gl, program): Binding[] {\n if (!isWebGL2(gl)) {\n return;\n }\n const bindings: Binding[] = [];\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < count; blockIndex++) {\n const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n const visibility = (vertex) + (fragment);\n const binding: BufferBinding = {\n location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),\n // name: gl.getActiveUniformBlockName(program, blockIndex),\n type: 'uniform',\n visibility,\n minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),\n // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n }\n bindings.push(binding);\n }\n return bindings;\n}\n\nfunction setBindings(gl2: WebGL2RenderingContext, program: WebGLProgram, bindings: Binding[][]): void {\n for (const bindGroup of bindings) {\n for (const binding of bindGroup) {\n\n }\n }\n\n // Set up indirection table\n // this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);\n}\n */\n"],"file":"get-shader-layout.js"}
|
|
@@ -34,7 +34,7 @@ export function decodeUniformType(uniformType) {
|
|
|
34
34
|
const typeAndSize = COMPOSITE_GL_TYPES[uniformType];
|
|
35
35
|
|
|
36
36
|
if (!typeAndSize) {
|
|
37
|
-
|
|
37
|
+
throw new Error('uniform');
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
const [glType, components,, format] = typeAndSize;
|
|
@@ -44,11 +44,11 @@ export function decodeUniformType(uniformType) {
|
|
|
44
44
|
glType
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
-
export function decodeAttributeType(
|
|
48
|
-
const typeAndSize = COMPOSITE_GL_TYPES[
|
|
47
|
+
export function decodeAttributeType(attributeType) {
|
|
48
|
+
const typeAndSize = COMPOSITE_GL_TYPES[attributeType];
|
|
49
49
|
|
|
50
50
|
if (!typeAndSize) {
|
|
51
|
-
|
|
51
|
+
throw new Error('attribute');
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
const [glType, components,,, format] = typeAndSize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapter/helpers/uniforms.ts"],"names":["GL","isSamplerUniform","type","SAMPLER_TYPES","includes","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","COMPOSITE_GL_TYPES","FLOAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","UNSIGNED_INT","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","FLOAT_MAT4","decodeUniformType","uniformType","typeAndSize","glType","components","format","decodeAttributeType","decomposeCompositeGLType","compositeGLType","getCompositeGLType","BYTE","UNSIGNED_BYTE","SHORT","UNSIGNED_SHORT","compType","compComponents","name","Number"],"mappings":"AACA,OAAOA,EAAP,MAAe,oBAAf;AAIA,OAAO,SAASC,gBAAT,CAA0BC,IAA1B,EAAwD;AAC7D,SAAOC,aAAa,CAACC,QAAd,CAAuBF,IAAvB,CAAP;AACD;AAED,MAAMC,aAA8B,GAAG,CACrCH,EAAE,CAACK,UADkC,EAErCL,EAAE,CAACM,YAFkC,EAGrCN,EAAE,CAACO,UAHkC,EAIrCP,EAAE,CAACQ,iBAJkC,EAKrCR,EAAE,CAACS,gBALkC,EAMrCT,EAAE,CAACU,uBANkC,EAOrCV,EAAE,CAACW,mBAPkC,EAQrCX,EAAE,CAACY,cARkC,EASrCZ,EAAE,CAACa,cATkC,EAUrCb,EAAE,CAACc,gBAVkC,EAWrCd,EAAE,CAACe,oBAXkC,EAYrCf,EAAE,CAACgB,uBAZkC,EAarChB,EAAE,CAACiB,uBAbkC,EAcrCjB,EAAE,CAACkB,yBAdkC,EAerClB,EAAE,CAACmB,6BAfkC,CAAvC;AAmBA,MAAMC,kBAAmG,GAAG;AAC1G,GAACpB,EAAE,CAACqB,KAAJ,GAAY,CAACrB,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,OAAd,EAAuB,KAAvB,EAA8B,SAA9B,CAD8F;AAE1G,GAACrB,EAAE,CAACsB,UAAJ,GAAiB,CAACtB,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,WAAtB,EAAmC,WAAnC,CAFyF;AAG1G,GAACrB,EAAE,CAACuB,UAAJ,GAAiB,CAACvB,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,WAAtB,EAAmC,WAAnC,CAHyF;AAI1G,GAACrB,EAAE,CAACwB,UAAJ,GAAiB,CAACxB,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,WAAtB,EAAmC,WAAnC,CAJyF;AAM1G,GAACrB,EAAE,CAACyB,GAAJ,GAAU,CAACzB,EAAE,CAACyB,GAAJ,EAAS,CAAT,EAAY,KAAZ,EAAmB,KAAnB,EAA0B,QAA1B,CANgG;AAO1G,GAACzB,EAAE,CAAC0B,QAAJ,GAAe,CAAC1B,EAAE,CAACyB,GAAJ,EAAS,CAAT,EAAY,OAAZ,EAAqB,WAArB,EAAkC,UAAlC,CAP2F;AAQ1G,GAACzB,EAAE,CAAC2B,QAAJ,GAAe,CAAC3B,EAAE,CAACyB,GAAJ,EAAS,CAAT,EAAY,OAAZ,EAAqB,WAArB,EAAkC,UAAlC,CAR2F;AAS1G,GAACzB,EAAE,CAAC4B,QAAJ,GAAe,CAAC5B,EAAE,CAACyB,GAAJ,EAAS,CAAT,EAAY,OAAZ,EAAqB,WAArB,EAAkC,UAAlC,CAT2F;AAW1G,GAACzB,EAAE,CAAC6B,YAAJ,GAAmB,CAAC7B,EAAE,CAAC6B,YAAJ,EAAkB,CAAlB,EAAqB,MAArB,EAA6B,KAA7B,EAAoC,QAApC,CAXuF;AAY1G,GAAC7B,EAAE,CAAC8B,iBAAJ,GAAwB,CAAC9B,EAAE,CAAC6B,YAAJ,EAAkB,CAAlB,EAAqB,OAArB,EAA8B,WAA9B,EAA2C,UAA3C,CAZkF;AAa1G,GAAC7B,EAAE,CAAC+B,iBAAJ,GAAwB,CAAC/B,EAAE,CAAC6B,YAAJ,EAAkB,CAAlB,EAAqB,OAArB,EAA8B,WAA9B,EAA2C,UAA3C,CAbkF;AAc1G,GAAC7B,EAAE,CAACgC,iBAAJ,GAAwB,CAAChC,EAAE,CAAC6B,YAAJ,EAAkB,CAAlB,EAAqB,OAArB,EAA8B,WAA9B,EAA2C,UAA3C,CAdkF;AAgB1G,GAAC7B,EAAE,CAACiC,IAAJ,GAAW,CAACjC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,KAAtB,EAA6B,WAA7B,CAhB+F;AAiB1G,GAACrB,EAAE,CAACkC,SAAJ,GAAgB,CAAClC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,OAAd,EAAuB,WAAvB,CAjB0F;AAkB1G,GAACrB,EAAE,CAACmC,SAAJ,GAAgB,CAACnC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,OAAd,EAAuB,WAAvB,CAlB0F;AAmB1G,GAACrB,EAAE,CAACoC,SAAJ,GAAgB,CAACpC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,OAAd,EAAuB,WAAvB,CAnB0F;AAqB1G,GAACrB,EAAE,CAACqC,UAAJ,GAAiB,CAACrC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,MAAd,EAAsB,aAAtB,CArByF;AAsB1G,GAACrB,EAAE,CAACsC,YAAJ,GAAmB,CAACtC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,QAAd,EAAwB,aAAxB,CAtBuF;AAuB1G,GAACrB,EAAE,CAACuC,YAAJ,GAAmB,CAACvC,EAAE,CAACqB,KAAJ,EAAW,CAAX,EAAc,QAAd,EAAwB,aAAxB,CAvBuF;AAyB1G,GAACrB,EAAE,CAACwC,YAAJ,GAAmB,CAACxC,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,QAAf,EAAyB,aAAzB,CAzBuF;AA0B1G,GAACrB,EAAE,CAACyC,UAAJ,GAAiB,CAACzC,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,MAAf,EAAuB,aAAvB,CA1ByF;AA2B1G,GAACrB,EAAE,CAAC0C,YAAJ,GAAmB,CAAC1C,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,QAAf,EAAyB,aAAzB,CA3BuF;AA6B1G,GAACrB,EAAE,CAAC2C,YAAJ,GAAmB,CAAC3C,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,QAAf,EAAyB,aAAzB,CA7BuF;AA8B1G,GAACrB,EAAE,CAAC4C,YAAJ,GAAmB,CAAC5C,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,QAAf,EAAyB,aAAzB,CA9BuF;AA+B1G,GAACrB,EAAE,CAAC6C,UAAJ,GAAiB,CAAC7C,EAAE,CAACqB,KAAJ,EAAW,EAAX,EAAe,MAAf,EAAuB,aAAvB;AA/ByF,CAA5G;AAmCA,OAAO,SAASyB,iBAAT,CAA2BC,WAA3B,EAAyG;AAC9G,QAAMC,WAAW,GAAG5B,kBAAkB,CAAC2B,WAAD,CAAtC;;AACA,MAAI,CAACC,WAAL,EAAkB;AAChB,WAAO,IAAP;AACD;;AACD,QAAM,CAACC,MAAD,EAASC,UAAT,GAAuBC,MAAvB,IAAiCH,WAAvC;AACA,SAAO;AAACG,IAAAA,MAAD;AAASD,IAAAA,UAAT;AAAqBD,IAAAA;AAArB,GAAP;AACD;AAED,OAAO,SAASG,mBAAT,CAA6BL,WAA7B,EAA0G;AAC/G,QAAMC,WAAW,GAAG5B,kBAAkB,CAAC2B,WAAD,CAAtC;;AACA,MAAI,CAACC,WAAL,EAAkB;AAChB,WAAO,IAAP;AACD;;AACD,QAAM,CAACC,MAAD,EAASC,UAAT,IAAyBC,MAAzB,IAAmCH,WAAzC;AACA,SAAO;AAACG,IAAAA,MAAD;AAASD,IAAAA,UAAT;AAAqBD,IAAAA;AAArB,GAAP;AACD;AAGD,OAAO,SAASI,wBAAT,CAAkCC,eAAlC,EAA+G;AACpH,QAAMN,WAAW,GAAG5B,kBAAkB,CAACkC,eAAD,CAAtC;;AACA,MAAI,CAACN,WAAL,EAAkB;AAChB,WAAO,IAAP;AACD;;AACD,QAAM,CAAC9C,IAAD,EAAOgD,UAAP,IAAqBF,WAA3B;AACA,SAAO;AAAC9C,IAAAA,IAAD;AAAOgD,IAAAA;AAAP,GAAP;AACD;AAED,OAAO,SAASK,kBAAT,CAA4BrD,IAA5B,EAAsCgD,UAAtC,EAAyF;AAC9F,UAAQhD,IAAR;AACE,SAAKF,EAAE,CAACwD,IAAR;AACA,SAAKxD,EAAE,CAACyD,aAAR;AACA,SAAKzD,EAAE,CAAC0D,KAAR;AACA,SAAK1D,EAAE,CAAC2D,cAAR;AACEzD,MAAAA,IAAI,GAAGF,EAAE,CAACqB,KAAV;AACA;;AACF;AAPF;;AAUA,OAAK,MAAM4B,MAAX,IAAqB7B,kBAArB,EAAyC;AACvC,UAAM,CAACwC,QAAD,EAAWC,cAAX,EAA2BC,IAA3B,IAAmC1C,kBAAkB,CAAC6B,MAAD,CAA3D;;AACA,QAAIW,QAAQ,KAAK1D,IAAb,IAAqB2D,cAAc,KAAKX,UAA5C,EAAwD;AACtD,aAAO;AAACD,QAAAA,MAAM,EAAEc,MAAM,CAACd,MAAD,CAAf;AAAyBa,QAAAA;AAAzB,OAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD","sourcesContent":["import {UniformFormat, VertexFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {GLUniformType, GLSamplerType, GLCompositeType, GLType} from '../../types/webgl'\n\n/** Check is uniform is of sampler type */\nexport function isSamplerUniform(type: GLUniformType): boolean {\n return SAMPLER_TYPES.includes(type as GLSamplerType);\n}\n\nconst SAMPLER_TYPES: GLSamplerType[] = [\n GL.SAMPLER_2D,\n GL.SAMPLER_CUBE,\n GL.SAMPLER_3D,\n GL.SAMPLER_2D_SHADOW,\n GL.SAMPLER_2D_ARRAY,\n GL.SAMPLER_2D_ARRAY_SHADOW,\n GL.SAMPLER_CUBE_SHADOW,\n GL.INT_SAMPLER_2D,\n GL.INT_SAMPLER_3D,\n GL.INT_SAMPLER_CUBE,\n GL.INT_SAMPLER_2D_ARRAY,\n GL.UNSIGNED_INT_SAMPLER_2D,\n GL.UNSIGNED_INT_SAMPLER_3D,\n GL.UNSIGNED_INT_SAMPLER_CUBE,\n GL.UNSIGNED_INT_SAMPLER_2D_ARRAY\n];\n\n// Composite types table \nconst COMPOSITE_GL_TYPES: Record<GLCompositeType, [GLType, number, string, UniformFormat, VertexFormat?]> = {\n [GL.FLOAT]: [GL.FLOAT, 1, 'float', 'f32', 'float32'],\n [GL.FLOAT_VEC2]: [GL.FLOAT, 2, 'vec2', 'vec2<f32>', 'float32x2'],\n [GL.FLOAT_VEC3]: [GL.FLOAT, 3, 'vec3', 'vec3<f32>', 'float32x3'],\n [GL.FLOAT_VEC4]: [GL.FLOAT, 4, 'vec4', 'vec4<f32>', 'float32x4'],\n\n [GL.INT]: [GL.INT, 1, 'int', 'i32', 'sint32'],\n [GL.INT_VEC2]: [GL.INT, 2, 'ivec2', 'vec2<i32>', 'sint32x2'],\n [GL.INT_VEC3]: [GL.INT, 3, 'ivec3', 'vec3<i32>', 'sint32x3'],\n [GL.INT_VEC4]: [GL.INT, 4, 'ivec4', 'vec4<i32>', 'sint32x4'],\n\n [GL.UNSIGNED_INT]: [GL.UNSIGNED_INT, 1, 'uint', 'u32', 'uint32'],\n [GL.UNSIGNED_INT_VEC2]: [GL.UNSIGNED_INT, 2, 'uvec2', 'vec2<u32>', 'uint32x2'],\n [GL.UNSIGNED_INT_VEC3]: [GL.UNSIGNED_INT, 3, 'uvec3', 'vec3<u32>', 'uint32x3'],\n [GL.UNSIGNED_INT_VEC4]: [GL.UNSIGNED_INT, 4, 'uvec4', 'vec4<u32>', 'uint32x4'],\n\n [GL.BOOL]: [GL.FLOAT, 1, 'bool', 'f32', 'float32x2'],\n [GL.BOOL_VEC2]: [GL.FLOAT, 2, 'bvec2', 'vec2<f32>'],\n [GL.BOOL_VEC3]: [GL.FLOAT, 3, 'bvec3', 'vec3<f32>'],\n [GL.BOOL_VEC4]: [GL.FLOAT, 4, 'bvec4', 'vec4<f32>'],\n\n [GL.FLOAT_MAT2]: [GL.FLOAT, 8, 'mat2', 'mat2x2<f32>'], // 4\n [GL.FLOAT_MAT2x3]: [GL.FLOAT, 8, 'mat2x3', 'mat2x3<f32>'], // 6\n [GL.FLOAT_MAT2x4]: [GL.FLOAT, 8, 'mat2x4', 'mat2x4<f32>'], // 8\n\n [GL.FLOAT_MAT3x2]: [GL.FLOAT, 12, 'mat3x2', 'mat3x2<f32>'], // 6\n [GL.FLOAT_MAT3]: [GL.FLOAT, 12, 'mat3', 'mat3x3<f32>'], // 9\n [GL.FLOAT_MAT3x4]: [GL.FLOAT, 12, 'mat3x4', 'mat3x4<f32>'], // 12\n\n [GL.FLOAT_MAT4x2]: [GL.FLOAT, 16, 'mat4x2', 'mat4x2<f32>'], // 8\n [GL.FLOAT_MAT4x3]: [GL.FLOAT, 16, 'mat4x3', 'mat4x3<f32>'], // 12\n [GL.FLOAT_MAT4]: [GL.FLOAT, 16, 'mat4', 'mat4x4<f32>'] // 16\n};\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decodeUniformType(uniformType: GL): {format: UniformFormat, components: number, glType: GLType} {\n const typeAndSize = COMPOSITE_GL_TYPES[uniformType];\n if (!typeAndSize) {\n return null;\n }\n const [glType, components, , format] = typeAndSize;\n return {format, components, glType};\n}\n\nexport function decodeAttributeType(uniformType: GL): {format: VertexFormat, components: number, glType: GLType} {\n const typeAndSize = COMPOSITE_GL_TYPES[uniformType];\n if (!typeAndSize) {\n return null;\n }\n const [glType, components, , , format] = typeAndSize;\n return {format, components, glType};\n}\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decomposeCompositeGLType(compositeGLType: GLCompositeType): {type: GLType, components: number} | null {\n const typeAndSize = COMPOSITE_GL_TYPES[compositeGLType];\n if (!typeAndSize) {\n return null;\n }\n const [type, components] = typeAndSize;\n return {type, components};\n}\n\nexport function getCompositeGLType(type: GL, components): {glType: GLType, name: string} | null {\n switch (type) {\n case GL.BYTE:\n case GL.UNSIGNED_BYTE:\n case GL.SHORT:\n case GL.UNSIGNED_SHORT:\n type = GL.FLOAT;\n break;\n default:\n }\n\n for (const glType in COMPOSITE_GL_TYPES) {\n const [compType, compComponents, name] = COMPOSITE_GL_TYPES[glType];\n if (compType === type && compComponents === components) {\n return {glType: Number(glType), name};\n }\n }\n return null;\n}\n"],"file":"uniforms.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapter/helpers/uniforms.ts"],"names":["GL","isSamplerUniform","type","SAMPLER_TYPES","includes","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","COMPOSITE_GL_TYPES","FLOAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","INT_VEC2","INT_VEC3","INT_VEC4","UNSIGNED_INT","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","FLOAT_MAT4","decodeUniformType","uniformType","typeAndSize","Error","glType","components","format","decodeAttributeType","attributeType","decomposeCompositeGLType","compositeGLType","getCompositeGLType","BYTE","UNSIGNED_BYTE","SHORT","UNSIGNED_SHORT","compType","compComponents","name","Number"],"mappings":"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","sourcesContent":["import {UniformFormat, VertexFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {GLUniformType, GLSamplerType, GLCompositeType, GLType} from '../../types/webgl';\n\n/** Check is uniform is of sampler type */\nexport function isSamplerUniform(type: GLUniformType): boolean {\n return SAMPLER_TYPES.includes(type as GLSamplerType);\n}\n\nconst SAMPLER_TYPES: GLSamplerType[] = [\n GL.SAMPLER_2D,\n GL.SAMPLER_CUBE,\n GL.SAMPLER_3D,\n GL.SAMPLER_2D_SHADOW,\n GL.SAMPLER_2D_ARRAY,\n GL.SAMPLER_2D_ARRAY_SHADOW,\n GL.SAMPLER_CUBE_SHADOW,\n GL.INT_SAMPLER_2D,\n GL.INT_SAMPLER_3D,\n GL.INT_SAMPLER_CUBE,\n GL.INT_SAMPLER_2D_ARRAY,\n GL.UNSIGNED_INT_SAMPLER_2D,\n GL.UNSIGNED_INT_SAMPLER_3D,\n GL.UNSIGNED_INT_SAMPLER_CUBE,\n GL.UNSIGNED_INT_SAMPLER_2D_ARRAY\n];\n\n// Composite types table\nconst COMPOSITE_GL_TYPES: Record<\n GLCompositeType,\n [GLType, number, string, UniformFormat, VertexFormat?]\n> = {\n [GL.FLOAT]: [GL.FLOAT, 1, 'float', 'f32', 'float32'],\n [GL.FLOAT_VEC2]: [GL.FLOAT, 2, 'vec2', 'vec2<f32>', 'float32x2'],\n [GL.FLOAT_VEC3]: [GL.FLOAT, 3, 'vec3', 'vec3<f32>', 'float32x3'],\n [GL.FLOAT_VEC4]: [GL.FLOAT, 4, 'vec4', 'vec4<f32>', 'float32x4'],\n\n [GL.INT]: [GL.INT, 1, 'int', 'i32', 'sint32'],\n [GL.INT_VEC2]: [GL.INT, 2, 'ivec2', 'vec2<i32>', 'sint32x2'],\n [GL.INT_VEC3]: [GL.INT, 3, 'ivec3', 'vec3<i32>', 'sint32x3'],\n [GL.INT_VEC4]: [GL.INT, 4, 'ivec4', 'vec4<i32>', 'sint32x4'],\n\n [GL.UNSIGNED_INT]: [GL.UNSIGNED_INT, 1, 'uint', 'u32', 'uint32'],\n [GL.UNSIGNED_INT_VEC2]: [GL.UNSIGNED_INT, 2, 'uvec2', 'vec2<u32>', 'uint32x2'],\n [GL.UNSIGNED_INT_VEC3]: [GL.UNSIGNED_INT, 3, 'uvec3', 'vec3<u32>', 'uint32x3'],\n [GL.UNSIGNED_INT_VEC4]: [GL.UNSIGNED_INT, 4, 'uvec4', 'vec4<u32>', 'uint32x4'],\n\n [GL.BOOL]: [GL.FLOAT, 1, 'bool', 'f32', 'float32x2'],\n [GL.BOOL_VEC2]: [GL.FLOAT, 2, 'bvec2', 'vec2<f32>'],\n [GL.BOOL_VEC3]: [GL.FLOAT, 3, 'bvec3', 'vec3<f32>'],\n [GL.BOOL_VEC4]: [GL.FLOAT, 4, 'bvec4', 'vec4<f32>'],\n\n [GL.FLOAT_MAT2]: [GL.FLOAT, 8, 'mat2', 'mat2x2<f32>'], // 4\n [GL.FLOAT_MAT2x3]: [GL.FLOAT, 8, 'mat2x3', 'mat2x3<f32>'], // 6\n [GL.FLOAT_MAT2x4]: [GL.FLOAT, 8, 'mat2x4', 'mat2x4<f32>'], // 8\n\n [GL.FLOAT_MAT3x2]: [GL.FLOAT, 12, 'mat3x2', 'mat3x2<f32>'], // 6\n [GL.FLOAT_MAT3]: [GL.FLOAT, 12, 'mat3', 'mat3x3<f32>'], // 9\n [GL.FLOAT_MAT3x4]: [GL.FLOAT, 12, 'mat3x4', 'mat3x4<f32>'], // 12\n\n [GL.FLOAT_MAT4x2]: [GL.FLOAT, 16, 'mat4x2', 'mat4x2<f32>'], // 8\n [GL.FLOAT_MAT4x3]: [GL.FLOAT, 16, 'mat4x3', 'mat4x3<f32>'], // 12\n [GL.FLOAT_MAT4]: [GL.FLOAT, 16, 'mat4', 'mat4x4<f32>'] // 16\n};\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decodeUniformType(\n uniformType: GL\n): {format: UniformFormat; components: number; glType: GLType} {\n const typeAndSize = COMPOSITE_GL_TYPES[uniformType];\n if (!typeAndSize) {\n throw new Error('uniform');\n }\n const [glType, components, , format] = typeAndSize;\n return {format, components, glType};\n}\n\nexport function decodeAttributeType(attributeType: GL): {\n format: VertexFormat;\n components: number;\n glType: GLType;\n} {\n const typeAndSize = COMPOSITE_GL_TYPES[attributeType];\n if (!typeAndSize) {\n throw new Error('attribute')\n }\n const [glType, components, , , format] = typeAndSize;\n return {format, components, glType};\n}\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decomposeCompositeGLType(\n compositeGLType: GLCompositeType\n): {type: GLType; components: number} | null {\n const typeAndSize = COMPOSITE_GL_TYPES[compositeGLType];\n if (!typeAndSize) {\n return null;\n }\n const [type, components] = typeAndSize;\n return {type, components};\n}\n\nexport function getCompositeGLType(type: GL, components): {glType: GLType; name: string} | null {\n switch (type) {\n case GL.BYTE:\n case GL.UNSIGNED_BYTE:\n case GL.SHORT:\n case GL.UNSIGNED_SHORT:\n type = GL.FLOAT;\n break;\n default:\n }\n\n for (const glType in COMPOSITE_GL_TYPES) {\n const [compType, compComponents, name] = COMPOSITE_GL_TYPES[glType];\n if (compType === type && compComponents === components) {\n return {glType: Number(glType), name};\n }\n }\n return null;\n}\n"],"file":"uniforms.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/adapter/objects/webgl-vertex-array-object.ts"],"names":["assert","GL","getBrowser","WebGLResource","ERR_ELEMENTS","WEBGLVertexArrayObject","Symbol","toStringTag","constructor","device","props","_createHandle","gl2","createVertexArray","_deleteHandle","deleteVertexArray","handle","elements","_bindHandle","bindVertexArray","setElementBuffer","elementBuffer","opts","target","ELEMENT_ARRAY_BUFFER","bind","gl","bindBuffer","setBuffer","location","buffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","ARRAY_BUFFER","assertWebGL2","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","canDisableAttributeZero","isWebGL2","canDisableAttribute","disableVertexAttribArray"],"mappings":"AAAA,SAAQA,MAAR,QAAoC,cAApC;AACA,OAAOC,EAAP,MAAe,oBAAf;AACA,SAAQC,UAAR,QAAyB,eAAzB;AAGA,OAAOC,aAAP,MAA0B,kBAA1B;AAIA,MAAMC,YAAY,GAAG,0CAArB;AASA,eAAe,MAAMC,sBAAN,SAAqCF,aAArC,CAA2E;AACjE,OAAlBG,MAAM,CAACC,WAAW,IAAY;AACjC,WAAO,uBAAP;AACD;;AAEDC,EAAAA,WAAW,CAACC,MAAD,EAAsBC,KAAtB,EAAsD;AAE/D,UAAMD,MAAN,EAAcC,KAAd,EAAqB,EAArB;AACD;;AAEDC,EAAAA,aAAa,GAAG;AACd,WAAO,KAAKC,GAAL,CAASC,iBAAT,EAAP;AACD;;AAEDC,EAAAA,aAAa,GAAS;AACpB,SAAKF,GAAL,CAASG,iBAAT,CAA2B,KAAKC,MAAhC;AAEA,WAAO,CAAC,KAAKC,QAAN,CAAP;AAED;;AAEDC,EAAAA,WAAW,CAACF,MAAD,EAAuC;AAChD,SAAKJ,GAAL,CAASO,eAAT,CAAyBH,MAAzB;AACD;;AAIDI,EAAAA,gBAAgB,CAACC,
|
|
1
|
+
{"version":3,"sources":["../../../../src/adapter/objects/webgl-vertex-array-object.ts"],"names":["assert","GL","getBrowser","WebGLResource","ERR_ELEMENTS","WEBGLVertexArrayObject","Symbol","toStringTag","constructor","device","props","_createHandle","gl2","createVertexArray","_deleteHandle","deleteVertexArray","handle","elements","_bindHandle","bindVertexArray","setElementBuffer","elementBuffer","opts","target","ELEMENT_ARRAY_BUFFER","bind","gl","bindBuffer","setBuffer","location","buffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","ARRAY_BUFFER","assertWebGL2","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","canDisableAttributeZero","isWebGL2","canDisableAttribute","disableVertexAttribArray"],"mappings":"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","sourcesContent":["import {assert, ResourceProps} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getBrowser} from '@probe.gl/env';\n\nimport WebGLDevice from '../webgl-device';\nimport WebGLResource from './webgl-resource';\n\nimport Buffer from '../resources/webgl-buffer';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\n/**\n * VertexArrayObject properties\n */\nexport type VertexArrayObjectProps = ResourceProps & {\n};\n\n/** VertexArrayObject wrapper */\nexport default class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObjectProps> {\n get [Symbol.toStringTag](): string {\n return 'BaseVertexArrayObject';\n }\n\n constructor(device: WebGLDevice, props?: VertexArrayObjectProps) {\n // @ts-expect-error\n super(device, props, {});\n }\n\n _createHandle() {\n return this.gl2.createVertexArray();\n }\n\n _deleteHandle(): void {\n this.gl2.deleteVertexArray(this.handle);\n // @ts-expect-error\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle: WEBGLVertexArrayObject): void {\n this.gl2.bindVertexArray(handle);\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer: Buffer | null = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location: number, buffer: Buffer, accessor: any): this {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n this.device.assertWebGL2();\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n /**\n * Enabling an attribute location makes it reference the currently bound buffer\n * Disabling an attribute location makes it reference the global constant value\n * TODO - handle single values for size 1 attributes?\n * TODO - convert classic arrays based on known type?\n */\n enable(location: number, enable = true): this {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers...\n const canDisableAttributeZero = this.device.isWebGL2 || getBrowser() === 'Chrome';\n const canDisableAttribute = canDisableAttributeZero || location !== 0;\n\n if (enable || canDisableAttribute) {\n location = Number(location);\n this.bind(() =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n}\n"],"file":"webgl-vertex-array-object.js"}
|
|
@@ -20,7 +20,7 @@ export default class WEBGLBuffer extends Buffer {
|
|
|
20
20
|
|
|
21
21
|
_defineProperty(this, "bytesUsed", void 0);
|
|
22
22
|
|
|
23
|
-
_defineProperty(this, "debugData",
|
|
23
|
+
_defineProperty(this, "debugData", null);
|
|
24
24
|
|
|
25
25
|
_defineProperty(this, "webglUsage", void 0);
|
|
26
26
|
|
|
@@ -85,7 +85,7 @@ export default class WEBGLBuffer extends Buffer {
|
|
|
85
85
|
this.removeStats();
|
|
86
86
|
this.trackDeallocatedMemory();
|
|
87
87
|
this.gl.deleteBuffer(this.handle);
|
|
88
|
-
this.
|
|
88
|
+
this.destroyed = true;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|