@luma.gl/webgl 9.0.0-beta.4 → 9.0.0-beta.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.map +1 -1
- package/dist/adapter/converters/device-parameters.js +297 -155
- package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +73 -67
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
- package/dist/adapter/converters/shader-formats.js +53 -46
- package/dist/adapter/converters/texture-formats.d.ts +13 -19
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +474 -879
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +53 -61
- package/dist/adapter/device-helpers/device-features.d.ts +2 -5
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-features.js +56 -87
- package/dist/adapter/device-helpers/device-limits.d.ts +2 -4
- package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +88 -83
- package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +79 -63
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +19 -0
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-features.js +86 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
- package/dist/adapter/helpers/decode-webgl-types.js +88 -76
- package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +261 -225
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +47 -37
- package/dist/adapter/helpers/set-uniform.d.ts +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +68 -82
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js +78 -93
- package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +19 -12
- package/dist/adapter/objects/webgl-renderbuffer.d.ts +2 -2
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +86 -77
- package/dist/adapter/objects/webgl-resource.d.ts +3 -25
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +102 -146
- package/dist/adapter/resources/webgl-buffer.d.ts +3 -4
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +161 -119
- package/dist/adapter/resources/webgl-command-buffer.d.ts +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +266 -168
- package/dist/adapter/resources/webgl-command-encoder.d.ts +8 -3
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +33 -39
- package/dist/adapter/resources/webgl-external-texture.js +93 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +8 -10
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +167 -137
- package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
- package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-query-set.js +136 -0
- package/dist/adapter/resources/webgl-render-pass.d.ts +3 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +124 -90
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +15 -6
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +356 -221
- package/dist/adapter/resources/webgl-sampler.d.ts +1 -3
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +43 -33
- package/dist/adapter/resources/webgl-shader.d.ts +12 -2
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +114 -47
- package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
- package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-texture-view.js +18 -0
- package/dist/adapter/resources/webgl-texture.d.ts +6 -9
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +615 -695
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +2 -2
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js +141 -143
- package/dist/adapter/resources/webgl-vertex-array.d.ts +3 -3
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +229 -157
- package/dist/adapter/webgl-canvas-context.d.ts +2 -2
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +58 -36
- package/dist/adapter/webgl-device.d.ts +34 -40
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +418 -363
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +132 -101
- package/dist/classic/clear.d.ts +2 -2
- package/dist/classic/clear.d.ts.map +1 -1
- package/dist/classic/clear.js +73 -72
- package/dist/classic/copy-and-blit.d.ts +1 -1
- package/dist/classic/copy-and-blit.d.ts.map +1 -1
- package/dist/classic/copy-and-blit.js +175 -175
- package/dist/classic/format-utils.d.ts +2 -2
- package/dist/classic/format-utils.d.ts.map +1 -1
- package/dist/classic/format-utils.js +39 -32
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +96 -81
- package/dist/context/context/context-data.d.ts +14 -0
- package/dist/context/context/context-data.d.ts.map +1 -0
- package/dist/context/context/context-data.js +33 -0
- package/dist/context/context/create-browser-context.d.ts +1 -6
- package/dist/context/context/create-browser-context.d.ts.map +1 -1
- package/dist/context/context/create-browser-context.js +62 -49
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +55 -50
- package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +104 -77
- package/dist/context/helpers/create-browser-context.d.ts +35 -0
- package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
- package/dist/context/helpers/create-browser-context.js +67 -0
- package/dist/context/{polyfill/context-data.d.ts → helpers/webgl-context-data.d.ts} +2 -2
- package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
- package/dist/context/helpers/webgl-context-data.js +21 -0
- package/dist/context/helpers/webgl-extensions.d.ts +4 -0
- package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
- package/dist/context/helpers/webgl-extensions.js +10 -0
- package/dist/context/parameters/unified-parameter-api.d.ts +3 -3
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +94 -44
- package/dist/context/parameters/webgl-parameter-tables.d.ts +120 -99
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +469 -404
- package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.js +19 -14
- package/dist/context/state-tracker/track-context-state.d.ts +4 -4
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +188 -123
- package/dist/context/state-tracker/with-parameters.d.ts +2 -2
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +43 -26
- package/dist/dist.dev.js +3135 -4142
- package/dist/index.cjs +1766 -2717
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +25 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist.min.js +9 -42
- package/package.json +11 -15
- package/src/adapter/converters/device-parameters.ts +105 -17
- package/src/adapter/converters/sampler-parameters.ts +12 -20
- package/src/adapter/converters/shader-formats.ts +47 -22
- package/src/adapter/converters/texture-formats.ts +138 -185
- package/src/adapter/converters/vertex-formats.ts +3 -3
- package/src/adapter/device-helpers/webgl-device-features.ts +101 -0
- package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +30 -22
- package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
- package/src/adapter/helpers/decode-webgl-types.ts +13 -7
- package/src/adapter/helpers/get-shader-layout.ts +21 -31
- package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
- package/src/adapter/helpers/set-uniform.ts +3 -4
- package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
- package/src/adapter/objects/constants-to-keys.ts +3 -2
- package/src/adapter/objects/webgl-renderbuffer.ts +38 -16
- package/src/adapter/objects/webgl-resource.ts +7 -140
- package/src/adapter/resources/webgl-buffer.ts +10 -14
- package/src/adapter/resources/webgl-command-buffer.ts +24 -34
- package/src/adapter/resources/webgl-command-encoder.ts +14 -11
- package/src/adapter/resources/webgl-external-texture.ts +5 -5
- package/src/adapter/resources/webgl-framebuffer.ts +38 -34
- package/src/adapter/resources/webgl-query-set.ts +171 -0
- package/src/adapter/resources/webgl-render-pass.ts +24 -15
- package/src/adapter/resources/webgl-render-pipeline.ts +138 -70
- package/src/adapter/resources/webgl-sampler.ts +7 -10
- package/src/adapter/resources/webgl-shader.ts +65 -11
- package/src/adapter/resources/webgl-texture-view.ts +28 -0
- package/src/adapter/resources/webgl-texture.ts +38 -105
- package/src/adapter/resources/webgl-transform-feedback.ts +16 -22
- package/src/adapter/resources/webgl-vertex-array.ts +20 -21
- package/src/adapter/webgl-canvas-context.ts +7 -11
- package/src/adapter/webgl-device.ts +106 -151
- package/src/classic/accessor.ts +5 -4
- package/src/classic/clear.ts +25 -20
- package/src/classic/copy-and-blit.ts +12 -6
- package/src/classic/format-utils.ts +2 -1
- package/src/classic/typed-array-utils.ts +3 -7
- package/src/context/debug/spector.ts +9 -6
- package/src/context/debug/webgl-developer-tools.ts +31 -20
- package/src/context/{context → helpers}/create-browser-context.ts +9 -33
- package/src/context/{polyfill/context-data.ts → helpers/webgl-context-data.ts} +3 -2
- package/src/context/helpers/webgl-extensions.ts +17 -0
- package/src/context/parameters/unified-parameter-api.ts +5 -4
- package/src/context/parameters/webgl-parameter-tables.ts +118 -90
- package/src/context/state-tracker/deep-array-equal.ts +2 -1
- package/src/context/state-tracker/track-context-state.ts +29 -23
- package/src/context/state-tracker/with-parameters.ts +7 -2
- package/src/index.ts +4 -18
- package/src/types.ts +2 -1
- package/dist/adapter/converters/device-parameters.js.map +0 -1
- package/dist/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/adapter/converters/shader-formats.js.map +0 -1
- package/dist/adapter/converters/texture-formats.js.map +0 -1
- package/dist/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
- package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
- package/dist/adapter/device-helpers/is-old-ie.js +0 -9
- package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
- package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
- package/dist/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
- package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
- package/dist/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/adapter/webgl-device.js.map +0 -1
- package/dist/classic/accessor.js.map +0 -1
- package/dist/classic/clear.js.map +0 -1
- package/dist/classic/copy-and-blit.js.map +0 -1
- package/dist/classic/format-utils.js.map +0 -1
- package/dist/classic/typed-array-utils.js.map +0 -1
- package/dist/context/context/create-browser-context.js.map +0 -1
- package/dist/context/context/create-headless-context.d.ts +0 -9
- package/dist/context/context/create-headless-context.d.ts.map +0 -1
- package/dist/context/context/create-headless-context.js +0 -42
- package/dist/context/context/create-headless-context.js.map +0 -1
- package/dist/context/context/webgl-checks.d.ts +0 -13
- package/dist/context/context/webgl-checks.d.ts.map +0 -1
- package/dist/context/context/webgl-checks.js +0 -31
- package/dist/context/context/webgl-checks.js.map +0 -1
- package/dist/context/debug/spector.js.map +0 -1
- package/dist/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/context/polyfill/context-data.d.ts.map +0 -1
- package/dist/context/polyfill/context-data.js +0 -12
- package/dist/context/polyfill/context-data.js.map +0 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
- package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
- package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/context/polyfill/polyfill-context.d.ts +0 -5
- package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-context.js +0 -87
- package/dist/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/context/polyfill/polyfill-table.d.ts +0 -48
- package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-table.js +0 -137
- package/dist/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/src/adapter/device-helpers/device-features.ts +0 -161
- package/src/adapter/device-helpers/device-limits.ts +0 -155
- package/src/adapter/device-helpers/is-old-ie.ts +0 -14
- package/src/context/context/create-headless-context.ts +0 -51
- package/src/context/context/webgl-checks.ts +0 -51
- package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
- package/src/context/polyfill/polyfill-context.ts +0 -104
- package/src/context/polyfill/polyfill-table.ts +0 -167
- package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","pushContextState","popContextState","setGLParameters","WebGLDevice","withDeviceAndGLParameters","device","parameters","glParameters","func","gl","setDeviceParameters","withGLParameters","withDeviceParameters","webglDevice","attach","cullMode","disable","enable","cullFace","frontFace","map","ccw","cw","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","blendColorOperation","blendAlphaOperation","colorEquation","convertBlendOperationToEquation","alphaEquation","blendEquationSeparate","colorSrcFactor","convertBlendFactorToFunction","blendColorSrcFactor","colorDstFactor","blendColorDstFactor","alphaSrcFactor","blendAlphaSrcFactor","alphaDstFactor","blendAlphaDstFactor","blendFuncSeparate","parameter","value","never","less","equal","greater","always","convertToCompareFunction","keep","zero","replace","invert","message","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty,\n BlendOperation,\n BlendFactor\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLBlendEquation, GLBlendFunction, GLParameters} from '@luma.gl/constants';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setGLParameters} from '../../context/parameters/unified-parameter-api';\nimport {WebGLDevice} from '../webgl-device';\n\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceAndGLParameters<T = unknown>(\n device: Device, \n parameters: Parameters,\n glParameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n setGLParameters(device, glParameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters<T = unknown>(\n device: Device,\n parameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setGLParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(\n device: Device,\n parameters: Parameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(\n map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n })\n );\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(GL.STENCIL_TEST)\n : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (\n parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation\n ) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation(\n 'stencilDepthFailOperation',\n parameters.stencilDepthFailOperation\n );\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n if (parameters.blendColorOperation || parameters.blendAlphaOperation) {\n gl.enable(GL.BLEND);\n\n const colorEquation = convertBlendOperationToEquation('blendColorOperation', parameters.blendColorOperation || 'add');\n const alphaEquation = convertBlendOperationToEquation('blendAlphaOperation', parameters.blendAlphaOperation || 'add');\n gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n const colorSrcFactor = convertBlendFactorToFunction('blendColorSrcFactor', parameters.blendColorSrcFactor || 'one');\n const colorDstFactor = convertBlendFactorToFunction('blendColorDstFactor', parameters.blendColorDstFactor || 'zero');\n const alphaSrcFactor = convertBlendFactorToFunction('blendAlphaSrcFactor', parameters.blendAlphaSrcFactor || 'one');\n const alphaDstFactor = convertBlendFactorToFunction('blendAlphaDstFactor', parameters.blendAlphaDstFactor || 'zero');\n gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n never: GL.NEVER,\n less: GL.LESS,\n equal: GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n greater: GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n always: GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n keep: GL.KEEP,\n zero: GL.ZERO,\n replace: GL.REPLACE,\n invert: GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\nfunction convertBlendOperationToEquation(parameter: string, value: BlendOperation): GLBlendEquation {\n return map(parameter, value, {\n 'add': GL.FUNC_ADD,\n 'subtract': GL.FUNC_SUBTRACT,\n 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n // When using a WebGL 2 context, the following values are available additionally:\n 'min': GL.MIN,\n 'max': GL.MAX\n } as Record<BlendOperation, GLBlendEquation>);\n}\n\nfunction convertBlendFactorToFunction(parameter: string, value: BlendFactor): GLBlendFunction {\n return map(parameter, value, {\n 'one': GL.ONE,\n 'zero': GL.ZERO,\n 'src-color': GL.SRC_COLOR,\n 'one-minus-src-color': GL.ONE_MINUS_SRC_COLOR,\n 'dst-color': GL.DST_COLOR,\n 'one-minus-dst-color': GL.ONE_MINUS_DST_COLOR,\n 'src-alpha': GL.SRC_ALPHA,\n 'one-minus-src-alpha': GL.ONE_MINUS_SRC_ALPHA,\n 'dst-alpha': GL.DST_ALPHA,\n 'one-minus-dst-alpha': GL.ONE_MINUS_DST_ALPHA,\n } as Record<BlendFactor, GLBlendFunction>);\n}\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sampler-parameters.js","names":["convertCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","convertAddressMode","addressModeV","addressModeW","magFilter","convertMaxFilterMode","minFilter","mipmapFilter","convertMinFilterMode","lodMinClamp","undefined","lodMaxClamp","type","compare","maxAnisotropy","updateSamplerParametersForNPOT","parameters","newParameters","addressMode","maxFilter"],"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// SAMPLER FILTERS\nimport {SamplerProps} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertCompareFunction} from './device-parameters';\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerProps): GLSamplerParameters {\n const params: GLSamplerParameters = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(\n props.minFilter || 'linear',\n props.mipmapFilter\n );\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n }\n if (props.compare) {\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n */\nexport function updateSamplerParametersForNPOT(\n parameters: GLSamplerParameters\n): GLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n\n// HELPERS\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL.CLAMP_TO_EDGE | GL.REPEAT | GL.MIRRORED_REPEAT {\n switch (addressMode) {\n case 'clamp-to-edge':\n return GL.CLAMP_TO_EDGE;\n case 'repeat':\n return GL.REPEAT;\n case 'mirror-repeat':\n return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL.NEAREST | GL.LINEAR {\n switch (maxFilter) {\n case 'nearest':\n return GL.NEAREST;\n case 'linear':\n return GL.LINEAR;\n }\n}\n\n/**\n * WebGPU has separate min filter and mipmap filter,\n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(\n minFilter: 'nearest' | 'linear',\n mipmapFilter?: 'nearest' | 'linear'\n): GL.NEAREST | GL.LINEAR | GL.NEAREST_MIPMAP_NEAREST | GL.LINEAR_MIPMAP_NEAREST | GL.NEAREST_MIPMAP_LINEAR | GL.LINEAR_MIPMAP_LINEAR {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest':\n return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear':\n return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n"],"mappings":"SAMQA,sBAAsB;AAO9B,OAAO,SAASC,+BAA+BA,CAACC,KAAmB,EAAuB;EACxF,MAAMC,MAA2B,GAAG,CAAC,CAAC;EACtC,IAAID,KAAK,CAACE,YAAY,EAAE;IACtBD,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACE,YAAY,CAAC;EACpE;EACA,IAAIF,KAAK,CAACI,YAAY,EAAE;IACtBH,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACI,YAAY,CAAC;EACpE;EACA,IAAIJ,KAAK,CAACK,YAAY,EAAE;IACtBJ,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACK,YAAY,CAAC;EACpE;EACA,IAAIL,KAAK,CAACM,SAAS,EAAE;IACnBL,MAAM,OAAuB,GAAGM,oBAAoB,CAACP,KAAK,CAACM,SAAS,CAAC;EACvE;EACA,IAAIN,KAAK,CAACQ,SAAS,IAAIR,KAAK,CAACS,YAAY,EAAE;IAEzCR,MAAM,OAAuB,GAAGS,oBAAoB,CAClDV,KAAK,CAACQ,SAAS,IAAI,QAAQ,EAC3BR,KAAK,CAACS,YACR,CAAC;EACH;EACA,IAAIT,KAAK,CAACW,WAAW,KAAKC,SAAS,EAAE;IACnCX,MAAM,OAAoB,GAAGD,KAAK,CAACW,WAAW;EAChD;EACA,IAAIX,KAAK,CAACa,WAAW,KAAKD,SAAS,EAAE;IACnCX,MAAM,OAAoB,GAAGD,KAAK,CAACa,WAAW;EAChD;EACA,IAAIb,KAAK,CAACc,IAAI,KAAK,oBAAoB,EAAE;IAEvCb,MAAM,OAAyB,QAA4B;EAC7D;EACA,IAAID,KAAK,CAACe,OAAO,EAAE;IACjBd,MAAM,OAAyB,GAAGH,sBAAsB,CAAC,SAAS,EAAEE,KAAK,CAACe,OAAO,CAAC;EACpF;EAEA,IAAIf,KAAK,CAACgB,aAAa,EAAE;IACvBf,MAAM,OAA+B,GAAGD,KAAK,CAACgB,aAAa;EAC7D;EACA,OAAOf,MAAM;AACf;AAKA,OAAO,SAASgB,8BAA8BA,CAC5CC,UAA+B,EACV;EACrB,MAAMC,aAAa,GAAG;IAAC,GAAGD;EAAU,CAAC;EACrC,IAAIA,UAAU,OAAuB,SAAe,EAAE;IAEpDC,aAAa,OAAuB,OAAY;EAClD;EAEAA,aAAa,OAAmB,QAAmB;EACnDA,aAAa,OAAmB,QAAmB;EACnD,OAAOA,aAAa;AACtB;AAKA,SAAShB,kBAAkBA,CAACiB,WAAyD,EAAqD;EACxI,QAAQA,WAAW;IACjB,KAAK,eAAe;MAClB;IACF,KAAK,QAAQ;MACX;IACF,KAAK,eAAe;MAClB;EACJ;AACF;AAEA,SAASb,oBAAoBA,CAACc,SAA+B,EAA0B;EACrF,QAAQA,SAAS;IACf,KAAK,SAAS;MACZ;IACF,KAAK,QAAQ;MACX;EACJ;AACF;AAMA,SAASX,oBAAoBA,CAC3BF,SAA+B,EAC/BC,YAAmC,EACiG;EACpI,IAAI,CAACA,YAAY,EAAE;IACjB,OAAOF,oBAAoB,CAACC,SAAS,CAAC;EACxC;EACA,QAAQA,SAAS;IACf,KAAK,SAAS;MACZ,OAAOC,YAAY,KAAK,SAAS,cAAuD;IAC1F,KAAK,QAAQ;MACX,OAAOA,YAAY,KAAK,SAAS,cAAqD;EAC1F;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader-formats.js","names":["getShaderAttributeTypeFromGL","type","components","dataType","getShaderDataTypeFromGL","Error","String","getGLFromShaderDataType"],"sources":["../../../src/adapter/converters/shader-formats.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {GL} from '@luma.gl/constants';\nimport {ShaderAttributeType, ShaderDataType} from '@luma.gl/core';\n\n/** Get shader attribute type from GL constants */\nexport function getShaderAttributeTypeFromGL(type: GL, components: 1 | 2 | 3 | 4): ShaderAttributeType {\n const dataType = getShaderDataTypeFromGL(type);\n switch (components) {\n case 1: return dataType;\n case 2: return `vec2<${dataType}>`;\n case 3: return `vec2<${dataType}>`;\n case 4: return `vec2<${dataType}>`;\n default: throw new Error(String(components));\n }\n}\n\n/** Get shader data type from GL constants */\nexport function getShaderDataTypeFromGL(type: GL): ShaderDataType {\n switch (type) {\n case GL.INT: return 'i32';\n case GL.UNSIGNED_INT: return 'u32';\n case GL.SHORT: return 'i32';\n case GL.UNSIGNED_SHORT: return 'u32';\n case GL.BYTE: return 'i32';\n case GL.UNSIGNED_BYTE: return 'u32';\n case GL.FLOAT: return 'f32';\n case GL.HALF_FLOAT: return 'f16';\n default: throw new Error(String(type));\n }\n}\n\n/** GetGL constant from shader data type */\nexport function getGLFromShaderDataType(type: ShaderDataType): GL.INT | GL.UNSIGNED_INT | GL.FLOAT | GL.HALF_FLOAT {\n switch (type) {\n // TODO\n case 'i32': return GL.INT;\n case 'u32': return GL.UNSIGNED_INT;\n case 'f32': return GL.FLOAT;\n case 'f16': return GL.HALF_FLOAT;\n default: throw new Error(String(type));\n }\n}\n"],"mappings":"AAOA,OAAO,SAASA,4BAA4BA,CAACC,IAAQ,EAAEC,UAAyB,EAAuB;EACrG,MAAMC,QAAQ,GAAGC,uBAAuB,CAACH,IAAI,CAAC;EAC9C,QAAQC,UAAU;IAChB,KAAK,CAAC;MAAE,OAAOC,QAAQ;IACvB,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC;MAAS,MAAM,IAAIE,KAAK,CAACC,MAAM,CAACJ,UAAU,CAAC,CAAC;EAC9C;AACF;AAGA,OAAO,SAASE,uBAAuBA,CAACH,IAAQ,EAAkB;EAChE,QAAQA,IAAI;IACV;MAAa,OAAO,KAAK;IACzB;MAAsB,OAAO,KAAK;IAClC;MAAe,OAAO,KAAK;IAC3B;MAAwB,OAAO,KAAK;IACpC;MAAc,OAAO,KAAK;IAC1B;MAAuB,OAAO,KAAK;IACnC;MAAe,OAAO,KAAK;IAC3B;MAAoB,OAAO,KAAK;IAChC;MAAS,MAAM,IAAII,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;EACxC;AACF;AAGA,OAAO,SAASM,uBAAuBA,CAACN,IAAoB,EAAuD;EACjH,QAAQA,IAAI;IAEV,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ;MAAS,MAAM,IAAII,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;EACxC;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"texture-formats.js","names":["decodeTextureFormat","isWebGL2","getGLFromVertexType","texture_compression_bc","texture_compression_astc","texture_compression_etc2","texture_compression_etc1_webgl","texture_compression_pvrtc_webgl","texture_compression_atc_webgl","X_S3TC","X_S3TC_SRGB","X_RGTC","X_BPTC","X_ETC2","X_ASTC","X_ETC1","X_PVRTC","X_ATC","EXT_SRGB","EXT_TEXTURE_NORM16","EXT_FLOAT_WEBGL1","EXT_FLOAT_RENDER_WEBGL2","checkExtension","gl","extension","getExtension","checkExtensions","extensions","every","TEXTURE_FEATURE_CHECKS","checkTextureFeature","feature","_TEXTURE_FEATURE_CHEC","call","checkTextureFeatures","features","getTextureFeatures","textureFeatures","Object","keys","filter","TEXTURE_FORMATS","gl1","b","c","bpp","dataFormat","types","renderbuffer","render","f","x","wgpu","gl1ext","p","gl2ext","attachment","depthTexture","DATA_FORMAT_CHANNELS","TYPE_SIZES","isTextureFormatSupported","formatOrGL","format","convertGLToTextureFormat","info","undefined","Boolean","isRenderbufferFormatSupported","_TEXTURE_FORMATS$form","entry","entries","find","_ref","Error","convertTextureFormatToGL","formatInfo","webglFormat","getTextureFormatSupport","supported","renderable","filterable","blendable","storable","isTextureFormatFilterable","decoded","signed","endsWith","isTextureFormatRenderable","getWebGLTextureParameters","getWebGLPixelDataFormat","integer","normalized","type","dataType","compressed","getDepthStencilAttachmentWebGL","_checkFloat32ColorAttachment","internalFormat","arguments","length","srcFormat","srcType","texture","framebuffer","createTexture","bindTexture","level","width","height","border","pixel","Uint8Array","texImage2D","createFramebuffer","bindFramebuffer","framebufferTexture2D","status","checkFramebufferStatus","deleteTexture","deleteFramebuffer","getTextureFormatBytesPerPixel","params","channels","channelSize"],"sources":["../../../src/adapter/converters/texture-formats.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {TextureFormat, DeviceFeature} from '@luma.gl/core';\nimport {decodeTextureFormat} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport { getGLFromVertexType } from './vertex-formats';\n\n/* eslint-disable camelcase */\n\n// TEXTURE FEATURES\n\n// Define local device feature strings to optimize minification\nconst texture_compression_bc: DeviceFeature = 'texture-compression-bc';\nconst texture_compression_astc: DeviceFeature = 'texture-compression-astc';\nconst texture_compression_etc2: DeviceFeature = 'texture-compression-etc2';\nconst texture_compression_etc1_webgl: DeviceFeature = 'texture-compression-etc1-webgl';\nconst texture_compression_pvrtc_webgl: DeviceFeature = 'texture-compression-pvrtc-webgl';\nconst texture_compression_atc_webgl: DeviceFeature = 'texture-compression-atc-webgl';\n\n// Define local webgl extension strings to optimize minification\nconst X_S3TC = 'WEBGL_compressed_texture_s3tc'; // BC1, BC2, BC3\nconst X_S3TC_SRGB = 'WEBGL_compressed_texture_s3tc_srgb'; // BC1, BC2, BC3\nconst X_RGTC = 'EXT_texture_compression_rgtc'; // BC4, BC5\nconst X_BPTC = 'EXT_texture_compression_bptc'; // BC6, BC7\nconst X_ETC2 = 'WEBGL_compressed_texture_etc'; // Renamed from 'WEBGL_compressed_texture_es3'\nconst X_ASTC = 'WEBGL_compressed_texture_astc';\nconst X_ETC1 = 'WEBGL_compressed_texture_etc1';\nconst X_PVRTC = 'WEBGL_compressed_texture_pvrtc';\nconst X_ATC = 'WEBGL_compressed_texture_atc';\n\n// Define local webgl extension strings to optimize minification\nconst EXT_SRGB = 'EXT_sRGB'; // https://developer.mozilla.org/en-US/docs/Web/API/EXT_sRGB\nconst EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';\nconst EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';\nconst EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';\n// const EXT_HALF_FLOAT_WEBGL1 = 'EXT_color_buffer_half_float';\n// const DEPTH = 'WEBGL_depth_texture';\n\nconst checkExtension = (gl: WebGLRenderingContext, extension: string): boolean =>\n gl.getExtension(extension);\nconst checkExtensions = (gl: WebGLRenderingContext, extensions: string[]): boolean =>\n extensions.every(extension => gl.getExtension(extension));\n\n// prettier-ignore\nconst TEXTURE_FEATURE_CHECKS: Partial<Record<DeviceFeature, (gl: WebGLRenderingContext) => boolean> > = {\n 'texture-blend-float-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'EXT_float_blend'),\n 'texture-formats-srgb-webgl1': (gl) => (isWebGL2(gl) ? true : checkExtension(gl, EXT_SRGB)),\n 'texture-formats-depth-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'WEBGL_depth_texture'),\n 'texture-formats-float32-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_float'),\n 'texture-formats-float16-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_half_float'),\n 'texture-formats-norm16-webgl': (gl) => isWebGL2(gl) ? checkExtension(gl, EXT_TEXTURE_NORM16) : false,\n 'texture-filter-linear-float32-webgl': (gl) => checkExtension(gl, 'OES_texture_float_linear'),\n 'texture-filter-linear-float16-webgl': (gl) => checkExtension(gl, 'OES_texture_half_float_linear'),\n 'texture-filter-anisotropic-webgl': (gl) => checkExtension(gl, 'EXT_texture_filter_anisotropic'),\n 'texture-renderable-float32-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_float'), // [false, 'EXT_color_buffer_float'],\n 'texture-renderable-float16-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_half_float'),\n\n 'texture-compression-bc': (gl) => checkExtensions(gl, [X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC]),\n 'texture-compression-bc5-webgl': (gl) => checkExtensions(gl, [X_RGTC]),\n // 'texture-compression-bc7-webgl': gl => checkExtensions(gl, [X_BPTC]),\n // 'texture-compression-bc3-srgb-webgl': gl => checkExtensions(gl, [X_S3TC_SRGB]),\n // 'texture-compression-bc3-webgl': gl => checkExtensions(gl, [X_S3TC]),\n 'texture-compression-etc2': (gl) => checkExtensions(gl, [X_ETC2]),\n 'texture-compression-astc': (gl) => checkExtensions(gl, [X_ASTC]),\n 'texture-compression-etc1-webgl': (gl) => checkExtensions(gl, [X_ETC1]),\n 'texture-compression-pvrtc-webgl': (gl) => checkExtensions(gl, [X_PVRTC]),\n 'texture-compression-atc-webgl': (gl) => checkExtensions(gl, [X_ATC])\n};\n\nexport function checkTextureFeature(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {\n return TEXTURE_FEATURE_CHECKS[feature]?.(gl) || false;\n}\n\nconst checkTextureFeatures = (gl: WebGLRenderingContext, features: DeviceFeature[]): boolean =>\n features.every(feature => checkTextureFeature(gl, feature));\n\n/** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */\nexport function getTextureFeatures(gl: WebGLRenderingContext): DeviceFeature[] {\n const textureFeatures = Object.keys(TEXTURE_FEATURE_CHECKS) as DeviceFeature[];\n return textureFeatures.filter(feature => checkTextureFeature(gl, feature));\n}\n\n// TEXTURE FORMATS\n\n/** Map a format to webgl and constants */\ntype Format = {\n gl?: GL;\n /** If a different unsized format is needed in WebGL1 */\n gl1?: GL;\n gl1ext?: string;\n /** format requires WebGL2, when using a WebGL 1 context, color renderbuffer formats are limited */\n gl2ext?: string;\n\n /** (bytes per pixel), for memory usage calculations. */\n b?: number;\n /** channels */\n c?: number;\n bpp?: number;\n /** packed */\n p?: number;\n /** compressed */\n x?: string;\n /** for compressed texture formats */\n f?: DeviceFeature;\n /** renderable if feature is present */\n render?: DeviceFeature;\n /** filterable if feature is present */\n filter?: DeviceFeature;\n\n /** If not supported on WebGPU */\n wgpu?: false;\n\n types?: number[];\n\n dataFormat?: GL;\n /** Depth and stencil format attachment points. If set, needs to be a Renderbuffer unless depthTexture is set */\n attachment?: GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;\n /** if depthTexture is set this is a depth/stencil format that can be set to a texture */\n depthTexture?: boolean;\n\n renderbuffer?: boolean\n};\n\n// TABLES\n\n/** \n * Texture format data -\n * Exported but can change without notice\n */\n// prettier-ignore\nexport const TEXTURE_FORMATS: Record<TextureFormat, Format> = {\n // Unsized formats that leave the precision up to the driver.\n // TODO - Fix bpp constants\n // 'r8unorm-unsized': {gl: GL.LUMINANCE, b: 4, c: 2, bpp: 4},\n 'rgb8unorm-unsized': {gl: GL.RGB, gl1: GL.RGB, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5]},\n 'rgba8unorm-unsized': {gl: GL.RGBA, gl1: GL.RGBA, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4, GL.UNSIGNED_SHORT_5_5_5_1]},\n // 'rgb8unorm-srgb-unsized': {gl: GL.SRGB_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n // 'rgba8unorm-srgb-unsized': {gl: GL.SRGB_ALPHA_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n\n // 8-bit formats\n 'r8unorm': {gl: GL.R8, b: 1, c: 1, renderbuffer: true},\n 'r8snorm': {gl: GL.R8_SNORM, b: 1, c: 1},\n 'r8uint': {gl: GL.R8UI, b: 1, c: 1, renderbuffer: true},\n 'r8sint': {gl: GL.R8I, b: 1, c: 1, renderbuffer: true},\n\n // 16-bit formats\n 'rg8unorm': {gl: GL.RG8, b: 2, c: 2, renderbuffer: true},\n 'rg8snorm': {gl: GL.RG8_SNORM, b: 2, c: 2},\n 'rg8uint': {gl: GL.RG8UI, b: 2, c: 2, renderbuffer: true},\n 'rg8sint': {gl: GL.RG8I, b: 2, c: 2, renderbuffer: true},\n\n 'r16uint': {gl: GL.R16UI, b: 2, c: 1, renderbuffer: true},\n 'r16sint': {gl: GL.R16I, b: 2, c: 1, renderbuffer: true},\n 'r16float': {gl: GL.R16F, b: 2, c: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl', renderbuffer: true},\n 'r16unorm-webgl': {gl: GL.R16_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl', renderbuffer: true, x: EXT_TEXTURE_NORM16},\n 'r16snorm-webgl': {gl: GL.R16_SNORM_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // Packed 16-bit formats\n 'rgba4unorm-webgl': {gl: GL.RGBA4, b: 2, c: 4, wgpu: false, renderbuffer: true},\n 'rgb565unorm-webgl': {gl: GL.RGB565, b: 2, c: 4, wgpu: false, renderbuffer: true},\n 'rgb5a1unorm-webgl': {gl: GL.RGB5_A1, b: 2, c: 4, wgpu: false, renderbuffer: true},\n\n // 24-bit formats\n 'rgb8unorm-webgl': {gl: GL.RGB8, b: 3, c: 3, wgpu: false},\n 'rgb8snorm-webgl': {gl: GL.RGB8_SNORM, b: 3, c: 3, wgpu: false},\n\n // 32-bit formats \n 'rgba8unorm': {gl: GL.RGBA8, gl1: GL.RGBA, b: 4, c: 2, bpp: 4},\n 'rgba8unorm-srgb': {gl: GL.SRGB8_ALPHA8, gl1: GL.SRGB_ALPHA_EXT, b: 4, c: 4, gl1ext: EXT_SRGB, bpp: 4},\n 'rgba8snorm': {gl: GL.RGBA8_SNORM, b: 4, c: 4},\n 'rgba8uint': {gl: GL.RGBA8UI, b: 4, c: 4, bpp: 4},\n 'rgba8sint': {gl: GL.RGBA8I, b: 4, c: 4, bpp: 4},\n // reverse colors, webgpu only\n 'bgra8unorm': {b: 4, c: 4},\n 'bgra8unorm-srgb': {b: 4, c: 4},\n\n 'rg16uint': {gl: GL.RG16UI, b: 4, c: 1, bpp: 4},\n 'rg16sint': {gl: GL.RG16I, b: 4, c: 2, bpp: 4},\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n 'rg16float': {gl: GL.RG16F, bpp: 4, b: 4, c: 2, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl', renderbuffer: true},\n 'rg16unorm-webgl': {gl: GL.RG16_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n 'rg16snorm-webgl': {gl: GL.RG16_SNORM_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n 'r32uint': {gl: GL.R32UI, b: 4, c: 1, bpp: 4, renderbuffer: true},\n 'r32sint': {gl: GL.R32I, b: 4, c: 1, bpp: 4, renderbuffer: true},\n 'r32float': {gl: GL.R32F, bpp: 4, b: 4, c: 1, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n\n // Packed 32-bit formats\n 'rgb9e5ufloat': {gl: GL.RGB9_E5, b: 4, c: 3, p: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rg11b10ufloat': {gl: GL.R11F_G11F_B10F, b: 4, c: 3, p: 1,render: 'texture-renderable-float32-webgl', renderbuffer: true},\n 'rgb10a2unorm': {gl: GL.RGB10_A2, b: 4, c: 4, p: 1, renderbuffer: true},\n // webgl2 only\n 'rgb10a2unorm-webgl': {b: 4, c: 4, gl: GL.RGB10_A2UI, p: 1, wgpu: false, bpp: 4, renderbuffer: true},\n\n // 48-bit formats\n 'rgb16unorm-webgl': {gl: GL.RGB16_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n 'rgb16snorm-webgl': {gl: GL.RGB16_SNORM_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // 64-bit formats\n 'rg32uint': {gl: GL.RG32UI, b: 8, c: 2, renderbuffer: true},\n 'rg32sint': {gl: GL.RG32I, b: 8, c: 2, renderbuffer: true},\n 'rg32float': {gl: GL.RG32F, b: 8, c: 2, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl', renderbuffer: true},\n 'rgba16uint': {gl: GL.RGBA16UI, b: 8, c: 4, renderbuffer: true},\n 'rgba16sint': {gl: GL.RGBA16I, b: 8, c: 4, renderbuffer: true},\n 'rgba16float': {gl: GL.RGBA16F, gl1: GL.RGBA, b: 8, c: 4, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rgba16unorm-webgl': {gl: GL.RGBA16_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl', renderbuffer: true, x: EXT_TEXTURE_NORM16},\n 'rgba16snorm-webgl': {gl: GL.RGBA16_SNORM_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // 96-bit formats (deprecated!)\n 'rgb32float-webgl': {gl: GL.RGB32F, gl1: GL.RGB, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl',\n gl2ext: EXT_FLOAT_RENDER_WEBGL2, gl1ext: EXT_FLOAT_WEBGL1, // WebGL1 render buffers are supported with GL.RGB32F\n dataFormat: GL.RGB, types: [GL.FLOAT]},\n \n // 128-bit formats\n 'rgba32uint': {gl: GL.RGBA32UI, b: 16, c: 4, renderbuffer: true},\n 'rgba32sint': {gl: GL.RGBA32I, b: 16, c: 4, renderbuffer: true},\n 'rgba32float': {gl: GL.RGBA32F, b: 16, c: 4, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl', renderbuffer: true},\n\n // Depth and stencil formats\n 'stencil8': {gl: GL.STENCIL_INDEX8, gl1: GL.STENCIL_INDEX8, b: 1, c: 1, attachment: GL.STENCIL_ATTACHMENT, renderbuffer: true}, // 8 stencil bits\n\n 'depth16unorm': {gl: GL.DEPTH_COMPONENT16, gl1: GL.DEPTH_COMPONENT16, b: 2, c: 1, attachment: GL.DEPTH_ATTACHMENT, renderbuffer: true}, // 16 depth bits\n 'depth24plus': {gl: GL.DEPTH_COMPONENT24, b: 3, c: 1, attachment: GL.DEPTH_ATTACHMENT},\n 'depth32float': {gl: GL.DEPTH_COMPONENT32F, b: 4, c: 1, attachment: GL.DEPTH_ATTACHMENT, renderbuffer: true},\n\n // The depth component of the \"depth24plus\" and \"depth24plus-stencil8\" formats may be implemented as either a 24-bit depth value or a \"depth32float\" value.\n 'depth24plus-stencil8': {gl: GL.DEPTH_STENCIL, gl1: GL.DEPTH_STENCIL, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true, depthTexture: true},\n // \"depth24unorm-stencil8\" feature\n 'depth24unorm-stencil8': {gl: GL.DEPTH24_STENCIL8, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true},\n // \"depth32float-stencil8\" feature\n 'depth32float-stencil8': {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true},\n\n // BC compressed formats: check device.features.has(\"texture-compression-bc\");\n\n 'bc1-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgb-unorm-srgb-webgl': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n\n 'bc1-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc2-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc2-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc3-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc3-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc4-r-unorm': {gl: GL.COMPRESSED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc4-r-snorm': {gl: GL.COMPRESSED_SIGNED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-unorm': {gl: GL.COMPRESSED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-snorm': {gl: GL.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc6h-rgb-ufloat': {gl: GL.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc6h-rgb-float': {gl: GL.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm': {gl: GL.COMPRESSED_RGBA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n\n // WEBGL_compressed_texture_etc: device.features.has(\"texture-compression-etc2\")\n // Note: Supposedly guaranteed availability compressed formats in WebGL2, but through CPU decompression\n\n 'etc2-rgb8unorm': {gl: GL.COMPRESSED_RGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm': {gl: GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm-srgb': {gl: GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgba8unorm': {gl: GL.COMPRESSED_RGBA8_ETC2_EAC, f: texture_compression_etc2},\n 'etc2-rgba8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, f: texture_compression_etc2},\n\n 'eac-r11unorm': {gl: GL.COMPRESSED_R11_EAC, f: texture_compression_etc2},\n 'eac-r11snorm': {gl: GL.COMPRESSED_SIGNED_R11_EAC, f: texture_compression_etc2},\n 'eac-rg11unorm': {gl: GL.COMPRESSED_RG11_EAC, f: texture_compression_etc2},\n 'eac-rg11snorm': {gl: GL.COMPRESSED_SIGNED_RG11_EAC, f: texture_compression_etc2},\n\n // X_ASTC compressed formats: device.features.has(\"texture-compression-astc\")\n\n 'astc-4x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-4x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x12_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, f: texture_compression_astc},\n\n // WEBGL_compressed_texture_pvrtc\n\n 'pvrtc-rgb4unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba4unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rbg2unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba2unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n\n // WEBGL_compressed_texture_etc1\n\n 'etc1-rbg-unorm-webgl': {gl: GL.COMPRESSED_RGB_ETC1_WEBGL, f: texture_compression_etc1_webgl},\n\n // WEBGL_compressed_texture_atc\n\n 'atc-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_ATC_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgba-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgbai-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL, f: texture_compression_atc_webgl}\n};\n\n/** Legal combinations for internalFormat, format and type *\n// [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1ext: DEPTH},\n// [GL.DEPTH_STENCIL]: {gl1ext: DEPTH},\n// Sized texture format\n// R\n[GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RG\n[GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGB\n[GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGBA\n\n[GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},\n[GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},\n[GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},\n[GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}\n*/\n\n/* This table is now baked into the above table\ntype RenderbufferFormat = {\n bpp: number;\n gl2?: boolean;\n ext?: string;\n};\n\nexport const RENDERBUFFER_FORMATS: Record<string, RenderbufferFormat> = {\n [GL.DEPTH_COMPONENT16]: {bpp: 2}, // 16 depth bits.\n // TODO - Not clear which webgpu value to map this to.\n // [GL.DEPTH_COMPONENT24]: {gl2: true, bpp: 3},\n [GL.DEPTH_COMPONENT32F]: {gl2: true, bpp: 4},\n\n [GL.STENCIL_INDEX8]: {bpp: 1}, // 8 stencil bits.\n\n [GL.DEPTH_STENCIL]: {bpp: 4},\n [GL.DEPTH24_STENCIL8]: {gl2: true, bpp: 4},\n [GL.DEPTH32F_STENCIL8]: {gl2: true, bpp: 5},\n\n // When using a WebGL 1 context, color renderbuffer formats are limited\n [GL.RGBA4]: {gl2: true, bpp: 2},\n [GL.RGB565]: {gl2: true, bpp: 2},\n [GL.RGB5_A1]: {gl2: true, bpp: 2},\n\n // When using a WebGL 2 context, the following values are available additionally:\n [GL.R8]: {gl2: true, bpp: 1},\n [GL.R8UI]: {gl2: true, bpp: 1},\n [GL.R8I]: {gl2: true, bpp: 1},\n [GL.R16UI]: {gl2: true, bpp: 2},\n [GL.R16I]: {gl2: true, bpp: 2},\n [GL.R32UI]: {gl2: true, bpp: 4},\n [GL.R32I]: {gl2: true, bpp: 4},\n [GL.RG8]: {gl2: true, bpp: 2},\n [GL.RG8UI]: {gl2: true, bpp: 2},\n [GL.RG8I]: {gl2: true, bpp: 2},\n [GL.RG16UI]: {gl2: true, bpp: 4},\n [GL.RG16I]: {gl2: true, bpp: 4},\n [GL.RG32UI]: {gl2: true, bpp: 8},\n [GL.RG32I]: {gl2: true, bpp: 8},\n [GL.RGB8]: {gl2: true, bpp: 3},\n [GL.RGBA8]: {gl2: true, bpp: 4},\n // [GL.SRGB8_ALPHA8]: {gl2: true, gl1: SRGB}, // When using the EXT_sRGB WebGL1 extension\n [GL.RGB10_A2]: {gl2: true, bpp: 4},\n [GL.RGBA8UI]: {gl2: true, bpp: 4},\n [GL.RGBA8I]: {gl2: true, bpp: 4},\n [GL.RGB10_A2UI]: {gl2: true, bpp: 4},\n [GL.RGBA16UI]: {gl2: true, bpp: 8},\n [GL.RGBA16I]: {gl2: true, bpp: 8},\n [GL.RGBA32I]: {gl2: true, bpp: 16},\n [GL.RGBA32UI]: {gl2: true, bpp: 16},\n\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n [GL.R16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 2},\n [GL.RG16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RGBA16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},\n [GL.R32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RG32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},\n // TODO - can't get WEBGL_color_buffer_float to work on renderbuffers\n [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 16},\n // [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, gl1: EXT_FLOAT_WEBGL1},\n [GL.R11F_G11F_B10F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4}\n};\n*/\n\n/** @deprecated should be removed */\nconst DATA_FORMAT_CHANNELS = {\n [GL.RED]: 1,\n [GL.RED_INTEGER]: 1,\n [GL.RG]: 2,\n [GL.RG_INTEGER]: 2,\n [GL.RGB]: 3,\n [GL.RGB_INTEGER]: 3,\n [GL.RGBA]: 4,\n [GL.RGBA_INTEGER]: 4,\n [GL.DEPTH_COMPONENT]: 1,\n [GL.DEPTH_STENCIL]: 1,\n [GL.ALPHA]: 1,\n [GL.LUMINANCE]: 1,\n [GL.LUMINANCE_ALPHA]: 2\n};\n\n/** @deprecated should be removed */\nconst TYPE_SIZES = {\n [GL.FLOAT]: 4,\n [GL.UNSIGNED_INT]: 4,\n [GL.INT]: 4,\n [GL.UNSIGNED_SHORT]: 2,\n [GL.SHORT]: 2,\n [GL.HALF_FLOAT]: 2,\n [GL.BYTE]: 1,\n [GL.UNSIGNED_BYTE]: 1\n};\n\n// FUNCTIONS\n\n/** Checks if a texture format is supported */\nexport function isTextureFormatSupported(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return false;\n }\n // Check that we have a GL constant\n if (isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined) {\n return false;\n }\n // Check extensions\n const extension = info.x || (isWebGL2(gl) ? info.gl2ext || info.gl1ext : info.gl1ext);\n if (extension) {\n return Boolean(gl.getExtension(extension));\n }\n // if (info.gl1 === undefined && info.gl2 === undefined) {\n // // No info - always supported\n // }\n return true;\n}\n\nexport function isRenderbufferFormatSupported(gl: WebGLRenderingContext, format: TextureFormat): boolean {\n // Note: Order is important since the function call initializes extensions.\n return isTextureFormatSupported(gl, format) && TEXTURE_FORMATS[format]?.renderbuffer;\n}\n\n/**\n * Map WebGL texture formats (GL constants) to WebGPU-style TextureFormat strings\n */\nexport function convertGLToTextureFormat(format: GL | TextureFormat): TextureFormat {\n if (typeof format === 'string') {\n return format;\n }\n const entry = Object.entries(TEXTURE_FORMATS).find(\n ([, entry]) => entry.gl === format || entry.gl1 === format\n );\n if (!entry) {\n throw new Error(`Unknown texture format ${format}`);\n }\n return entry[0] as TextureFormat;\n}\n\n/**\n * Map WebGPU style texture format strings to GL constants\n */\nexport function convertTextureFormatToGL(format: TextureFormat, isWebGL2: boolean): GL | undefined {\n const formatInfo = TEXTURE_FORMATS[format];\n const webglFormat = isWebGL2 ? formatInfo?.gl : formatInfo?.gl1;\n if (webglFormat === undefined) {\n throw new Error(`Unsupported texture format ${format}`);\n }\n return webglFormat;\n}\n\n/** Checks if a texture format is supported */\nexport function getTextureFormatSupport(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): {\n supported: boolean;\n filterable?: boolean;\n renderable?: boolean;\n blendable?: boolean;\n storable?: boolean;\n} {\n const format = convertGLToTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return {supported: false};\n }\n // let decoded;\n // try {\n // decoded = decodeTextureFormat(format);\n // } catch {}\n\n // Support Check that we have a GL constant\n let supported = isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined;\n supported = supported && checkTextureFeatures(gl, [info.f]);\n\n // Filtering\n // const filterable = info.filter\n // ? checkTextureFeatures(gl, [info.filter])\n // : decoded && !decoded.signed;\n // const renderable = info.filter\n // ? checkTextureFeatures(gl, [info.render])\n // : decoded && !decoded.signed;\n\n return {\n supported,\n renderable: supported && checkTextureFeatures(gl, [info.render]),\n filterable: supported && checkTextureFeatures(gl, [info.filter]),\n blendable: false, // tod,\n storable: false\n };\n}\n\n/** Checks whether linear filtering (interpolated sampling) is available for floating point textures */\nexport function isTextureFormatFilterable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n try {\n const decoded = decodeTextureFormat(format);\n if (decoded.signed) {\n return false;\n }\n } catch {\n return false;\n }\n if (format.endsWith('32float')) {\n return Boolean(gl.getExtension('OES_texture_float_linear'));\n }\n if (format.endsWith('16float')) {\n return Boolean(gl.getExtension('OES_texture_half_float_linear'));\n }\n // if (typeof format === 'string') {\n // if (format === 'rgba32float') {\n // return gl.device.features.has('texture-renderable-rgba32float-webgl');\n // }\n // if (format.endsWith('32float')) {\n // return gl.device.features.has('texture-renderable-float32-webgl');\n // }\n // if (format.endsWith('16float')) {\n // return gl.device.features.has('texture-renderable-float16-webgl');\n // }\n // }\n return true;\n}\n\nexport function isTextureFormatRenderable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n if (typeof format === 'number') {\n return false; // isTextureFormatFilterableWebGL(gl, format);\n }\n // TODO depends on device...\n return true;\n}\n\nexport function getWebGLTextureParameters(formatOrGL: TextureFormat | GL, isWebGL2: boolean) {\n const format = convertGLToTextureFormat(formatOrGL);\n const webglFormat = convertTextureFormatToGL(format, isWebGL2);\n const decoded = decodeTextureFormat(format);\n return {\n format: webglFormat,\n dataFormat: getWebGLPixelDataFormat(\n decoded.format,\n decoded.integer,\n decoded.normalized,\n webglFormat\n ),\n // depth formats don't have a type\n type: decoded.dataType ? getGLFromVertexType(decoded.dataType) : GL.UNSIGNED_BYTE,\n // @ts-expect-error\n compressed: decoded.compressed\n };\n}\n\nexport function getDepthStencilAttachmentWebGL(\n format: TextureFormat\n): GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT {\n const info = TEXTURE_FORMATS[format];\n if (!info?.attachment) {\n throw new Error(`${format} is not a depth stencil format`);\n }\n return info.attachment;\n}\n\n/**\n * function to test if Float 32 bit format texture can be bound as color attachment\n * @todo Generalize to check arbitrary formats?\n */\nexport function _checkFloat32ColorAttachment(\n gl: WebGLRenderingContext,\n internalFormat = gl.RGBA,\n srcFormat = GL.RGBA,\n srcType = GL.UNSIGNED_BYTE\n) {\n let texture: WebGLTexture | null = null;\n let framebuffer: WebGLFramebuffer | null = null;\n try {\n texture = gl.createTexture();\n gl.bindTexture(GL.TEXTURE_2D, texture);\n\n const level = 0;\n const width = 1;\n const height = 1;\n const border = 0;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n width,\n height,\n border,\n srcFormat,\n srcType,\n pixel\n );\n\n framebuffer = gl.createFramebuffer();\n gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) as GL === GL.FRAMEBUFFER_COMPLETE;\n\n gl.bindTexture(GL.TEXTURE_2D, null);\n return status;\n } finally {\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(framebuffer);\n }\n}\n\n/** TODO - VERY roundabout legacy way of calculating bytes per pixel */\nexport function getTextureFormatBytesPerPixel(\n formatOrGL: TextureFormat | GL,\n isWebGL2: boolean\n): number {\n const format = convertGLToTextureFormat(formatOrGL);\n const params = getWebGLTextureParameters(format, isWebGL2);\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;\n const channelSize = TYPE_SIZES[params.type] || 1;\n return channels * channelSize;\n}\n\n// DATA TYPE HELPERS\n\nfunction getWebGLPixelDataFormat(\n dataFormat: string,\n integer: boolean,\n normalized: boolean,\n format: GL\n): GL {\n // WebGL1 formats use same internalFormat\n if (format === GL.RGBA || format === GL.RGB) {\n return format;\n }\n // prettier-ignore\n switch (dataFormat) {\n case 'r': return integer && !normalized ? GL.RED_INTEGER : GL.RED;\n case 'rg': return integer && !normalized ? GL.RG_INTEGER : GL.RG;\n case 'rgb': return integer && !normalized ? GL.RGB_INTEGER : GL.RGB;\n case 'rgba': return integer && !normalized ? GL.RGBA_INTEGER : GL.RGBA;\n default: return GL.RGBA;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-formats.js","names":["getVertexFormatFromGL","type","components","base","getVertexTypeFromGL","Error","String","normalized","arguments","length","undefined","getGLFromVertexType","dataType"],"sources":["../../../src/adapter/converters/vertex-formats.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {GL} from '@luma.gl/constants';\nimport {VertexFormat, VertexType} from '@luma.gl/core';\n\ntype GLDataType = \n | GL.UNSIGNED_BYTE\n | GL.BYTE\n | GL.UNSIGNED_SHORT\n | GL.SHORT\n | GL.UNSIGNED_INT\n | GL.INT\n | GL.HALF_FLOAT\n | GL.FLOAT;\n\n\n/** Get vertex format from GL constants */\nexport function getVertexFormatFromGL(type: GLDataType, components: 1 | 2 | 3 | 4): VertexFormat {\n const base = getVertexTypeFromGL(type);\n // prettier-ignore\n switch (components) {\n // @ts-expect-error TODO deal with lack of formats\n case 1: return base;\n case 2: return `${base}x2`;\n // @ts-expect-error TODO deal with lack of formats\n case 3: return `${base}x3`;\n case 4: return `${base}x4`;\n }\n // @ts-ignore unreachable\n throw new Error(String(components));\n}\n\n/** Get data type from GL constants */\nexport function getVertexTypeFromGL(type: GLDataType, normalized = false): VertexType {\n // prettier-ignore\n switch (type) {\n // WebGPU does not support normalized 32 bit integer attributes\n case GL.INT: return normalized ? 'sint32' : 'sint32';\n case GL.UNSIGNED_INT: return normalized ? 'uint32' : 'uint32';\n case GL.SHORT: return normalized ? 'sint16' : 'unorm16';\n case GL.UNSIGNED_SHORT: return normalized ? 'uint16' : 'unorm16';\n case GL.BYTE: return normalized ? 'sint8' : 'snorm16';\n case GL.UNSIGNED_BYTE: return normalized ? 'uint8' : 'unorm8';\n case GL.FLOAT: return 'float32';\n case GL.HALF_FLOAT: return 'float16';\n }\n // @ts-ignore unreachable\n throw new Error(String(type));\n}\n\nexport function getGLFromVertexType(\n dataType: VertexType\n):\n | GL.UNSIGNED_BYTE\n | GL.BYTE\n | GL.UNSIGNED_SHORT\n | GL.SHORT\n | GL.UNSIGNED_INT\n | GL.INT\n | GL.HALF_FLOAT\n | GL.FLOAT {\n // prettier-ignore\n switch (dataType) {\n case 'uint8': return GL.UNSIGNED_BYTE;\n case 'sint8': return GL.BYTE;\n case 'unorm8': return GL.UNSIGNED_BYTE;\n case 'snorm8': return GL.BYTE;\n case 'uint16': return GL.UNSIGNED_SHORT;\n case 'sint16': return GL.SHORT;\n case 'unorm16': return GL.UNSIGNED_SHORT;\n case 'snorm16': return GL.SHORT;\n case 'uint32': return GL.UNSIGNED_INT;\n case 'sint32': return GL.INT;\n // WebGPU does not support normalized 32 bit integer attributes\n // case 'unorm32': return GL.UNSIGNED_INT;\n // case 'snorm32': return GL.INT;\n case 'float16': return GL.HALF_FLOAT;\n case 'float32': return GL.FLOAT;\n }\n // @ts-ignore unreachable\n throw new Error(String(dataType));\n}\n"],"mappings":"AAkBA,OAAO,SAASA,qBAAqBA,CAACC,IAAgB,EAAEC,UAAyB,EAAgB;EAC/F,MAAMC,IAAI,GAAGC,mBAAmB,CAACH,IAAI,CAAC;EAEtC,QAAQC,UAAU;IAEhB,KAAK,CAAC;MAAE,OAAOC,IAAI;IACnB,KAAK,CAAC;MAAE,OAAQ,GAAEA,IAAK,IAAG;IAE1B,KAAK,CAAC;MAAE,OAAQ,GAAEA,IAAK,IAAG;IAC1B,KAAK,CAAC;MAAE,OAAQ,GAAEA,IAAK,IAAG;EAC5B;EAEA,MAAM,IAAIE,KAAK,CAACC,MAAM,CAACJ,UAAU,CAAC,CAAC;AACrC;AAGA,OAAO,SAASE,mBAAmBA,CAACH,IAAgB,EAAkC;EAAA,IAAhCM,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAEtE,QAAQP,IAAI;IAEV;MAAa,OAAOM,UAAU,GAAG,QAAQ,GAAG,QAAQ;IACpD;MAAsB,OAAOA,UAAU,GAAG,QAAQ,GAAG,QAAQ;IAC7D;MAAe,OAAOA,UAAU,GAAG,QAAQ,GAAG,SAAS;IACvD;MAAwB,OAAOA,UAAU,GAAG,QAAQ,GAAG,SAAS;IAChE;MAAc,OAAOA,UAAU,GAAG,OAAO,GAAG,SAAS;IACrD;MAAuB,OAAOA,UAAU,GAAG,OAAO,GAAG,QAAQ;IAC7D;MAAe,OAAO,SAAS;IAC/B;MAAoB,OAAO,SAAS;EACtC;EAEA,MAAM,IAAIF,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;AAC/B;AAEA,OAAO,SAASU,mBAAmBA,CACjCC,QAAoB,EAST;EAEX,QAAQA,QAAQ;IACd,KAAK,OAAO;MAAE;IACd,KAAK,OAAO;MAAE;IACd,KAAK,QAAQ;MAAE;IACf,KAAK,QAAQ;MAAE;IACf,KAAK,QAAQ;MAAE;IACf,KAAK,QAAQ;MAAE;IACf,KAAK,SAAS;MAAE;IAChB,KAAK,SAAS;MAAE;IAChB,KAAK,QAAQ;MAAE;IACf,KAAK,QAAQ;MAAE;IAIf,KAAK,SAAS;MAAE;IAChB,KAAK,SAAS;MAAE;EAClB;EAEA,MAAM,IAAIP,KAAK,CAACC,MAAM,CAACM,QAAQ,CAAC,CAAC;AACnC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"device-features.js","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","arguments","length","undefined","source","shader","createShader","Error","shaderSource","compileShader","canCompile","getShaderParameter","deleteShader"],"sources":["../../../src/adapter/device-helpers/device-features.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// 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/core';\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 'transform-feedback-webgl2': [false, true],\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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"device-limits.js","names":["getWebGL2Context","getDeviceLimits","gl","gl2","maxTextureDimension1D","maxTextureDimension2D","getParameter","maxTextureDimension3D","maxTextureArrayLayers","maxBindGroups","maxDynamicUniformBuffersPerPipelineLayout","maxDynamicStorageBuffersPerPipelineLayout","maxSampledTexturesPerShaderStage","maxSamplersPerShaderStage","maxStorageBuffersPerShaderStage","maxStorageTexturesPerShaderStage","maxUniformBuffersPerShaderStage","maxUniformBufferBindingSize","maxStorageBufferBindingSize","minUniformBufferOffsetAlignment","minStorageBufferOffsetAlignment","maxVertexBuffers","maxVertexAttributes","maxVertexBufferArrayStride","maxInterStageShaderComponents","maxComputeWorkgroupStorageSize","maxComputeInvocationsPerWorkgroup","maxComputeWorkgroupSizeX","maxComputeWorkgroupSizeY","maxComputeWorkgroupSizeZ","maxComputeWorkgroupsPerDimension","getWebGLLimits","get","pname","get2","defaultValue"],"sources":["../../../src/adapter/device-helpers/device-limits.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {DeviceLimits} from '@luma.gl/core';\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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-device-info.js","names":["isWebGL2","getDeviceInfo","gl","vendorMasked","getParameter","rendererMasked","ext","getExtension","vendorUnmasked","UNMASKED_VENDOR_WEBGL","rendererUnmasked","UNMASKED_RENDERER_WEBGL","vendor","renderer","version","gpu","identifyGPUVendor","gpuBackend","identifyGPUBackend","gpuType","identifyGPUType","shadingLanguage","shadingLanguageVersion","type","exec","gpuVendor"],"sources":["../../../src/adapter/device-helpers/get-device-info.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {DeviceInfo} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\n\n/** @returns strings identifying the GPU vendor and driver. */\nexport function getDeviceInfo(gl: WebGLRenderingContext): DeviceInfo {\n // \"Masked\" info is always available, but don't contain much useful information\n const vendorMasked = gl.getParameter(GL.VENDOR);\n const rendererMasked = gl.getParameter(GL.RENDERER);\n\n // If we are lucky, unmasked info is available\n // https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n const vendorUnmasked = gl.getParameter(ext ? ext.UNMASKED_VENDOR_WEBGL : GL.VENDOR);\n const rendererUnmasked = gl.getParameter(ext ? ext.UNMASKED_RENDERER_WEBGL : GL.RENDERER);\n const vendor = vendorUnmasked || vendorMasked;\n const renderer = rendererUnmasked || rendererMasked;\n\n // Driver version\n const version = gl.getParameter(GL.VERSION) as string;\n\n // \"Sniff\" the GPU type and backend from the info. This works best if unmasked info is available.\n const gpu = identifyGPUVendor(vendor, renderer);\n const gpuBackend = identifyGPUBackend(vendor, renderer);\n const gpuType = identifyGPUType(vendor, renderer);\n\n // Determine GLSL version\n // For now, skip parsing of the long version string, just use context type below to deduce version\n // const version = gl.getParameter(GL.SHADING_LANGUAGE_VERSION) as string;\n // const shadingLanguageVersion = parseGLSLVersion(version);\n const shadingLanguage = 'glsl';\n const shadingLanguageVersion = isWebGL2(gl) ? 300 : 100\n\n return {\n type: isWebGL2(gl) ? 'webgl2' : 'webgl',\n gpu,\n gpuType,\n gpuBackend,\n vendor,\n renderer,\n version,\n shadingLanguage,\n shadingLanguageVersion\n };\n}\n\n/** \"Sniff\" the GPU type from the info. This works best if unmasked info is available. */\nfunction identifyGPUVendor(vendor: string, renderer: string): 'nvidia' | 'intel' | 'apple' | 'amd' | 'software' | 'unknown' {\n if ((/NVIDIA/i.exec(vendor)) || (/NVIDIA/i.exec(renderer))) {\n return 'nvidia';\n }\n if ((/INTEL/i.exec(vendor)) || (/INTEL/i.exec(renderer))) {\n return 'intel';\n }\n if ((/Apple/i.exec(vendor)) || (/Apple/i.exec(renderer))) {\n return 'apple';\n }\n if (\n (/AMD/i.exec(vendor)) ||\n (/AMD/i.exec(renderer)) ||\n (/ATI/i.exec(vendor)) ||\n (/ATI/i.exec(renderer))\n ) {\n return 'amd';\n }\n if ((/SwiftShader/i.exec(vendor)) || (/SwiftShader/i.exec(renderer))) {\n return 'software';\n }\n \n return 'unknown';\n}\n\n/** \"Sniff\" the GPU backend from the info. This works best if unmasked info is available. */\nfunction identifyGPUBackend(vendor: string, renderer: string): 'opengl' | 'metal' | 'unknown' {\n if ((/Metal/i.exec(vendor)) || (/Metal/i.exec(renderer))) {\n return 'metal';\n }\n if ((/ANGLE/i.exec(vendor)) || (/ANGLE/i.exec(renderer))) {\n return 'opengl';\n } \n return 'unknown';\n}\n\nfunction identifyGPUType(vendor: string, renderer: string): 'discrete' | 'integrated' | 'cpu' | 'unknown' {\n if ((/SwiftShader/i.exec(vendor)) || (/SwiftShader/i.exec(renderer))) {\n return 'cpu';\n }\n\n const gpuVendor = identifyGPUVendor(vendor, renderer);\n switch (gpuVendor) {\n case 'intel':\n return 'integrated';\n case 'software':\n return 'cpu';\n case 'unknown':\n return 'unknown';\n default:\n return 'discrete';\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"is-old-ie.d.ts","sourceRoot":"","sources":["../../../src/adapter/device-helpers/is-old-ie.ts"],"names":[],"mappings":"AAIA,wBAAgB,OAAO,CAAC,IAAI,KAAK,WAShC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export function isOldIE() {
|
|
2
|
-
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
3
|
-
const navigator = typeof window !== 'undefined' ? window.navigator || {} : {};
|
|
4
|
-
const userAgent = opts.userAgent || navigator.userAgent || '';
|
|
5
|
-
const isMSIE = userAgent.indexOf('MSIE ') !== -1;
|
|
6
|
-
const isTrident = userAgent.indexOf('Trident/') !== -1;
|
|
7
|
-
return isMSIE || isTrident;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=is-old-ie.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"is-old-ie.js","names":["isOldIE","opts","arguments","length","undefined","navigator","window","userAgent","isMSIE","indexOf","isTrident"],"sources":["../../../src/adapter/device-helpers/is-old-ie.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// opts allows user agent to be overridden for testing\nexport function isOldIE(opts = {}) {\n const navigator = typeof window !== 'undefined' ? window.navigator || {} : {};\n // @ts-expect-error\n const userAgent = opts.userAgent || navigator.userAgent || '';\n // We only care about older versions of IE (IE 11 and below). Newer versions of IE (Edge)\n // have much better web standards support.\n const isMSIE = userAgent.indexOf('MSIE ') !== -1;\n const isTrident = userAgent.indexOf('Trident/') !== -1;\n return isMSIE || isTrident;\n}\n"],"mappings":"AAIA,OAAO,SAASA,OAAOA,CAAA,EAAY;EAAA,IAAXC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAC/B,MAAMG,SAAS,GAAG,OAAOC,MAAM,KAAK,WAAW,GAAGA,MAAM,CAACD,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;EAE7E,MAAME,SAAS,GAAGN,IAAI,CAACM,SAAS,IAAIF,SAAS,CAACE,SAAS,IAAI,EAAE;EAG7D,MAAMC,MAAM,GAAGD,SAAS,CAACE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;EAChD,MAAMC,SAAS,GAAGH,SAAS,CAACE,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;EACtD,OAAOD,MAAM,IAAIE,SAAS;AAC5B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decode-webgl-types.js","names":["isSamplerUniform","type","SAMPLER_TYPES","includes","COMPOSITE_GL_TYPES","decodeGLUniformType","glUniformType","typeAndSize","Error","glType","components","format","decodeGLAttributeType","glAttributeType","shaderType","vertexFormat","attributeType","decomposeCompositeGLDataType","compositeGLDataType","getCompositeGLDataType","compType","compComponents","name","Number"],"sources":["../../../src/adapter/helpers/decode-webgl-types.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {ShaderUniformType, ShaderAttributeType, VertexFormat} from '@luma.gl/core';\nimport {GL, GLUniformType, GLSamplerType, GLCompositeType, GLDataType} from '@luma.gl/constants';\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 [GLDataType, number, string, ShaderUniformType, 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', 'float32'],\n [GL.BOOL_VEC2]: [GL.FLOAT, 2, 'bvec2', 'vec2<f32>', 'float32x2'],\n [GL.BOOL_VEC3]: [GL.FLOAT, 3, 'bvec3', 'vec3<f32>', 'float32x3'],\n [GL.BOOL_VEC4]: [GL.FLOAT, 4, 'bvec4', 'vec4<f32>', 'float32x4'],\n\n // TODO - are sizes/components below correct?\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 decodeGLUniformType(\n glUniformType: GL\n): {format: ShaderUniformType; components: number; glType: GLDataType} {\n const typeAndSize = COMPOSITE_GL_TYPES[glUniformType];\n if (!typeAndSize) {\n throw new Error('uniform');\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 decodeGLAttributeType(glAttributeType: GL): {\n attributeType: ShaderAttributeType;\n vertexFormat: VertexFormat;\n components: number;\n // glType: GLDataType;\n} {\n const typeAndSize = COMPOSITE_GL_TYPES[glAttributeType];\n if (!typeAndSize) {\n throw new Error('attribute')\n }\n const [, components, , shaderType, vertexFormat] = typeAndSize;\n // TODO sanity - if (shaderType.startsWith('mat' ...))\n const attributeType = shaderType as unknown as ShaderAttributeType\n return {attributeType, vertexFormat, components}; // , glType};\n}\n\n/** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */\nexport function decomposeCompositeGLDataType(\n compositeGLDataType: GLCompositeType\n): {type: GLDataType; components: number} | null {\n const typeAndSize = COMPOSITE_GL_TYPES[compositeGLDataType];\n if (!typeAndSize) {\n return null;\n }\n const [type, components] = typeAndSize;\n return {type, components};\n}\n\nexport function getCompositeGLDataType(type: GL, components): {glType: GLDataType; 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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-shader-layout.js","names":["isWebGL2","Accessor","decodeGLUniformType","decodeGLAttributeType","isSamplerUniform","getShaderLayout","gl","program","shaderLayout","attributes","bindings","readAttributeDeclarations","uniformBlocks","readUniformBlocks","uniformBlock","uniforms","map","uniform","name","format","byteOffset","byteStride","arrayLength","push","type","location","visibility","vertex","fragment","minBindingSize","byteLength","readUniformBindings","textureUnit","viewDimension","sampleType","getSamplerInfo","length","varyings","readVaryings","count","getProgramParameter","index","activeInfo","getActiveAttrib","Error","compositeType","getAttribLocation","attributeType","stepMode","test","sort","a","b","gl2","getTransformFeedbackVarying","size","glType","components","accessor","varying","uniformCount","i","getActiveUniform","rawName","isArray","parseUniformName","webglLocation","getUniformLocation","uniformInfo","j","elementName","arrayElementUniformInfo","getBlockParameter","blockIndex","pname","getActiveUniformBlockParameter","blockCount","blockInfo","getActiveUniformBlockName","uniformIndices","uniformType","getActiveUniforms","uniformArrayLength","uniformOffset","uniformStride","SAMPLER_UNIFORMS_GL_TO_GPU","sampler","UNIFORM_NAME_REGEXP","matches","exec","Boolean"],"sources":["../../../src/adapter/helpers/get-shader-layout.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {\n ShaderLayout,\n UniformBinding,\n UniformBlockBinding,\n AttributeDeclaration,\n VaryingBinding\n} from '@luma.gl/core';\n\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 {decodeGLUniformType, decodeGLAttributeType, isSamplerUniform} from './decode-webgl-types';\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 getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {\n const shaderLayout: ShaderLayout = {\n attributes: [],\n bindings: []\n };\n\n shaderLayout.attributes = readAttributeDeclarations(gl, program);\n\n // Uniform blocks\n const uniformBlocks: UniformBlockBinding[] = readUniformBlocks(gl, program);\n for (const uniformBlock of 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 const uniforms: UniformBinding[] = readUniformBindings(gl, program);\n let textureUnit = 0;\n for (const uniform of 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 if (uniforms.length) {\n shaderLayout.uniforms = uniforms;\n }\n\n // Varyings\n const varyings: VaryingBinding[] = readVaryings(gl, program);\n // Note - samplers are always in unform bindings, even if uniform blocks are used\n if (varyings?.length) {\n shaderLayout.varyings = varyings;\n }\n\n return shaderLayout;\n}\n\n// HELPERS\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 readAttributeDeclarations(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): AttributeDeclaration[] {\n const attributes: AttributeDeclaration[] = [];\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 `gl_InstanceID` location will be < 0\n if (location >= 0) {\n const {attributeType} = decodeGLAttributeType(compositeType);\n\n // Whether an attribute is instanced is essentially fixed by the structure of the shader code, \n // so it is arguably a static property of the shader.\n // There is no hint in the shader declarations\n // Heuristic: Any attribute name containing the word \"instance\" will be assumed to be instanced\n const stepMode = /instance/i.test(name) ? 'instance' : 'vertex';\n\n attributes.push({\n name,\n location,\n stepMode,\n type: attributeType,\n // size - for arrays, size is the number of elements in the array\n });\n }\n }\n\n // Sort by declaration order\n attributes.sort((a: AttributeDeclaration, b: AttributeDeclaration) => 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} = decodeGLUniformType(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 * @note In WebGL, \"active\" just means that unused (inactive) blocks may have been 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 =\n (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: decodeGLUniformType(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\n/**\n * TOOD - compare with a above, confirm copy, then delete\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*/\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 const 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 = UNIFORM_NAME_REGEXP.exec(name);\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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-shader-compiler-log.js","names":["parseShaderCompilerLog","errLog","lines","split","messages","line","length","segments","messageType","message","push","trim","type","getMessageType","lineNum","linePos","linePosition","lineNumber","rest","parseInt","isNaN","join","MESSAGE_TYPES","lowerCaseType","toLowerCase","includes"],"sources":["../../../src/adapter/helpers/parse-shader-compiler-log.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {CompilerMessage} from '@luma.gl/core';\n\n/**\n * Parse a WebGL-format GLSL compilation log into an array of WebGPU style message records.\n * This follows documented WebGL conventions for compilation logs.\n * Based on https://github.com/wwwtyro/gl-format-compiler-error (public domain)\n */\nexport function parseShaderCompilerLog(errLog: string) : readonly CompilerMessage[] {\n // Parse the error - note: browser and driver dependent\n const lines = errLog.split(/\\r?\\n/);\n\n const messages: CompilerMessage[] = [];\n\n for (const line of lines) {\n if (line.length <= 1) {\n continue; // eslint-disable-line no-continue\n }\n\n const segments: string[] = line.split(':');\n\n // Check for messages with no line information `ERROR: unsupported shader version`\n if (segments.length === 2) {\n const [messageType, message] = segments;\n messages.push({\n message: message.trim(),\n type: getMessageType(messageType),\n lineNum: 0,\n linePos: 0\n });\n continue; // eslint-disable-line no-continue \n }\n\n const [messageType, linePosition, lineNumber, ...rest] = segments;\n\n let lineNum = parseInt(lineNumber, 10);\n if (isNaN(lineNum)) {\n lineNum = 0;\n }\n\n let linePos = parseInt(linePosition, 10);\n if (isNaN(linePos)) {\n linePos = 0;\n }\n\n messages.push({\n message: rest.join(':').trim(),\n type: getMessageType(messageType),\n lineNum,\n linePos // TODO\n })\n }\n\n return messages;\n}\n\n/** Ensure supported type */\nfunction getMessageType(messageType: string): 'warning' | 'error' | 'info' { \n const MESSAGE_TYPES = ['warning', 'error', 'info'];\n const lowerCaseType = messageType.toLowerCase();\n return (MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info') as 'warning' | 'error' | 'info';\n}\n"],"mappings":"AAUA,OAAO,SAASA,sBAAsBA,CAACC,MAAc,EAA+B;EAElF,MAAMC,KAAK,GAAGD,MAAM,CAACE,KAAK,CAAC,OAAO,CAAC;EAEnC,MAAMC,QAA2B,GAAG,EAAE;EAEtC,KAAK,MAAMC,IAAI,IAAIH,KAAK,EAAE;IACxB,IAAIG,IAAI,CAACC,MAAM,IAAI,CAAC,EAAE;MACpB;IACF;IAEA,MAAMC,QAAkB,GAAGF,IAAI,CAACF,KAAK,CAAC,GAAG,CAAC;IAG1C,IAAII,QAAQ,CAACD,MAAM,KAAK,CAAC,EAAE;MACzB,MAAM,CAACE,WAAW,EAAEC,OAAO,CAAC,GAAGF,QAAQ;MACvCH,QAAQ,CAACM,IAAI,CAAC;QACZD,OAAO,EAAEA,OAAO,CAACE,IAAI,CAAC,CAAC;QACvBC,IAAI,EAAEC,cAAc,CAACL,WAAW,CAAC;QACjCM,OAAO,EAAE,CAAC;QACVC,OAAO,EAAE;MACX,CAAC,CAAC;MACF;IACF;IAEA,MAAM,CAACP,WAAW,EAAEQ,YAAY,EAAEC,UAAU,EAAE,GAAGC,IAAI,CAAC,GAAGX,QAAQ;IAEjE,IAAIO,OAAO,GAAGK,QAAQ,CAACF,UAAU,EAAE,EAAE,CAAC;IACtC,IAAIG,KAAK,CAACN,OAAO,CAAC,EAAE;MAClBA,OAAO,GAAG,CAAC;IACb;IAEA,IAAIC,OAAO,GAAGI,QAAQ,CAACH,YAAY,EAAE,EAAE,CAAC;IACxC,IAAII,KAAK,CAACL,OAAO,CAAC,EAAE;MAClBA,OAAO,GAAG,CAAC;IACb;IAEAX,QAAQ,CAACM,IAAI,CAAC;MACZD,OAAO,EAAES,IAAI,CAACG,IAAI,CAAC,GAAG,CAAC,CAACV,IAAI,CAAC,CAAC;MAC9BC,IAAI,EAAEC,cAAc,CAACL,WAAW,CAAC;MACjCM,OAAO;MACPC;IACF,CAAC,CAAC;EACJ;EAEA,OAAOX,QAAQ;AACjB;AAGA,SAASS,cAAcA,CAACL,WAAmB,EAAgC;EACzE,MAAMc,aAAa,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;EAClD,MAAMC,aAAa,GAAGf,WAAW,CAACgB,WAAW,CAAC,CAAC;EAC/C,OAAQF,aAAa,CAACG,QAAQ,CAACF,aAAa,CAAC,GAAGA,aAAa,GAAG,MAAM;AACxE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"set-uniform.js","names":["setUniform","gl","location","type","value","gl2","uniformValue","arrayValue","Error","uniform1i","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1uiv","uniform2uiv","uniform3uiv","uniform4uiv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","uniformMatrix2x3fv","uniformMatrix2x4fv","uniformMatrix3x2fv","uniformMatrix3x4fv","uniformMatrix4x2fv","uniformMatrix4x3fv"],"sources":["../../../src/adapter/helpers/set-uniform.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable */\n\n// Uniforms\nimport type {UniformValue} from '@luma.gl/core';\nimport {GL, GLCompositeType, GLSamplerType} from '@luma.gl/constants';\n\n/** Set a raw uniform (without type conversion and caching) */\n/* eslint-disable max-len */\nexport function setUniform(\n gl: WebGLRenderingContext,\n location: WebGLUniformLocation,\n type: GLCompositeType | GLSamplerType,\n value: UniformValue\n): void {\n const gl2 = gl as WebGL2RenderingContext;\n\n // Prepare the value for WebGL setters\n let uniformValue = value;\n if (uniformValue === true) {\n uniformValue = 1;\n }\n if (uniformValue === false) {\n uniformValue = 0;\n }\n const arrayValue = typeof uniformValue === 'number' ? [uniformValue] : uniformValue;\n\n // prettier-ignore\n switch (type) {\n // WebGL1 samplers\n case GL.SAMPLER_2D:\n case GL.SAMPLER_CUBE:\n // WebGL2 samplers\n case GL.SAMPLER_3D:\n case GL.SAMPLER_2D_SHADOW:\n case GL.SAMPLER_2D_ARRAY:\n case GL.SAMPLER_2D_ARRAY_SHADOW:\n case GL.SAMPLER_CUBE_SHADOW:\n case GL.INT_SAMPLER_2D:\n case GL.INT_SAMPLER_3D:\n case GL.INT_SAMPLER_CUBE:\n case GL.INT_SAMPLER_2D_ARRAY:\n case GL.UNSIGNED_INT_SAMPLER_2D:\n case GL.UNSIGNED_INT_SAMPLER_3D:\n case GL.UNSIGNED_INT_SAMPLER_CUBE:\n case GL.UNSIGNED_INT_SAMPLER_2D_ARRAY:\n if (typeof value !== 'number') {\n throw new Error('samplers must be set to integers');\n }\n return gl.uniform1i(location, value);\n\n case GL.FLOAT: return gl.uniform1fv(location, arrayValue);\n case GL.FLOAT_VEC2: return gl.uniform2fv(location, arrayValue);\n case GL.FLOAT_VEC3: return gl.uniform3fv(location, arrayValue);\n case GL.FLOAT_VEC4: return gl.uniform4fv(location, arrayValue);\n\n case GL.INT: return gl.uniform1iv(location, arrayValue);\n case GL.INT_VEC2: return gl.uniform2iv(location, arrayValue);\n case GL.INT_VEC3: return gl.uniform3iv(location, arrayValue);\n case GL.INT_VEC4: return gl.uniform4iv(location, arrayValue);\n\n case GL.BOOL: return gl.uniform1iv(location, arrayValue);\n case GL.BOOL_VEC2: return gl.uniform2iv(location, arrayValue);\n case GL.BOOL_VEC3: return gl.uniform3iv(location, arrayValue);\n case GL.BOOL_VEC4: return gl.uniform4iv(location, arrayValue);\n\n // WEBGL2 - unsigned integers\n case GL.UNSIGNED_INT: return gl2.uniform1uiv(location, arrayValue, 1);\n case GL.UNSIGNED_INT_VEC2: return gl2.uniform2uiv(location, arrayValue, 2);\n case GL.UNSIGNED_INT_VEC3: return gl2.uniform3uiv(location, arrayValue, 3);\n case GL.UNSIGNED_INT_VEC4: return gl2.uniform4uiv(location, arrayValue, 4);\n\n // WebGL2 - quadratic matrices\n // false: don't transpose the matrix\n case GL.FLOAT_MAT2: return gl.uniformMatrix2fv(location, false, arrayValue);\n case GL.FLOAT_MAT3: return gl.uniformMatrix3fv(location, false, arrayValue);\n case GL.FLOAT_MAT4: return gl.uniformMatrix4fv(location, false, arrayValue);\n\n // WebGL2 - rectangular matrices\n case GL.FLOAT_MAT2x3: return gl2.uniformMatrix2x3fv(location, false, arrayValue);\n case GL.FLOAT_MAT2x4: return gl2.uniformMatrix2x4fv(location, false, arrayValue);\n case GL.FLOAT_MAT3x2: return gl2.uniformMatrix3x2fv(location, false, arrayValue);\n case GL.FLOAT_MAT3x4: return gl2.uniformMatrix3x4fv(location, false, arrayValue);\n case GL.FLOAT_MAT4x2: return gl2.uniformMatrix4x2fv(location, false, arrayValue);\n case GL.FLOAT_MAT4x3: return gl2.uniformMatrix4x3fv(location, false, arrayValue);\n }\n\n throw new Error('Illegal uniform');\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-topology-utils.js","names":["getPrimitiveDrawMode","drawMode","Error","getPrimitiveCount","options","vertexCount","getVertexCount","primitiveCount","getGLDrawMode","topology","getGLPrimitive"],"sources":["../../../src/adapter/helpers/webgl-topology-utils.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {GL, GLPrimitiveTopology, GLPrimitive} from '@luma.gl/constants';\nimport {PrimitiveTopology} from '@luma.gl/core';\n\n// Counts the number of complete primitives given a number of vertices and a drawMode\nexport function getPrimitiveDrawMode(drawMode: GLPrimitiveTopology): GLPrimitive {\n switch (drawMode) {\n case GL.POINTS:\n return GL.POINTS;\n case GL.LINES:\n return GL.LINES;\n case GL.LINE_STRIP:\n return GL.LINES;\n case GL.LINE_LOOP:\n return GL.LINES;\n case GL.TRIANGLES:\n return GL.TRIANGLES;\n case GL.TRIANGLE_STRIP:\n return GL.TRIANGLES;\n case GL.TRIANGLE_FAN:\n return GL.TRIANGLES;\n default:\n throw new Error('drawMode');\n }\n}\n\n// Counts the number of complete \"primitives\" given a number of vertices and a drawMode\nexport function getPrimitiveCount(options: {drawMode: GLPrimitiveTopology, vertexCount: number}): number {\n const {drawMode, vertexCount} = options;\n switch (drawMode) {\n case GL.POINTS:\n case GL.LINE_LOOP:\n return vertexCount;\n case GL.LINES:\n return vertexCount / 2;\n case GL.LINE_STRIP:\n return vertexCount - 1;\n case GL.TRIANGLES:\n return vertexCount / 3;\n case GL.TRIANGLE_STRIP:\n case GL.TRIANGLE_FAN:\n return vertexCount - 2;\n default:\n throw new Error('drawMode');\n }\n}\n\n// Counts the number of vertices after splitting the vertex stream into separate \"primitives\"\nexport function getVertexCount(options: {drawMode: GLPrimitiveTopology, vertexCount: number}): number {\n const {drawMode, vertexCount} = options;\n const primitiveCount = getPrimitiveCount({drawMode, vertexCount});\n switch (getPrimitiveDrawMode(drawMode)) {\n case GL.POINTS:\n return primitiveCount;\n case GL.LINES:\n return primitiveCount * 2;\n case GL.TRIANGLES:\n return primitiveCount * 3;\n default:\n throw new Error('drawMode');\n }\n}\n\n/** Get the primitive type for draw */\nexport function getGLDrawMode(\n topology: PrimitiveTopology\n):\n | GL.POINTS\n | GL.LINES\n | GL.LINE_STRIP\n | GL.LINE_LOOP\n | GL.TRIANGLES\n | GL.TRIANGLE_STRIP\n | GL.TRIANGLE_FAN {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINE_STRIP;\n case 'line-loop-webgl': return GL.LINE_LOOP;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLE_STRIP;\n case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;\n default: throw new Error(topology);\n }\n}\n\n/** Get the primitive type for transform feedback */\nexport function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINES;\n case 'line-loop-webgl': return GL.LINES;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLES;\n case 'triangle-fan-webgl': return GL.TRIANGLES;\n default: throw new Error(topology);\n }\n}\n"],"mappings":"AAOA,OAAO,SAASA,oBAAoBA,CAACC,QAA6B,EAAe;EAC/E,QAAQA,QAAQ;IACd;MACE;IACF;MACE;IACF;MACE;IACF;MACE;IACF;MACE;IACF;MACE;IACF;MACE;IACF;MACE,MAAM,IAAIC,KAAK,CAAC,UAAU,CAAC;EAC/B;AACF;AAGA,OAAO,SAASC,iBAAiBA,CAACC,OAA6D,EAAU;EACvG,MAAM;IAACH,QAAQ;IAAEI;EAAW,CAAC,GAAGD,OAAO;EACvC,QAAQH,QAAQ;IACd;IACA;MACE,OAAOI,WAAW;IACpB;MACE,OAAOA,WAAW,GAAG,CAAC;IACxB;MACE,OAAOA,WAAW,GAAG,CAAC;IACxB;MACE,OAAOA,WAAW,GAAG,CAAC;IACxB;IACA;MACE,OAAOA,WAAW,GAAG,CAAC;IACxB;MACE,MAAM,IAAIH,KAAK,CAAC,UAAU,CAAC;EAC/B;AACF;AAGA,OAAO,SAASI,cAAcA,CAACF,OAA6D,EAAU;EACpG,MAAM;IAACH,QAAQ;IAAEI;EAAW,CAAC,GAAGD,OAAO;EACvC,MAAMG,cAAc,GAAGJ,iBAAiB,CAAC;IAACF,QAAQ;IAAEI;EAAW,CAAC,CAAC;EACjE,QAAQL,oBAAoB,CAACC,QAAQ,CAAC;IACpC;MACE,OAAOM,cAAc;IACvB;MACE,OAAOA,cAAc,GAAG,CAAC;IAC3B;MACE,OAAOA,cAAc,GAAG,CAAC;IAC3B;MACE,MAAM,IAAIL,KAAK,CAAC,UAAU,CAAC;EAC/B;AACF;AAGA,OAAO,SAASM,aAAaA,CAC3BC,QAA2B,EAQT;EAElB,QAAQA,QAAQ;IACd,KAAK,YAAY;MAAE;IACnB,KAAK,WAAW;MAAE;IAClB,KAAK,YAAY;MAAE;IACnB,KAAK,iBAAiB;MAAE;IACxB,KAAK,eAAe;MAAE;IACtB,KAAK,gBAAgB;MAAE;IACvB,KAAK,oBAAoB;MAAE;IAC3B;MAAS,MAAM,IAAIP,KAAK,CAACO,QAAQ,CAAC;EACpC;AACF;AAGA,OAAO,SAASC,cAAcA,CAACD,QAA2B,EAAuC;EAE/F,QAAQA,QAAQ;IACd,KAAK,YAAY;MAAE;IACnB,KAAK,WAAW;MAAE;IAClB,KAAK,YAAY;MAAE;IACnB,KAAK,iBAAiB;MAAE;IACxB,KAAK,eAAe;MAAE;IACtB,KAAK,gBAAgB;MAAE;IACvB,KAAK,oBAAoB;MAAE;IAC3B;MAAS,MAAM,IAAIP,KAAK,CAACO,QAAQ,CAAC;EACpC;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants-to-keys.js","names":["assert","getKeyValue","gl","name","number","Number","isNaN","replace","value","undefined"],"sources":["../../../src/adapter/objects/constants-to-keys.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {assert} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\n\n// Resolve a WebGL enumeration name (returns itself if already a number)\nexport function getKeyValue(gl: WebGLRenderingContext, name: string | GL): GL {\n // If not a string, return (assume number)\n if (typeof name !== 'string') {\n return name;\n }\n\n // If string converts to number, return number\n const number = Number(name);\n if (!isNaN(number)) {\n return number;\n }\n\n // Look up string, after removing any 'GL.' or 'gl.' prefix\n name = name.replace(/^.*\\./, '');\n // @ts-ignore expect-error depends on settings\n const value = gl[name];\n assert(value !== undefined, `Accessing undefined constant GL.${name}`);\n return value;\n}\n"],"mappings":"AAGA,SAAQA,MAAM,QAAO,eAAe;AAIpC,OAAO,SAASC,WAAWA,CAACC,EAAyB,EAAEC,IAAiB,EAAM;EAE5E,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAOA,IAAI;EACb;EAGA,MAAMC,MAAM,GAAGC,MAAM,CAACF,IAAI,CAAC;EAC3B,IAAI,CAACG,KAAK,CAACF,MAAM,CAAC,EAAE;IAClB,OAAOA,MAAM;EACf;EAGAD,IAAI,GAAGA,IAAI,CAACI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;EAEhC,MAAMC,KAAK,GAAGN,EAAE,CAACC,IAAI,CAAC;EACtBH,MAAM,CAACQ,KAAK,KAAKC,SAAS,EAAG,mCAAkCN,IAAK,EAAC,CAAC;EACtE,OAAOK,KAAK;AACd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-renderbuffer.js","names":["assert","WebGLResource","isRenderbufferFormatSupported","convertTextureFormatToGL","getTextureFormatBytesPerPixel","_Symbol$toStringTag","Symbol","toStringTag","WEBGLRenderbuffer","width","props","height","format","samples","attachment","isTextureFormatSupported","device","gl","constructor","Error","defaultProps","glFormat","isWebGL2","_initialize","resize","size","Object","assign","trackDeallocatedMemory","bindRenderbuffer","handle","gl2","renderbufferStorageMultisample","renderbufferStorage","trackAllocatedMemory","_createHandle","createRenderbuffer","_deleteHandle","deleteRenderbuffer","_bindHandle","id","undefined","userData"],"sources":["../../../src/adapter/objects/webgl-renderbuffer.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {assert, ResourceProps, TextureFormat} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {WebGLDevice} from '../webgl-device';\nimport {WebGLResource} from './webgl-resource';\nimport {isRenderbufferFormatSupported} from '../converters/texture-formats';\nimport {convertTextureFormatToGL, getTextureFormatBytesPerPixel} from '../converters/texture-formats';\n\nexport type RenderbufferProps = ResourceProps & {\n format: TextureFormat;\n width?: number;\n height?: number;\n samples?: number;\n};\n\n/**\n * Renderbuffers are GPU objects that contain images.\n * In contrast to Textures they are optimized for use as render targets, with Framebuffers.\n * while Textures may not be, and are the logical choice when\n * you do not need to sample (i.e. in a post-pass shader)\n * from the produced image. If you need to resample\n * (such as when reading depth back in a second shader pass),\n * use Textures instead.\n * Renderbuffer objects also natively accommodate Multisampling (MSAA).\n */\nexport class WEBGLRenderbuffer extends WebGLResource<RenderbufferProps> {\n static override readonly defaultProps: Required<RenderbufferProps> = {\n id: undefined,\n handle: undefined,\n userData: undefined,\n format: undefined, // 'depth16unorm'\n width: 1,\n height: 1, \n samples: 0\n }; \n\n override get [Symbol.toStringTag](): string { return 'Renderbuffer'; }\n\n get width(): number { return this.props.width; }\n get height(): number { return this.props.height; }\n get format(): TextureFormat { return this.props.format; }\n get samples(): number { return this.props.samples; }\n get attachment() { return }\n\n /** WebGL format constant */\n glFormat: GL;\n\n static isTextureFormatSupported(device: WebGLDevice, format: TextureFormat): boolean {\n return isRenderbufferFormatSupported(device.gl, format);\n }\n\n constructor(device: WebGLDevice, props: RenderbufferProps) {\n // TODO - remove temporary sanity check\n if (typeof props.format === 'number') {\n throw new Error('Renderbuffer');\n }\n super(device, props, WEBGLRenderbuffer.defaultProps);\n this.glFormat = convertTextureFormatToGL(this.props.format, device.isWebGL2);\n this._initialize(this.props);\n }\n\n resize(size: {width: number, height: number}): void {\n // Don't resize if width/height haven't changed\n if (size.width !== this.width || size.height !== this.height) {\n Object.assign(this.props, {...size, format: this.format, samples: this.samples});\n this._initialize(this.props);\n }\n }\n\n // PRIVATE METHODS\n\n /** Creates and initializes a renderbuffer object's data store */\n protected _initialize(props: Required<RenderbufferProps>): void {\n const {format, width, height, samples} = props;\n assert(format, 'Needs format');\n\n this.trackDeallocatedMemory();\n\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, this.handle);\n\n if (samples !== 0 && this.device.isWebGL2) {\n this.gl2.renderbufferStorageMultisample(GL.RENDERBUFFER, samples, this.glFormat, width, height);\n } else {\n this.gl.renderbufferStorage(GL.RENDERBUFFER, this.glFormat, width, height);\n }\n\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, null);\n\n this.trackAllocatedMemory(\n width * height * (samples || 1) * getTextureFormatBytesPerPixel(this.glFormat, this.device.isWebGL2)\n );\n }\n\n // RESOURCE IMPLEMENTATION\n\n override _createHandle() {\n return this.gl.createRenderbuffer();\n }\n\n override _deleteHandle(): void {\n this.gl.deleteRenderbuffer(this.handle);\n this.trackDeallocatedMemory();\n }\n\n override _bindHandle(handle: WEBGLRenderbuffer): void {\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, handle);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-resource.js","names":["Resource","assert","uid","stubRemovedMethods","isWebGL2","assertWebGLContext","WebGLDevice","getKeyValue","ERR_RESOURCE_METHOD_UNDEFINED","WebGLResource","constructor","device","props","defaultProps","gl","gl2","_handle","_bound","byteLength","attach","id","name","handle","undefined","_createHandle","toString","delete","deleteChildren","arguments","length","children","_deleteHandle","removeStats","filter","Boolean","forEach","child","destroy","bind","funcOrHandle","_bindHandle","value","unbind","getParameter","pname","parameters","PARAMETERS","parameter","isWebgl2","parameterAvailable","getExtension","extension","webgl1Default","webgl1","webgl2Default","webgl2","defaultValue","_getParameter","getParameters","options","keys","values","parameterKeys","Object","key","getGLKey","type","setParameter","Error","_setParameter","setParameters","className","version","methodNames","initialize","_getOptsFromHandle"],"sources":["../../../src/adapter/objects/webgl-resource.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {Resource, assert, uid, stubRemovedMethods} from '@luma.gl/core';\nimport type {Device, ResourceProps} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {isWebGL2, assertWebGLContext} from '../../context/context/webgl-checks';\nimport {WebGLDevice} from '../webgl-device';\n\n// Requires full GL enum to be bundled... Make these bindings dependent on dynamic import (debug)?\nimport {getKeyValue} from './constants-to-keys';\n\nconst ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';\n\n/**\n * Base class for WebGL object wrappers\n */\nexport abstract class WebGLResource<Props extends ResourceProps> extends Resource<Props> {\n readonly device: WebGLDevice;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext;\n private _handle: any;\n\n private _bound = false;\n // Only meaningful for resources that allocate GPU memory\n byteLength = 0;\n\n constructor(device: Device, props: Props, defaultProps: Required<Props>) {\n super(device, props, defaultProps);\n\n this.device = WebGLDevice.attach(device);\n const gl = this.device.gl;\n\n assertWebGLContext(gl);\n\n // extends \n const {id} = props || {};\n this.gl = gl;\n this.gl2 = gl as WebGL2RenderingContext;\n this.id = id || uid(this.constructor.name);\n\n // Set the handle\n // If handle was provided, use it, otherwise create a new handle\n\n // TODO - Stores the handle with context loss information\n // this.glCount = glGetContextLossCount(this.gl);\n\n // Default VertexArray needs to be created with null handle, so compare against undefined\n this._handle = props?.handle;\n if (this._handle === undefined) {\n this._handle = this._createHandle();\n }\n\n this.byteLength = 0;\n }\n\n override toString(): string {\n return `${this.constructor.name}(${this.id})`;\n }\n\n get handle() {\n // TODO - Add context loss handling\n // Will regenerate and reinitialize the handle if necessary\n // const glCount = glGetContextLossCount(this.gl);\n // if (this.glCount !== glCount) {\n // this._handle = this._createHandle(this.props);\n // this._glCount = glCount;\n // // Reinitialize object\n // this.initialize(this.props);\n // }\n return this._handle;\n }\n\n override delete({deleteChildren = false} = {}) {\n // Delete this object, and get refs to any children\n // @ts-expect-error\n const children = this._handle && this._deleteHandle(this._handle);\n if (this._handle) {\n this.removeStats();\n }\n this._handle = null;\n\n // Optionally, recursively delete the children\n // @ts-expect-error\n if (children && deleteChildren) {\n // @ts-expect-error\n children.filter(Boolean).forEach((child) => child.destroy());\n }\n\n return this;\n }\n\n bind(funcOrHandle = this.handle) {\n if (typeof funcOrHandle !== 'function') {\n this._bindHandle(funcOrHandle);\n return this;\n }\n\n let value;\n\n if (!this._bound) {\n this._bindHandle(this.handle);\n this._bound = true;\n\n value = funcOrHandle();\n\n this._bound = false;\n this._bindHandle(null);\n } else {\n value = funcOrHandle();\n }\n\n return value;\n }\n\n unbind() {\n this.bind(null);\n }\n\n /**\n * Query a Resource parameter\n *\n * @param name\n * @return param\n */\n getParameter(pname: number, props: any = {}): any {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-expect-error\n const parameters = this.constructor.PARAMETERS || {};\n\n // Use parameter definitions to handle unsupported parameters\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if we can query for this parameter\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n const webgl1Default = parameter.webgl1;\n const webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;\n const defaultValue = isWebgl2 ? webgl2Default : webgl1Default;\n return defaultValue;\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // Attempt to query for it and let WebGL report errors\n return this._getParameter(pname, props);\n }\n\n // Many resources support a getParameter call -\n // getParameters will get all parameters - slow but useful for debugging\n // eslint-disable-next-line complexity\n getParameters(options: {parameters?: any, keys?: any} = {}) {\n const {parameters, keys} = options;\n\n // Get parameter definitions for this Resource\n // @ts-expect-error\n const PARAMETERS = this.constructor.PARAMETERS || {};\n\n const isWebgl2 = isWebGL2(this.gl);\n\n const values: Record<string, any> = {};\n\n // Query all parameters if no list provided\n const parameterKeys = parameters || Object.keys(PARAMETERS);\n\n // WEBGL limits\n for (const pname of parameterKeys) {\n const parameter = PARAMETERS[pname];\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n parameter &&\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (parameterAvailable) {\n const key = keys ? this.device.getGLKey(pname) : pname;\n values[key] = this.getParameter(pname, options);\n if (keys && parameter.type === 'GLenum') {\n values[key] = this.device.getGLKey(values[key]);\n }\n }\n }\n\n return values;\n }\n\n /**\n * Update a Resource setting\n *\n * @todo - cache parameter to avoid issuing WebGL calls?\n *\n * @param pname - parameter (GL constant, value or key)\n * @param value {GLint|GLfloat|GLenum} \n * @return returns self to enable chaining\n */\n setParameter(pname: GL | string, value: any): this {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-expect-error\n const parameters = this.constructor.PARAMETERS || {};\n\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n throw new Error('Parameter not available on this platform');\n }\n\n // Handle string keys\n if (parameter.type === 'GLenum') {\n // @ts-expect-error\n value = getKeyValue(value);\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // attempt to set it and let WebGL report errors\n this._setParameter(pname, value);\n return this;\n }\n\n /*\n * Batch update resource parameters\n * Assumes the subclass supports a setParameter call\n */\n setParameters(parameters: Record<GL, any>) {\n for (const pname in parameters) {\n this.setParameter(pname, parameters[pname]);\n }\n return this;\n }\n\n // Install stubs for removed methods\n stubRemovedMethods(className: string, version: string, methodNames: string[]) {\n return stubRemovedMethods(this, className, version, methodNames);\n }\n\n // PUBLIC VIRTUAL METHODS\n initialize(props: ResourceProps) {}\n\n // PROTECTED METHODS - These must be overridden by subclass\n _createHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _deleteHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _bindHandle(handle: any) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _getOptsFromHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _getParameter(pname: GL, props: Record<string, any>): number {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _setParameter(pname: GL | string, value: any) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n // PRIVATE METHODS\n\n /*\n _addStats() {\n const name = this.constructor.name;\n const stats = lumaStats.get('Resource Counts');\n\n stats.get('Resources Created').incrementCount();\n stats.get(`${name}s Created`).incrementCount();\n stats.get(`${name}s Active`).incrementCount();\n }\n\n _removeStats() {\n const name = this.constructor.name;\n const stats = lumaStats.get('Resource Counts');\n\n stats.get(`${name}s Active`).decrementCount();\n }\n\n trackAllocatedMemory(bytes, name = this.constructor.name) {\n const stats = lumaStats.get('Memory Usage');\n\n stats.get('GPU Memory').addCount(bytes);\n stats.get(`${name} Memory`).addCount(bytes);\n this.byteLength = bytes;\n }\n\n trackDeallocatedMemory(name = this.constructor.name) {\n const stats = lumaStats.get('Memory Usage');\n\n stats.get('GPU Memory').subtractCount(this.byteLength);\n stats.get(`${name} Memory`).subtractCount(this.byteLength);\n this.byteLength = 0;\n }\n */\n}\n"],"mappings":"AAGA,SAAQA,QAAQ,EAAEC,MAAM,EAAEC,GAAG,EAAEC,kBAAkB,QAAO,eAAe;AAAC,SAGhEC,QAAQ,EAAEC,kBAAkB;AAAA,SAC5BC,WAAW;AAAA,SAGXC,WAAW;AAEnB,MAAMC,6BAA6B,GAAG,+CAA+C;AAKrF,OAAO,MAAeC,aAAa,SAAsCT,QAAQ,CAAQ;EAUvFU,WAAWA,CAACC,MAAc,EAAEC,KAAY,EAAEC,YAA6B,EAAE;IACvE,KAAK,CAACF,MAAM,EAAEC,KAAK,EAAEC,YAAY,CAAC;IAAC,KAV5BF,MAAM;IAAA,KACNG,EAAE;IAAA,KACFC,GAAG;IAAA,KACJC,OAAO;IAAA,KAEPC,MAAM,GAAG,KAAK;IAAA,KAEtBC,UAAU,GAAG,CAAC;IAKZ,IAAI,CAACP,MAAM,GAAGL,WAAW,CAACa,MAAM,CAACR,MAAM,CAAC;IACxC,MAAMG,EAAE,GAAG,IAAI,CAACH,MAAM,CAACG,EAAE;IAEzBT,kBAAkB,CAACS,EAAE,CAAC;IAGtB,MAAM;MAACM;IAAE,CAAC,GAAGR,KAAK,IAAI,CAAC,CAAC;IACxB,IAAI,CAACE,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,GAAG,GAAGD,EAA4B;IACvC,IAAI,CAACM,EAAE,GAAGA,EAAE,IAAIlB,GAAG,CAAC,IAAI,CAACQ,WAAW,CAACW,IAAI,CAAC;IAS1C,IAAI,CAACL,OAAO,GAAGJ,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEU,MAAM;IAC5B,IAAI,IAAI,CAACN,OAAO,KAAKO,SAAS,EAAE;MAC9B,IAAI,CAACP,OAAO,GAAG,IAAI,CAACQ,aAAa,CAAC,CAAC;IACrC;IAEA,IAAI,CAACN,UAAU,GAAG,CAAC;EACrB;EAESO,QAAQA,CAAA,EAAW;IAC1B,OAAQ,GAAE,IAAI,CAACf,WAAW,CAACW,IAAK,IAAG,IAAI,CAACD,EAAG,GAAE;EAC/C;EAEA,IAAIE,MAAMA,CAAA,EAAG;IAUX,OAAO,IAAI,CAACN,OAAO;EACrB;EAESU,MAAMA,CAAA,EAAgC;IAAA,IAA/B;MAACC,cAAc,GAAG;IAAK,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAL,SAAA,GAAAK,SAAA,MAAG,CAAC,CAAC;IAG3C,MAAME,QAAQ,GAAG,IAAI,CAACd,OAAO,IAAI,IAAI,CAACe,aAAa,CAAC,IAAI,CAACf,OAAO,CAAC;IACjE,IAAI,IAAI,CAACA,OAAO,EAAE;MAChB,IAAI,CAACgB,WAAW,CAAC,CAAC;IACpB;IACA,IAAI,CAAChB,OAAO,GAAG,IAAI;IAInB,IAAIc,QAAQ,IAAIH,cAAc,EAAE;MAE9BG,QAAQ,CAACG,MAAM,CAACC,OAAO,CAAC,CAACC,OAAO,CAAEC,KAAK,IAAKA,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC;IAC9D;IAEA,OAAO,IAAI;EACb;EAEAC,IAAIA,CAAA,EAA6B;IAAA,IAA5BC,YAAY,GAAAX,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAL,SAAA,GAAAK,SAAA,MAAG,IAAI,CAACN,MAAM;IAC7B,IAAI,OAAOiB,YAAY,KAAK,UAAU,EAAE;MACtC,IAAI,CAACC,WAAW,CAACD,YAAY,CAAC;MAC9B,OAAO,IAAI;IACb;IAEA,IAAIE,KAAK;IAET,IAAI,CAAC,IAAI,CAACxB,MAAM,EAAE;MAChB,IAAI,CAACuB,WAAW,CAAC,IAAI,CAAClB,MAAM,CAAC;MAC7B,IAAI,CAACL,MAAM,GAAG,IAAI;MAElBwB,KAAK,GAAGF,YAAY,CAAC,CAAC;MAEtB,IAAI,CAACtB,MAAM,GAAG,KAAK;MACnB,IAAI,CAACuB,WAAW,CAAC,IAAI,CAAC;IACxB,CAAC,MAAM;MACLC,KAAK,GAAGF,YAAY,CAAC,CAAC;IACxB;IAEA,OAAOE,KAAK;EACd;EAEAC,MAAMA,CAAA,EAAG;IACP,IAAI,CAACJ,IAAI,CAAC,IAAI,CAAC;EACjB;EAQAK,YAAYA,CAACC,KAAa,EAAwB;IAAA,IAAtBhC,KAAU,GAAAgB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAL,SAAA,GAAAK,SAAA,MAAG,CAAC,CAAC;IACzCgB,KAAK,GAAGrC,WAAW,CAAC,IAAI,CAACO,EAAE,EAAE8B,KAAK,CAAC;IACnC3C,MAAM,CAAC2C,KAAK,CAAC;IAGb,MAAMC,UAAU,GAAG,IAAI,CAACnC,WAAW,CAACoC,UAAU,IAAI,CAAC,CAAC;IAGpD,MAAMC,SAAS,GAAGF,UAAU,CAACD,KAAK,CAAC;IACnC,IAAIG,SAAS,EAAE;MACb,MAAMC,QAAQ,GAAG5C,QAAQ,CAAC,IAAI,CAACU,EAAE,CAAC;MAGlC,MAAMmC,kBAAkB,GACtB,CAAC,EAAE,QAAQ,IAAIF,SAAS,CAAC,IAAIC,QAAQ,MACpC,EAAE,WAAW,IAAID,SAAS,CAAC,IAAI,IAAI,CAACjC,EAAE,CAACoC,YAAY,CAACH,SAAS,CAACI,SAAS,CAAC,CAAC;MAE5E,IAAI,CAACF,kBAAkB,EAAE;QACvB,MAAMG,aAAa,GAAGL,SAAS,CAACM,MAAM;QACtC,MAAMC,aAAa,GAAG,QAAQ,IAAIP,SAAS,GAAGA,SAAS,CAACQ,MAAM,GAAGR,SAAS,CAACM,MAAM;QACjF,MAAMG,YAAY,GAAGR,QAAQ,GAAGM,aAAa,GAAGF,aAAa;QAC7D,OAAOI,YAAY;MACrB;IACF;IAIA,OAAO,IAAI,CAACC,aAAa,CAACb,KAAK,EAAEhC,KAAK,CAAC;EACzC;EAKA8C,aAAaA,CAAA,EAA+C;IAAA,IAA9CC,OAAuC,GAAA/B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAL,SAAA,GAAAK,SAAA,MAAG,CAAC,CAAC;IACxD,MAAM;MAACiB,UAAU;MAAEe;IAAI,CAAC,GAAGD,OAAO;IAIlC,MAAMb,UAAU,GAAG,IAAI,CAACpC,WAAW,CAACoC,UAAU,IAAI,CAAC,CAAC;IAEpD,MAAME,QAAQ,GAAG5C,QAAQ,CAAC,IAAI,CAACU,EAAE,CAAC;IAElC,MAAM+C,MAA2B,GAAG,CAAC,CAAC;IAGtC,MAAMC,aAAa,GAAGjB,UAAU,IAAIkB,MAAM,CAACH,IAAI,CAACd,UAAU,CAAC;IAG3D,KAAK,MAAMF,KAAK,IAAIkB,aAAa,EAAE;MACjC,MAAMf,SAAS,GAAGD,UAAU,CAACF,KAAK,CAAC;MAGnC,MAAMK,kBAAkB,GACtBF,SAAS,KACR,EAAE,QAAQ,IAAIA,SAAS,CAAC,IAAIC,QAAQ,CAAC,KACrC,EAAE,WAAW,IAAID,SAAS,CAAC,IAAI,IAAI,CAACjC,EAAE,CAACoC,YAAY,CAACH,SAAS,CAACI,SAAS,CAAC,CAAC;MAE5E,IAAIF,kBAAkB,EAAE;QACtB,MAAMe,GAAG,GAAGJ,IAAI,GAAG,IAAI,CAACjD,MAAM,CAACsD,QAAQ,CAACrB,KAAK,CAAC,GAAGA,KAAK;QACtDiB,MAAM,CAACG,GAAG,CAAC,GAAG,IAAI,CAACrB,YAAY,CAACC,KAAK,EAAEe,OAAO,CAAC;QAC/C,IAAIC,IAAI,IAAIb,SAAS,CAACmB,IAAI,KAAK,QAAQ,EAAE;UACvCL,MAAM,CAACG,GAAG,CAAC,GAAG,IAAI,CAACrD,MAAM,CAACsD,QAAQ,CAACJ,MAAM,CAACG,GAAG,CAAC,CAAC;QACjD;MACF;IACF;IAEA,OAAOH,MAAM;EACf;EAWAM,YAAYA,CAACvB,KAAkB,EAAEH,KAAU,EAAQ;IACjDG,KAAK,GAAGrC,WAAW,CAAC,IAAI,CAACO,EAAE,EAAE8B,KAAK,CAAC;IACnC3C,MAAM,CAAC2C,KAAK,CAAC;IAGb,MAAMC,UAAU,GAAG,IAAI,CAACnC,WAAW,CAACoC,UAAU,IAAI,CAAC,CAAC;IAEpD,MAAMC,SAAS,GAAGF,UAAU,CAACD,KAAK,CAAC;IACnC,IAAIG,SAAS,EAAE;MACb,MAAMC,QAAQ,GAAG5C,QAAQ,CAAC,IAAI,CAACU,EAAE,CAAC;MAGlC,MAAMmC,kBAAkB,GACtB,CAAC,EAAE,QAAQ,IAAIF,SAAS,CAAC,IAAIC,QAAQ,MACpC,EAAE,WAAW,IAAID,SAAS,CAAC,IAAI,IAAI,CAACjC,EAAE,CAACoC,YAAY,CAACH,SAAS,CAACI,SAAS,CAAC,CAAC;MAE5E,IAAI,CAACF,kBAAkB,EAAE;QACvB,MAAM,IAAImB,KAAK,CAAC,0CAA0C,CAAC;MAC7D;MAGA,IAAIrB,SAAS,CAACmB,IAAI,KAAK,QAAQ,EAAE;QAE/BzB,KAAK,GAAGlC,WAAW,CAACkC,KAAK,CAAC;MAC5B;IACF;IAIA,IAAI,CAAC4B,aAAa,CAACzB,KAAK,EAAEH,KAAK,CAAC;IAChC,OAAO,IAAI;EACb;EAMA6B,aAAaA,CAACzB,UAA2B,EAAE;IACzC,KAAK,MAAMD,KAAK,IAAIC,UAAU,EAAE;MAC9B,IAAI,CAACsB,YAAY,CAACvB,KAAK,EAAEC,UAAU,CAACD,KAAK,CAAC,CAAC;IAC7C;IACA,OAAO,IAAI;EACb;EAGAzC,kBAAkBA,CAACoE,SAAiB,EAAEC,OAAe,EAAEC,WAAqB,EAAE;IAC5E,OAAOtE,kBAAkB,CAAC,IAAI,EAAEoE,SAAS,EAAEC,OAAO,EAAEC,WAAW,CAAC;EAClE;EAGAC,UAAUA,CAAC9D,KAAoB,EAAE,CAAC;EAGlCY,aAAaA,CAAA,EAAG;IACd,MAAM,IAAI4C,KAAK,CAAC5D,6BAA6B,CAAC;EAChD;EAEAuB,aAAaA,CAAA,EAAG;IACd,MAAM,IAAIqC,KAAK,CAAC5D,6BAA6B,CAAC;EAChD;EAEAgC,WAAWA,CAAClB,MAAW,EAAE;IACvB,MAAM,IAAI8C,KAAK,CAAC5D,6BAA6B,CAAC;EAChD;EAEAmE,kBAAkBA,CAAA,EAAG;IACnB,MAAM,IAAIP,KAAK,CAAC5D,6BAA6B,CAAC;EAChD;EAEAiD,aAAaA,CAACb,KAAS,EAAEhC,KAA0B,EAAU;IAC3D,MAAM,IAAIwD,KAAK,CAAC5D,6BAA6B,CAAC;EAChD;EAEA6D,aAAaA,CAACzB,KAAkB,EAAEH,KAAU,EAAE;IAC5C,MAAM,IAAI2B,KAAK,CAAC5D,6BAA6B,CAAC;EAChD;AAqCF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-buffer.js","names":["Buffer","assert","WEBGLBuffer","constructor","device","props","arguments","length","undefined","gl","gl2","handle","glTarget","glUsage","glIndexType","byteLength","bytesUsed","createBuffer","setSpectorMetadata","data","getWebGLTarget","usage","getWebGLUsage","indexType","_initWithData","byteOffset","_initWithByteLength","bindBuffer","bufferData","bufferSubData","_setDebugData","trackAllocatedMemory","Float32Array","destroy","destroyed","removeStats","trackDeallocatedMemory","deleteBuffer","write","srcOffset","isWebGL2","assertWebGL2","readAsync","readSyncWebGL2","_byteLength","Uint8Array","dstOffset","getBufferSubData","INDEX","VERTEX","UNIFORM"],"sources":["../../../src/adapter/resources/webgl-buffer.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {BufferProps} from '@luma.gl/core';\nimport {Buffer, assert} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {WebGLDevice} from '../webgl-device';\n\n/** WebGL Buffer interface */\nexport class WEBGLBuffer extends Buffer {\n readonly device: WebGLDevice;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext | null;\n readonly handle: WebGLBuffer;\n\n /** Target in OpenGL defines the type of buffer */\n readonly glTarget: GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER;\n /** Usage is a hint on how frequently the buffer will be updates */\n readonly glUsage: GL.STATIC_DRAW | GL.DYNAMIC_DRAW;\n /** Index type is needed when issuing draw calls, so we pre-compute it */\n readonly glIndexType: GL.UNSIGNED_SHORT | GL.UNSIGNED_INT = GL.UNSIGNED_SHORT;\n\n /** Number of bytes allocated on the GPU for this buffer */\n byteLength: number;\n /** Number of bytes used */\n bytesUsed: number;\n\n constructor(device: WebGLDevice, props: BufferProps = {}) {\n super(device, props);\n\n this.device = device;\n this.gl = this.device.gl;\n this.gl2 = this.device.gl2;\n\n const handle = typeof props === 'object' ? props.handle : undefined;\n this.handle = handle || this.gl.createBuffer();\n device.setSpectorMetadata(this.handle, {...this.props, data: typeof this.props.data});\n\n // - In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers\n // otherwise buffer type will lock to generic (non-element) buffer\n // - In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here\n this.glTarget = getWebGLTarget(this.props.usage);\n this.glUsage = getWebGLUsage(this.props.usage);\n this.glIndexType = this.props.indexType === 'uint32' ? GL.UNSIGNED_INT : GL.UNSIGNED_SHORT;\n\n // Set data: (re)initializes the buffer\n if (props.data) {\n this._initWithData(props.data, props.byteOffset, props.byteLength);\n } else {\n this._initWithByteLength(props.byteLength || 0);\n }\n }\n\n // PRIVATE METHODS\n\n /** Allocate a new buffer and initialize to contents of typed array */\n _initWithData(\n data: ArrayBuffer | ArrayBufferView,\n byteOffset: number = 0,\n byteLength: number = data.byteLength + byteOffset\n ): void {\n // const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;\n const glTarget = this.glTarget;\n this.gl.bindBuffer(glTarget, this.handle);\n this.gl.bufferData(glTarget, byteLength, this.glUsage);\n this.gl.bufferSubData(glTarget, byteOffset, data);\n this.gl.bindBuffer(glTarget, null);\n\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n\n this._setDebugData(data, byteOffset, byteLength);\n this.trackAllocatedMemory(byteLength);\n }\n\n // Allocate a GPU buffer of specified size.\n _initWithByteLength(byteLength: number): this {\n assert(byteLength >= 0);\n\n // Workaround needed for Safari (#291):\n // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.\n let data = byteLength;\n if (byteLength === 0) {\n // @ts-expect-error\n data = new Float32Array(0);\n }\n\n // const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;\n const glTarget = this.glTarget;\n\n this.gl.bindBuffer(glTarget, this.handle);\n this.gl.bufferData(glTarget, data, this.glUsage);\n this.gl.bindBuffer(glTarget, null);\n\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n\n this._setDebugData(null, 0, byteLength);\n this.trackAllocatedMemory(byteLength);\n\n return this;\n }\n\n override destroy(): void {\n if (!this.destroyed && this.handle) {\n this.removeStats();\n this.trackDeallocatedMemory();\n this.gl.deleteBuffer(this.handle);\n this.destroyed = true;\n // @ts-expect-error\n this.handle = null;\n }\n }\n\n override write(data: ArrayBufferView, byteOffset: number = 0): void {\n const srcOffset = 0;\n const byteLength = undefined; // data.byteLength;\n\n // Create the buffer - binding it here for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;\n this.gl.bindBuffer(glTarget, this.handle);\n // WebGL2: subData supports additional srcOffset and length parameters\n if (srcOffset !== 0 || byteLength !== undefined) {\n this.device.assertWebGL2();\n this.gl2.bufferSubData(glTarget, byteOffset, data, srcOffset, byteLength);\n } else {\n this.gl.bufferSubData(glTarget, byteOffset, data);\n }\n this.gl.bindBuffer(glTarget, null);\n\n this._setDebugData(data, byteOffset, data.byteLength);\n }\n\n /** Asynchronously read data from the buffer */\n override async readAsync(byteOffset = 0, byteLength?: number): Promise<Uint8Array> {\n return this.readSyncWebGL2(byteOffset, byteLength);\n }\n\n /** Synchronously read data from the buffer. WebGL only. */\n override readSyncWebGL2(byteOffset = 0, byteLength?: number): Uint8Array {\n this.device.assertWebGL2();\n\n byteLength = byteLength ?? this.byteLength - byteOffset;\n const data = new Uint8Array(byteLength);\n const dstOffset = 0;\n\n // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);\n this.gl2.getBufferSubData(GL.COPY_READ_BUFFER, byteOffset, data, dstOffset, byteLength);\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n\n // Update local `data` if offsets are 0\n this._setDebugData(data, byteOffset, byteLength);\n\n return data;\n }\n}\n\n/**\n * Returns a WebGL buffer target\n *\n * @param usage\n * static MAP_READ = 0x01;\n * static MAP_WRITE = 0x02;\n * static COPY_SRC = 0x0004;\n * static COPY_DST = 0x0008;\n * static INDEX = 0x0010;\n * static VERTEX = 0x0020;\n * static UNIFORM = 0x0040;\n * static STORAGE = 0x0080;\n * static INDIRECT = 0x0100;\n * static QUERY_RESOLVE = 0x0200;\n * \n * @returns WebGL buffer targe\n * \n * Buffer bind points in WebGL2\n * gl.COPY_READ_BUFFER: Buffer for copying from one buffer object to another.\n * gl.COPY_WRITE_BUFFER: Buffer for copying from one buffer object to another.\n * gl.TRANSFORM_FEEDBACK_BUFFER: Buffer for transform feedback operations.\n * gl.PIXEL_PACK_BUFFER: Buffer used for pixel transfer operations.\n * gl.PIXEL_UNPACK_BUFFER: Buffer used for pixel transfer operations.\n */\nfunction getWebGLTarget(\n usage: number\n): GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER {\n if (usage & Buffer.INDEX) {\n return GL.ELEMENT_ARRAY_BUFFER;\n }\n if (usage & Buffer.VERTEX) {\n return GL.ARRAY_BUFFER;\n }\n if (usage & Buffer.UNIFORM) {\n return GL.UNIFORM_BUFFER;\n }\n\n // Binding a buffer for the first time locks the type\n // In WebGL2, we can use GL.COPY_WRITE_BUFFER to avoid locking the type\n return GL.ARRAY_BUFFER;\n}\n\n/** @todo usage is not passed correctly */\nfunction getWebGLUsage(usage: number): GL.STATIC_DRAW | GL.DYNAMIC_DRAW {\n if (usage & Buffer.INDEX) {\n return GL.STATIC_DRAW;\n }\n if (usage & Buffer.VERTEX) {\n return GL.STATIC_DRAW;\n }\n if (usage & Buffer.UNIFORM) {\n return GL.DYNAMIC_DRAW;\n }\n return GL.STATIC_DRAW;\n}\n"],"mappings":"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"}
|