@luma.gl/webgl 9.0.0-alpha.2 → 9.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/converters/device-parameters.d.ts +11 -1
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +17 -35
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/renderbuffer-formats.js +1 -5
- package/dist/adapter/converters/renderbuffer-formats.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +4 -4
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +19 -55
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +13 -66
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +2 -8
- package/dist/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-features.js +13 -20
- package/dist/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +1 -4
- package/dist/adapter/device-helpers/device-limits.js.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +8 -10
- package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/adapter/device-helpers/is-old-ie.js +2 -1
- package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
- package/dist/adapter/helpers/attribute-utils.js +0 -17
- package/dist/adapter/helpers/attribute-utils.js.map +1 -1
- package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
- package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
- package/dist/adapter/helpers/get-shader-info.js +25 -0
- package/dist/adapter/helpers/get-shader-info.js.map +1 -0
- 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 +41 -67
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +1 -31
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/uniforms.d.ts +1 -1
- package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
- package/dist/adapter/helpers/uniforms.js +4 -14
- package/dist/adapter/helpers/uniforms.js.map +1 -1
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +0 -7
- package/dist/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +5 -21
- package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/adapter/objects/webgl-resource.d.ts +2 -4
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +14 -67
- package/dist/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js +6 -16
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +1 -2
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +17 -48
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +2 -17
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +1 -14
- package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +1 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +9 -67
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +2 -7
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +50 -139
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts +3 -2
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +4 -12
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts +1 -2
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +7 -20
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +23 -23
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +65 -182
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +5 -18
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +45 -29
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +107 -108
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +11 -35
- package/dist/classic/accessor.js.map +1 -1
- package/dist/classic/buffer.d.ts +0 -1
- package/dist/classic/buffer.d.ts.map +1 -1
- package/dist/classic/buffer.js +29 -86
- package/dist/classic/buffer.js.map +1 -1
- package/dist/classic/typed-array-utils.d.ts +1 -1
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +0 -20
- package/dist/classic/typed-array-utils.js.map +1 -1
- package/dist/context/context/{create-context.d.ts → create-browser-context.d.ts} +2 -1
- package/dist/context/context/create-browser-context.d.ts.map +1 -0
- package/dist/context/context/{create-context.js → create-browser-context.js} +19 -15
- package/dist/context/context/create-browser-context.js.map +1 -0
- package/dist/context/context/create-headless-context.d.ts +9 -0
- package/dist/context/context/create-headless-context.d.ts.map +1 -0
- package/dist/context/context/create-headless-context.js +42 -0
- package/dist/context/context/create-headless-context.js.map +1 -0
- package/dist/context/context/webgl-checks.js +0 -3
- package/dist/context/context/webgl-checks.js.map +1 -1
- package/dist/context/debug/spector.d.ts +1 -0
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +7 -19
- package/dist/context/debug/spector.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +8 -32
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +6 -5
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +8 -18
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts +103 -103
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +16 -34
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/context/polyfill/context-data.d.ts +13 -0
- package/dist/context/polyfill/context-data.d.ts.map +1 -0
- package/dist/context/polyfill/context-data.js +12 -0
- package/dist/context/polyfill/context-data.js.map +1 -0
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.js +1 -6
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +20 -28
- package/dist/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/context/polyfill/polyfill-table.d.ts +8 -8
- package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-table.js +8 -30
- package/dist/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.js +0 -4
- package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +15 -50
- package/dist/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/context/state-tracker/with-parameters.d.ts +2 -1
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +7 -9
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/dist.dev.js +9205 -0
- package/dist/index.cjs +5948 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -26
- package/dist/index.js.map +1 -1
- package/dist/types/webgl.d.ts +8 -7
- package/dist/types/webgl.d.ts.map +1 -1
- package/dist/types/webgl.js.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist.min.js +36 -0
- package/package.json +18 -9
- package/src/adapter/converters/device-parameters.ts +44 -15
- package/src/adapter/converters/sampler-parameters.ts +18 -7
- package/src/adapter/converters/texture-formats.ts +18 -16
- package/src/adapter/converters/vertex-formats.ts +1 -0
- package/src/adapter/device-helpers/device-features.ts +9 -2
- package/src/adapter/device-helpers/device-limits.ts +1 -1
- package/src/adapter/device-helpers/get-device-info.ts +12 -8
- package/src/adapter/helpers/get-shader-info.ts +37 -0
- package/src/adapter/helpers/get-shader-layout.ts +58 -36
- package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
- package/src/adapter/helpers/set-uniform.ts +3 -1
- package/src/adapter/helpers/uniforms.ts +21 -10
- package/src/adapter/objects/constants-to-keys.ts +4 -1
- package/src/adapter/objects/webgl-renderbuffer.ts +5 -5
- package/src/adapter/objects/webgl-resource.ts +7 -12
- package/src/adapter/objects/webgl-vertex-array-object.ts +5 -5
- package/src/adapter/resources/webgl-buffer.ts +14 -14
- package/src/adapter/resources/webgl-command-encoder.ts +5 -5
- package/src/adapter/resources/webgl-framebuffer.ts +14 -11
- package/src/adapter/resources/webgl-render-pass.ts +2 -1
- package/src/adapter/resources/webgl-render-pipeline.ts +83 -71
- package/src/adapter/resources/webgl-sampler.ts +10 -4
- package/src/adapter/resources/webgl-shader.ts +9 -8
- package/src/adapter/resources/webgl-texture.ts +51 -41
- package/src/adapter/webgl-canvas-context.ts +5 -6
- package/src/adapter/webgl-device.ts +144 -60
- package/src/classic/accessor.ts +1 -14
- package/src/classic/buffer.ts +14 -21
- package/src/classic/typed-array-utils.ts +4 -2
- package/src/context/context/{create-context.ts → create-browser-context.ts} +17 -7
- package/src/context/context/create-headless-context.ts +48 -0
- package/src/context/debug/spector.ts +6 -5
- package/src/context/debug/webgl-developer-tools.ts +13 -13
- package/src/context/parameters/unified-parameter-api.ts +17 -11
- package/src/context/parameters/webgl-parameter-tables.ts +113 -94
- package/src/context/polyfill/context-data.ts +27 -0
- package/src/context/polyfill/get-parameter-polyfill.ts +7 -6
- package/src/context/polyfill/polyfill-context.ts +6 -8
- package/src/context/polyfill/polyfill-table.ts +16 -14
- package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
- package/src/context/state-tracker/track-context-state.ts +13 -12
- package/src/context/state-tracker/with-parameters.ts +8 -2
- package/src/index.ts +14 -12
- package/src/types/webgl.ts +10 -7
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/bundle.js.map +0 -1
- package/dist/context/context/context-state.d.ts +0 -18
- package/dist/context/context/context-state.d.ts.map +0 -1
- package/dist/context/context/context-state.js +0 -26
- package/dist/context/context/context-state.js.map +0 -1
- package/dist/context/context/create-context.d.ts.map +0 -1
- package/dist/context/context/create-context.js.map +0 -1
- package/dist/context/context/device-pixels.d.ts +0 -25
- package/dist/context/context/device-pixels.d.ts.map +0 -1
- package/dist/context/context/device-pixels.js +0 -98
- package/dist/context/context/device-pixels.js.map +0 -1
- package/dist/es5/adapter/converters/device-parameters.js +0 -170
- package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
- package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
- package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
- package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/es5/adapter/converters/texture-formats.js +0 -1031
- package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
- package/dist/es5/adapter/converters/vertex-formats.js +0 -45
- package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/es5/adapter/device-helpers/device-features.js +0 -144
- package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
- package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
- package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
- package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
- package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
- package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
- package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/es5/adapter/helpers/set-uniform.js +0 -125
- package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/es5/adapter/helpers/uniforms.js +0 -112
- package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
- package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
- package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
- package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-resource.js +0 -292
- package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
- package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
- package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
- package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
- package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
- package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
- package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
- package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
- package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
- package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-shader.js +0 -149
- package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-texture.js +0 -986
- package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/es5/adapter/webgl-canvas-context.js +0 -97
- package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/es5/adapter/webgl-device.js +0 -399
- package/dist/es5/adapter/webgl-device.js.map +0 -1
- package/dist/es5/bundle.js +0 -7
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/classic/accessor.js +0 -181
- package/dist/es5/classic/accessor.js.map +0 -1
- package/dist/es5/classic/buffer.js +0 -470
- package/dist/es5/classic/buffer.js.map +0 -1
- package/dist/es5/classic/typed-array-utils.js +0 -126
- package/dist/es5/classic/typed-array-utils.js.map +0 -1
- package/dist/es5/context/context/context-state.js +0 -31
- package/dist/es5/context/context/context-state.js.map +0 -1
- package/dist/es5/context/context/create-context.js +0 -69
- package/dist/es5/context/context/create-context.js.map +0 -1
- package/dist/es5/context/context/device-pixels.js +0 -115
- package/dist/es5/context/context/device-pixels.js.map +0 -1
- package/dist/es5/context/context/webgl-checks.js +0 -54
- package/dist/es5/context/context/webgl-checks.js.map +0 -1
- package/dist/es5/context/debug/spector.js +0 -133
- package/dist/es5/context/debug/spector.js.map +0 -1
- package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
- package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
- package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
- package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
- package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-context.js +0 -135
- package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-table.js +0 -166
- package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
- package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
- package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/es5/context/state-tracker/track-context-state.js +0 -211
- package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/es5/context/state-tracker/with-parameters.js +0 -44
- package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/es5/index.js +0 -276
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/init.js +0 -10
- package/dist/es5/init.js.map +0 -1
- package/dist/es5/types/webgl.js +0 -6
- package/dist/es5/types/webgl.js.map +0 -1
- package/dist/es5/types.js +0 -2
- package/dist/es5/types.js.map +0 -1
- package/dist/esm/adapter/converters/device-parameters.js +0 -155
- package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
- package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
- package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
- package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/esm/adapter/converters/texture-formats.js +0 -954
- package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
- package/dist/esm/adapter/converters/vertex-formats.js +0 -35
- package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/esm/adapter/device-helpers/device-features.js +0 -102
- package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
- package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
- package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
- package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
- package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
- package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
- package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/esm/adapter/helpers/set-uniform.js +0 -115
- package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/esm/adapter/helpers/uniforms.js +0 -99
- package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
- package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
- package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
- package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-resource.js +0 -216
- package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
- package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
- package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
- package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
- package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
- package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
- package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
- package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
- package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
- package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-shader.js +0 -75
- package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-texture.js +0 -831
- package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/esm/adapter/webgl-canvas-context.js +0 -54
- package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/esm/adapter/webgl-device.js +0 -280
- package/dist/esm/adapter/webgl-device.js.map +0 -1
- package/dist/esm/bundle.js +0 -5
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/classic/accessor.js +0 -144
- package/dist/esm/classic/accessor.js.map +0 -1
- package/dist/esm/classic/buffer.js +0 -384
- package/dist/esm/classic/buffer.js.map +0 -1
- package/dist/esm/classic/typed-array-utils.js +0 -112
- package/dist/esm/classic/typed-array-utils.js.map +0 -1
- package/dist/esm/context/context/context-state.js +0 -26
- package/dist/esm/context/context/context-state.js.map +0 -1
- package/dist/esm/context/context/create-context.js +0 -49
- package/dist/esm/context/context/create-context.js.map +0 -1
- package/dist/esm/context/context/device-pixels.js +0 -98
- package/dist/esm/context/context/device-pixels.js.map +0 -1
- package/dist/esm/context/context/webgl-checks.js +0 -34
- package/dist/esm/context/context/webgl-checks.js.map +0 -1
- package/dist/esm/context/debug/spector.js +0 -76
- package/dist/esm/context/debug/spector.js.map +0 -1
- package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
- package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
- package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
- package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
- package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-context.js +0 -92
- package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-table.js +0 -160
- package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
- package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/esm/context/state-tracker/track-context-state.js +0 -183
- package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/esm/context/state-tracker/with-parameters.js +0 -36
- package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/esm/index.js +0 -27
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/init.js +0 -4
- package/dist/esm/init.js.map +0 -1
- package/dist/esm/types/webgl.js +0 -2
- package/dist/esm/types/webgl.js.map +0 -1
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
- package/dist/init.d.ts +0 -2
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -4
- package/dist/init.js.map +0 -1
- package/src/bundle.ts +0 -4
- package/src/context/context/context-state.ts +0 -41
- package/src/context/context/device-pixels.ts +0 -152
- package/src/init.ts +0 -4
|
@@ -7,12 +7,15 @@ import type {
|
|
|
7
7
|
CanvasContextProps,
|
|
8
8
|
TextureFormat
|
|
9
9
|
} from '@luma.gl/api';
|
|
10
|
-
import {Device, CanvasContext, log,
|
|
10
|
+
import {Device, CanvasContext, log, uid} from '@luma.gl/api';
|
|
11
11
|
import {isBrowser} from '@probe.gl/env';
|
|
12
12
|
import {polyfillContext} from '../context/polyfill/polyfill-context';
|
|
13
|
-
import {trackContextState} from '../context/state-tracker/track-context-state';
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
13
|
+
import {popContextState, pushContextState, trackContextState} from '../context/state-tracker/track-context-state';
|
|
14
|
+
import {createBrowserContext} from '../context/context/create-browser-context';
|
|
15
|
+
import {
|
|
16
|
+
createHeadlessContext,
|
|
17
|
+
isHeadlessGLRegistered
|
|
18
|
+
} from '../context/context/create-headless-context';
|
|
16
19
|
import {getDeviceInfo} from './device-helpers/get-device-info';
|
|
17
20
|
import {getDeviceFeatures} from './device-helpers/device-features';
|
|
18
21
|
import {getDeviceLimits, getWebGLLimits, WebGLLimits} from './device-helpers/device-limits';
|
|
@@ -29,17 +32,17 @@ import {
|
|
|
29
32
|
import type {
|
|
30
33
|
BufferProps,
|
|
31
34
|
ShaderProps,
|
|
32
|
-
Sampler,
|
|
35
|
+
// Sampler,
|
|
33
36
|
SamplerProps,
|
|
34
37
|
TextureProps,
|
|
35
38
|
ExternalTexture,
|
|
36
39
|
ExternalTextureProps,
|
|
37
40
|
FramebufferProps,
|
|
38
|
-
RenderPipeline,
|
|
41
|
+
// RenderPipeline,
|
|
39
42
|
RenderPipelineProps,
|
|
40
43
|
ComputePipeline,
|
|
41
44
|
ComputePipelineProps,
|
|
42
|
-
RenderPass,
|
|
45
|
+
// RenderPass,
|
|
43
46
|
RenderPassProps,
|
|
44
47
|
ComputePass,
|
|
45
48
|
ComputePassProps
|
|
@@ -56,21 +59,21 @@ import WEBGLRenderPipeline from './resources/webgl-render-pipeline';
|
|
|
56
59
|
|
|
57
60
|
const LOG_LEVEL = 1;
|
|
58
61
|
|
|
59
|
-
let counter = 0;
|
|
60
|
-
|
|
61
62
|
/** WebGPU style Device API for a WebGL context */
|
|
62
|
-
export default class WebGLDevice extends Device
|
|
63
|
-
//
|
|
63
|
+
export default class WebGLDevice extends Device {
|
|
64
|
+
//
|
|
65
|
+
// Public `Device` API
|
|
66
|
+
//
|
|
64
67
|
|
|
65
68
|
static type: string = 'webgl';
|
|
66
69
|
|
|
67
70
|
static isSupported(): boolean {
|
|
68
|
-
return typeof WebGLRenderingContext !== 'undefined';
|
|
71
|
+
return typeof WebGLRenderingContext !== 'undefined' || isHeadlessGLRegistered();
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
readonly info: DeviceInfo;
|
|
72
75
|
readonly canvasContext: WebGLCanvasContext;
|
|
73
|
-
|
|
76
|
+
|
|
74
77
|
readonly handle: WebGLRenderingContext;
|
|
75
78
|
|
|
76
79
|
get features(): Set<DeviceFeature> {
|
|
@@ -83,36 +86,15 @@ export default class WebGLDevice extends Device implements ContextState {
|
|
|
83
86
|
return this._limits;
|
|
84
87
|
}
|
|
85
88
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
/** WebGL1 typed context. Can always be used. */
|
|
89
|
-
readonly gl: WebGLRenderingContext;
|
|
90
|
-
/** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
|
|
91
|
-
readonly gl2: WebGL2RenderingContext;
|
|
92
|
-
readonly debug: boolean = false;
|
|
93
|
-
|
|
94
|
-
/** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
|
|
95
|
-
readonly isWebGL1: boolean;
|
|
96
|
-
/** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
|
|
97
|
-
readonly isWebGL2: boolean;
|
|
89
|
+
readonly lost: Promise<{reason: 'destroyed'; message: string}>;
|
|
98
90
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
91
|
+
private _resolveContextLost?: (value: {reason: 'destroyed'; message: string}) => void;
|
|
92
|
+
private _features?: Set<DeviceFeature>;
|
|
93
|
+
private _limits?: DeviceLimits;
|
|
103
94
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
/** State used by luma.gl classes: TODO - move to canvasContext*/
|
|
109
|
-
readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
|
|
110
|
-
/** State used by luma.gl classes */
|
|
111
|
-
readonly _extensions: Record<string, any> = {};
|
|
112
|
-
_polyfilled: boolean = false;
|
|
113
|
-
|
|
114
|
-
/** Instance of Spector.js (if initialized) */
|
|
115
|
-
spector;
|
|
95
|
+
//
|
|
96
|
+
// Static methods, expected to be present by `luma.createDevice()`
|
|
97
|
+
//
|
|
116
98
|
|
|
117
99
|
/**
|
|
118
100
|
* Get a device instance from a GL context
|
|
@@ -135,7 +117,7 @@ export default class WebGLDevice extends Device implements ContextState {
|
|
|
135
117
|
return new WebGLDevice({gl: gl as WebGLRenderingContext});
|
|
136
118
|
}
|
|
137
119
|
|
|
138
|
-
static async create(props
|
|
120
|
+
static async create(props: DeviceProps = {}): Promise<WebGLDevice> {
|
|
139
121
|
log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created');
|
|
140
122
|
|
|
141
123
|
// Wait for page to load. Only wait when props. canvas is string
|
|
@@ -153,25 +135,54 @@ export default class WebGLDevice extends Device implements ContextState {
|
|
|
153
135
|
await loadSpectorJS();
|
|
154
136
|
}
|
|
155
137
|
|
|
156
|
-
log.probe(LOG_LEVEL, 'DOM is loaded')();
|
|
138
|
+
log.probe(LOG_LEVEL + 1, 'DOM is loaded')();
|
|
139
|
+
|
|
140
|
+
// @ts-expect-error
|
|
141
|
+
if (props.gl && props.gl.device) {
|
|
142
|
+
return WebGLDevice.attach(props.gl);
|
|
143
|
+
}
|
|
144
|
+
|
|
157
145
|
return new WebGLDevice(props);
|
|
158
146
|
}
|
|
159
147
|
|
|
148
|
+
//
|
|
149
|
+
// Public API
|
|
150
|
+
//
|
|
151
|
+
|
|
160
152
|
constructor(props: DeviceProps) {
|
|
161
|
-
super(props);
|
|
153
|
+
super({...props, id: props.id || uid('webgl-device')});
|
|
162
154
|
|
|
163
155
|
// If attaching to an already attached context, return the attached device
|
|
164
156
|
// @ts-expect-error device is attached to context
|
|
165
157
|
const device: WebGLDevice | undefined = props.gl?.device;
|
|
166
158
|
if (device) {
|
|
167
|
-
|
|
168
|
-
return device;
|
|
159
|
+
throw new Error(`WebGL context already attached to device ${device.id}`);
|
|
169
160
|
}
|
|
170
161
|
|
|
171
162
|
// Create and instrument context
|
|
172
163
|
this.canvasContext = new WebGLCanvasContext(this, props);
|
|
173
164
|
|
|
174
|
-
this.
|
|
165
|
+
this.lost = new Promise<{reason: 'destroyed'; message: string}>((resolve) => {
|
|
166
|
+
this._resolveContextLost = resolve;
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
const onContextLost = (event: Event) =>
|
|
170
|
+
this._resolveContextLost?.({
|
|
171
|
+
reason: 'destroyed',
|
|
172
|
+
message: 'Computer entered sleep mode, or too many apps or browser tabs are using the GPU.'
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl || null;
|
|
176
|
+
gl =
|
|
177
|
+
gl ||
|
|
178
|
+
(isBrowser() ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost}) : null);
|
|
179
|
+
gl = gl || (!isBrowser() ? createHeadlessContext({...props, onContextLost}) : null);
|
|
180
|
+
|
|
181
|
+
if (!gl) {
|
|
182
|
+
throw new Error('WebGL context creation failed');
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
this.handle = gl;
|
|
175
186
|
this.gl = this.handle;
|
|
176
187
|
this.gl2 = this.gl as WebGL2RenderingContext;
|
|
177
188
|
this.isWebGL2 = isWebGL2(this.gl);
|
|
@@ -182,13 +193,20 @@ export default class WebGLDevice extends Device implements ContextState {
|
|
|
182
193
|
|
|
183
194
|
// @ts-expect-error Link webgl context back to device
|
|
184
195
|
this.gl.device = this;
|
|
185
|
-
// @ts-expect-error Annotate webgl context to handle
|
|
196
|
+
// @ts-expect-error Annotate webgl context to handle
|
|
186
197
|
this.gl._version = this.isWebGL2 ? 2 : 1;
|
|
187
198
|
|
|
188
199
|
// Add subset of WebGL2 methods to WebGL1 context
|
|
189
200
|
polyfillContext(this.gl);
|
|
201
|
+
|
|
190
202
|
// Install context state tracking
|
|
191
|
-
|
|
203
|
+
// @ts-expect-error - hidden parameters
|
|
204
|
+
const {enable = true, copyState = false} = props;
|
|
205
|
+
trackContextState(this.gl, {
|
|
206
|
+
enable,
|
|
207
|
+
copyState,
|
|
208
|
+
log: (...args: any[]) => log.log(1, ...args)()
|
|
209
|
+
});
|
|
192
210
|
|
|
193
211
|
// DEBUG contexts: Add debug instrumentation to the context, force log level to at least 1
|
|
194
212
|
if (isBrowser() && props.debug) {
|
|
@@ -218,16 +236,11 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
|
|
|
218
236
|
* Destroys the context
|
|
219
237
|
* @note Has no effect for browser contexts, there is no browser API for destroying contexts
|
|
220
238
|
*/
|
|
221
|
-
destroy() {
|
|
222
|
-
|
|
239
|
+
destroy(): void {
|
|
240
|
+
const ext = this.gl.getExtension('STACKGL_destroy_context');
|
|
223
241
|
if (ext) {
|
|
224
242
|
ext.destroy();
|
|
225
243
|
}
|
|
226
|
-
// ext = this.gl.getExtension('WEBGL_lose_context');
|
|
227
|
-
// if (ext) {
|
|
228
|
-
// // TODO - disconnect context lost callbacks?
|
|
229
|
-
// ext.loseContext();
|
|
230
|
-
// }
|
|
231
244
|
}
|
|
232
245
|
|
|
233
246
|
get isLost(): boolean {
|
|
@@ -254,7 +267,9 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
|
|
|
254
267
|
|
|
255
268
|
/** Returns a WebGL2RenderingContext or throws an error */
|
|
256
269
|
assertWebGL2(): WebGL2RenderingContext {
|
|
257
|
-
|
|
270
|
+
if (!this.gl2) {
|
|
271
|
+
throw new Error('Requires WebGL2');
|
|
272
|
+
}
|
|
258
273
|
return this.gl2;
|
|
259
274
|
}
|
|
260
275
|
|
|
@@ -304,7 +319,7 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
|
|
|
304
319
|
throw new Error('compute shaders not supported in WebGL');
|
|
305
320
|
}
|
|
306
321
|
|
|
307
|
-
private renderPass: WEBGLRenderPass;
|
|
322
|
+
private renderPass: WEBGLRenderPass | null = null;
|
|
308
323
|
|
|
309
324
|
getDefaultRenderPass(): WEBGLRenderPass {
|
|
310
325
|
this.renderPass =
|
|
@@ -321,10 +336,80 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
|
|
|
321
336
|
* Chrome's offscreen canvas does not require gl.commit
|
|
322
337
|
*/
|
|
323
338
|
submit(): void {
|
|
324
|
-
this.renderPass
|
|
339
|
+
this.renderPass?.end();
|
|
325
340
|
this.renderPass = null;
|
|
326
341
|
// this.canvasContext.commit();
|
|
327
342
|
}
|
|
343
|
+
|
|
344
|
+
//
|
|
345
|
+
// WebGL-only API (not part of `Device` API)
|
|
346
|
+
//
|
|
347
|
+
|
|
348
|
+
/** WebGL1 typed context. Can always be used. */
|
|
349
|
+
readonly gl: WebGLRenderingContext;
|
|
350
|
+
/** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
|
|
351
|
+
readonly gl2: WebGL2RenderingContext | null = null;
|
|
352
|
+
readonly debug: boolean = false;
|
|
353
|
+
|
|
354
|
+
/** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
|
|
355
|
+
readonly isWebGL1: boolean;
|
|
356
|
+
/** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
|
|
357
|
+
readonly isWebGL2: boolean;
|
|
358
|
+
|
|
359
|
+
/** State used by luma.gl classes: TODO - move to canvasContext*/
|
|
360
|
+
readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
|
|
361
|
+
|
|
362
|
+
/** State used by luma.gl classes - TODO - not used? */
|
|
363
|
+
readonly _extensions: Record<string, any> = {};
|
|
364
|
+
_polyfilled: boolean = false;
|
|
365
|
+
|
|
366
|
+
/** Instance of Spector.js (if initialized) */
|
|
367
|
+
spector;
|
|
368
|
+
|
|
369
|
+
private _webglLimits?: WebGLLimits;
|
|
370
|
+
|
|
371
|
+
/** Return WebGL specific limits */
|
|
372
|
+
get webglLimits() : WebGLLimits {
|
|
373
|
+
this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
|
|
374
|
+
return this._webglLimits;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Loses the context
|
|
379
|
+
* @note Triggers context loss, mainly for testing
|
|
380
|
+
* @todo Promote to `Device` API?
|
|
381
|
+
*/
|
|
382
|
+
loseDevice(): void {
|
|
383
|
+
const ext = this.gl.getExtension('WEBGL_lose_context');
|
|
384
|
+
if (ext) {
|
|
385
|
+
ext.loseContext();
|
|
386
|
+
}
|
|
387
|
+
// loseContext should trigger context loss callback but
|
|
388
|
+
this._resolveContextLost?.({
|
|
389
|
+
reason: 'destroyed',
|
|
390
|
+
message: 'Application triggered context loss'
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/** Save current WebGL context state onto an internal stack */
|
|
395
|
+
pushState(): void {
|
|
396
|
+
pushContextState(this.gl);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/** Restores previously saved context state */
|
|
400
|
+
popState(): void {
|
|
401
|
+
popContextState(this.gl);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Storing data on a special field on WebGLObjects makes that data visible in SPECTOR chrome debug extension
|
|
406
|
+
* luma.gl ids and props can be inspected
|
|
407
|
+
*/
|
|
408
|
+
setSpectorMetadata(handle: unknown, props: Record<string, unknown>) {
|
|
409
|
+
// @ts-expect-error
|
|
410
|
+
// eslint-disable-next-line camelcase
|
|
411
|
+
handle.__SPECTOR_Metadata = props;
|
|
412
|
+
}
|
|
328
413
|
}
|
|
329
414
|
|
|
330
415
|
/** Check if supplied parameter is a WebGLRenderingContext */
|
|
@@ -339,7 +424,6 @@ function isWebGL(gl: any): boolean {
|
|
|
339
424
|
return Boolean(gl && Number.isFinite(gl._version));
|
|
340
425
|
}
|
|
341
426
|
|
|
342
|
-
|
|
343
427
|
/** Check if supplied parameter is a WebGL2RenderingContext */
|
|
344
428
|
function isWebGL2(gl: any): boolean {
|
|
345
429
|
if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {
|
package/src/classic/accessor.ts
CHANGED
|
@@ -2,19 +2,6 @@ import {assert, checkProps, Buffer, AccessorObject} from '@luma.gl/api';
|
|
|
2
2
|
import GL from '@luma.gl/constants';
|
|
3
3
|
import {getTypedArrayFromGLType} from './typed-array-utils';
|
|
4
4
|
|
|
5
|
-
// export interface AccessorObject {
|
|
6
|
-
// offset?: number;
|
|
7
|
-
// stride?: number;
|
|
8
|
-
// type?: number;
|
|
9
|
-
// size?: number;
|
|
10
|
-
// divisor?: number;
|
|
11
|
-
// normalized?: boolean;
|
|
12
|
-
// integer?: boolean;
|
|
13
|
-
|
|
14
|
-
// buffer?: Buffer;
|
|
15
|
-
// index?: number;
|
|
16
|
-
// }
|
|
17
|
-
|
|
18
5
|
const DEFAULT_ACCESSOR_VALUES = {
|
|
19
6
|
offset: 0,
|
|
20
7
|
stride: 0,
|
|
@@ -98,7 +85,7 @@ export default class Accessor implements AccessorObject {
|
|
|
98
85
|
|
|
99
86
|
// Auto-deduce integer type?
|
|
100
87
|
if (props.type === GL.INT || props.type === GL.UNSIGNED_INT) {
|
|
101
|
-
|
|
88
|
+
this.integer = true;
|
|
102
89
|
}
|
|
103
90
|
}
|
|
104
91
|
if (props.size !== undefined) {
|
package/src/classic/buffer.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
|
|
1
3
|
import type {Device, BufferProps, TypedArray} from '@luma.gl/api';
|
|
2
|
-
import {
|
|
4
|
+
import {assert, checkProps} from '@luma.gl/api';
|
|
3
5
|
import GL from '@luma.gl/constants';
|
|
4
6
|
import {assertWebGL2Context} from '../context/context/webgl-checks';
|
|
5
7
|
import {AccessorObject} from '../types';
|
|
@@ -48,11 +50,11 @@ function getWEBGLBufferProps(props: ClassicBufferProps | ArrayBufferView | numbe
|
|
|
48
50
|
|
|
49
51
|
// Signature: `new Buffer(gl, 100)`
|
|
50
52
|
else if (typeof props === 'number') {
|
|
51
|
-
return {byteLength: props
|
|
53
|
+
return {byteLength: props };
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
props = checkProps('Buffer', props, PROP_CHECKS_INITIALIZE);
|
|
55
|
-
const bufferProps = {...props
|
|
57
|
+
const bufferProps = {...props };
|
|
56
58
|
if (bufferProps.offset) {
|
|
57
59
|
bufferProps.byteOffset = bufferProps.offset;
|
|
58
60
|
}
|
|
@@ -106,19 +108,10 @@ export default class ClassicBuffer extends WEBGLBuffer {
|
|
|
106
108
|
Object.seal(this);
|
|
107
109
|
}
|
|
108
110
|
|
|
109
|
-
|
|
110
|
-
if (this.handle) {
|
|
111
|
-
this.removeStats();
|
|
112
|
-
this.trackDeallocatedMemory();
|
|
113
|
-
this.gl.deleteBuffer(this.handle);
|
|
114
|
-
// @ts-expect-error
|
|
115
|
-
this.handle = null;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
write(data: TypedArray, byteOffset?: number): void {
|
|
111
|
+
override write(data: TypedArray, byteOffset?: number): void {
|
|
120
112
|
this.subData({data, offset: byteOffset});
|
|
121
113
|
}
|
|
114
|
+
|
|
122
115
|
// returns number of elements in the buffer (assuming that the full buffer is used)
|
|
123
116
|
getElementCount(accessor: AccessorObject = this.accessor): number {
|
|
124
117
|
return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));
|
|
@@ -264,7 +257,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
|
|
|
264
257
|
// Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type
|
|
265
258
|
gl.bindBuffer(GL.COPY_READ_BUFFER, sourceBuffer.handle);
|
|
266
259
|
gl.bindBuffer(GL.COPY_WRITE_BUFFER, this.handle);
|
|
267
|
-
gl2
|
|
260
|
+
gl2?.copyBufferSubData(GL.COPY_READ_BUFFER, GL.COPY_WRITE_BUFFER, readOffset, writeOffset, size);
|
|
268
261
|
gl.bindBuffer(GL.COPY_READ_BUFFER, null);
|
|
269
262
|
gl.bindBuffer(GL.COPY_WRITE_BUFFER, null);
|
|
270
263
|
|
|
@@ -278,7 +271,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
|
|
|
278
271
|
* Reads data from buffer into an ArrayBufferView or SharedArrayBuffer.
|
|
279
272
|
* @note WEBGL2 ONLY
|
|
280
273
|
*/
|
|
281
|
-
getData(options?: {
|
|
274
|
+
override getData(options?: {
|
|
282
275
|
dstData?: any;
|
|
283
276
|
srcByteOffset?: number;
|
|
284
277
|
dstOffset?: number;
|
|
@@ -314,7 +307,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
|
|
|
314
307
|
|
|
315
308
|
// Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type
|
|
316
309
|
this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);
|
|
317
|
-
this.gl2
|
|
310
|
+
this.gl2?.getBufferSubData(GL.COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);
|
|
318
311
|
this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);
|
|
319
312
|
|
|
320
313
|
// TODO - update local `data` if offsets are 0
|
|
@@ -340,10 +333,10 @@ export default class ClassicBuffer extends WEBGLBuffer {
|
|
|
340
333
|
// uniform buffer state. Instead indexed bindings need to be made.
|
|
341
334
|
if (target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER) {
|
|
342
335
|
if (size !== undefined) {
|
|
343
|
-
this.gl2
|
|
336
|
+
this.gl2?.bindBufferRange(target, index, this.handle, offset, size);
|
|
344
337
|
} else {
|
|
345
338
|
assert(offset === 0); // Make sure offset wasn't supplied
|
|
346
|
-
this.gl2
|
|
339
|
+
this.gl2?.bindBufferBase(target, index, this.handle);
|
|
347
340
|
}
|
|
348
341
|
} else {
|
|
349
342
|
this.gl.bindBuffer(target, this.handle);
|
|
@@ -356,7 +349,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
|
|
|
356
349
|
const {target = this.target, index = this.accessor && this.accessor.index} = options || {};
|
|
357
350
|
const isIndexedBuffer = target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER;
|
|
358
351
|
if (isIndexedBuffer) {
|
|
359
|
-
this.gl2
|
|
352
|
+
this.gl2?.bindBufferBase(target, index, null);
|
|
360
353
|
} else {
|
|
361
354
|
this.gl.bindBuffer(target, null);
|
|
362
355
|
}
|
|
@@ -369,7 +362,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
|
|
|
369
362
|
getDebugData(): {
|
|
370
363
|
data: any;
|
|
371
364
|
changed: boolean;
|
|
372
|
-
|
|
365
|
+
} {
|
|
373
366
|
if (!this.debugData) {
|
|
374
367
|
this.debugData = this.getData({length: Math.min(DEBUG_DATA_LENGTH, this.byteLength)});
|
|
375
368
|
return {data: this.debugData, changed: true};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import {TypedArray} from '@luma.gl/api';
|
|
2
4
|
import GL from '@luma.gl/constants';
|
|
3
5
|
import {GLType} from '../types/webgl'
|
|
4
6
|
|
|
@@ -90,7 +92,7 @@ export function getTypedArrayFromGLType(
|
|
|
90
92
|
* how-can-i-flip-the-result-of-webglrenderingcontext-readpixels
|
|
91
93
|
* @param {*} param0
|
|
92
94
|
*/
|
|
93
|
-
|
|
95
|
+
export function flipRows(options: {
|
|
94
96
|
data: any;
|
|
95
97
|
width: any;
|
|
96
98
|
height: any;
|
|
@@ -37,7 +37,9 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
|
|
|
37
37
|
webgl2: true, // Attempt to create a WebGL2 context
|
|
38
38
|
webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)
|
|
39
39
|
powerPreference: 'high-performance', // After all, most apps are using WebGL for performance reasons
|
|
40
|
+
// eslint-disable-next-line no-console
|
|
40
41
|
onContextLost: () => console.error('WebGL context lost'),
|
|
42
|
+
// eslint-disable-next-line no-console
|
|
41
43
|
onContextRestored: () => console.info('WebGL context restored'),
|
|
42
44
|
};
|
|
43
45
|
|
|
@@ -46,8 +48,8 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
|
|
|
46
48
|
* Note calling this multiple time on the same canvas does return the same context
|
|
47
49
|
* @param canvas A canvas element or offscreen canvas
|
|
48
50
|
*/
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
export function createBrowserContext(canvas: HTMLCanvasElement | OffscreenCanvas, props: ContextProps): WebGLRenderingContext {
|
|
52
|
+
props = {...DEFAULT_CONTEXT_PROPS, ...props};
|
|
51
53
|
|
|
52
54
|
// Try to extract any extra information about why context creation failed
|
|
53
55
|
let errorMessage = null;
|
|
@@ -55,7 +57,7 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
|
|
|
55
57
|
canvas.addEventListener('webglcontextcreationerror', onCreateError, false);
|
|
56
58
|
|
|
57
59
|
// Create the desired context
|
|
58
|
-
let gl = null;
|
|
60
|
+
let gl: WebGLRenderingContext | null = null;
|
|
59
61
|
|
|
60
62
|
if (props.type === 'webgl2') {
|
|
61
63
|
props = {...props, webgl1: false};
|
|
@@ -66,10 +68,10 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
|
|
|
66
68
|
|
|
67
69
|
// Prefer webgl2 over webgl1 if both are acceptable
|
|
68
70
|
if (props.webgl2) {
|
|
69
|
-
gl = gl || canvas.getContext('webgl2', props);
|
|
71
|
+
gl = gl || canvas.getContext('webgl2', props) as WebGL2RenderingContext | null;
|
|
70
72
|
}
|
|
71
73
|
if (props.webgl1) {
|
|
72
|
-
gl = gl || canvas.getContext('webgl', props);
|
|
74
|
+
gl = gl || canvas.getContext('webgl', props) as WebGLRenderingContext | null;
|
|
73
75
|
}
|
|
74
76
|
|
|
75
77
|
// TODO are we removing this listener before giving it a chance to fire?
|
|
@@ -83,8 +85,16 @@ const DEFAULT_CONTEXT_PROPS: ContextProps = {
|
|
|
83
85
|
);
|
|
84
86
|
}
|
|
85
87
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
if (props.onContextLost) {
|
|
89
|
+
// Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.
|
|
90
|
+
const {onContextLost} = props;
|
|
91
|
+
canvas.addEventListener('webglcontextlost',(event: Event) => onContextLost(event), false);
|
|
92
|
+
}
|
|
93
|
+
if (props.onContextRestored) {
|
|
94
|
+
// Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.
|
|
95
|
+
const {onContextRestored} = props;
|
|
96
|
+
canvas.addEventListener('webglcontextrestored', (event: Event) => onContextRestored(event), false);
|
|
97
|
+
}
|
|
88
98
|
|
|
89
99
|
return gl;
|
|
90
100
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const ERR_HEADLESSGL_FAILED =
|
|
2
|
+
'Failed to create WebGL context in Node.js, headless gl returned null';
|
|
3
|
+
|
|
4
|
+
const ERR_HEADLESSGL_LOAD = '\
|
|
5
|
+
luma.gl: loaded under Node.js without headless gl installed, meaning that WebGL \
|
|
6
|
+
contexts can not be created. This may not be an error. For example, this is a \
|
|
7
|
+
typical configuration for isorender applications running on the server.';
|
|
8
|
+
|
|
9
|
+
const CONTEXT_DEFAULTS = {
|
|
10
|
+
width: 1,
|
|
11
|
+
height: 1,
|
|
12
|
+
debug: true,
|
|
13
|
+
throwOnError: false
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/** Duck typing for the main headless gl export, a function to create contexts */
|
|
17
|
+
export type HeadlessGL = (width: number, height: number, options: Record<string, unknown>) => WebGLRenderingContext;
|
|
18
|
+
|
|
19
|
+
let headlessGL: HeadlessGL | null = null;
|
|
20
|
+
|
|
21
|
+
/** By importing `gl` and registering it with this function, contexts can be created under Node.js */
|
|
22
|
+
export function registerHeadlessGL(headlessgl: HeadlessGL) {
|
|
23
|
+
headlessGL = headlessgl;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** @returns true if headless gl is registered */
|
|
27
|
+
export function isHeadlessGLRegistered(): boolean {
|
|
28
|
+
return headlessGL !== null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Create headless gl context (for running under Node.js) */
|
|
32
|
+
export function createHeadlessContext(options?: Record<string, any>): WebGLRenderingContext {
|
|
33
|
+
options = {...CONTEXT_DEFAULTS, ...options};
|
|
34
|
+
|
|
35
|
+
const {width, height, webgl1, webgl2} = options;
|
|
36
|
+
|
|
37
|
+
if (webgl2 && !webgl1) {
|
|
38
|
+
throw new Error('headless-gl does not support WebGL2');
|
|
39
|
+
}
|
|
40
|
+
if (!headlessGL) {
|
|
41
|
+
throw new Error(ERR_HEADLESSGL_LOAD);
|
|
42
|
+
}
|
|
43
|
+
const gl = headlessGL(width, height, options);
|
|
44
|
+
if (!gl) {
|
|
45
|
+
throw new Error(ERR_HEADLESSGL_FAILED);
|
|
46
|
+
}
|
|
47
|
+
return gl;
|
|
48
|
+
}
|
|
@@ -23,6 +23,7 @@ let spector: any = null;
|
|
|
23
23
|
let initialized: boolean = false;
|
|
24
24
|
|
|
25
25
|
declare global {
|
|
26
|
+
// eslint-disable-next-line no-var
|
|
26
27
|
var SPECTOR: any;
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -32,7 +33,7 @@ export async function loadSpectorJS(props?: SpectorProps) {
|
|
|
32
33
|
try {
|
|
33
34
|
await loadScript(SPECTOR_CDN_URL);
|
|
34
35
|
} catch(error) {
|
|
35
|
-
log.warn(error)
|
|
36
|
+
log.warn(String(error))
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
}
|
|
@@ -44,7 +45,7 @@ export function initializeSpectorJS(props?: SpectorProps) {
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
if (!spector && globalThis.SPECTOR) {
|
|
47
|
-
log.probe(LOG_LEVEL,
|
|
48
|
+
log.probe(LOG_LEVEL, 'SPECTOR found and initialized')();
|
|
48
49
|
spector = new globalThis.SPECTOR.Spector();
|
|
49
50
|
if (globalThis.luma) {
|
|
50
51
|
globalThis.luma.spector = spector;
|
|
@@ -61,9 +62,9 @@ export function initializeSpectorJS(props?: SpectorProps) {
|
|
|
61
62
|
// enables recording some extra information merged in the capture like texture memory sizes and formats
|
|
62
63
|
spector.spyCanvases();
|
|
63
64
|
// A callback when results are ready
|
|
64
|
-
spector?.onCaptureStarted.add((capture: unknown) => log.info(
|
|
65
|
+
spector?.onCaptureStarted.add((capture: unknown) => log.info('Spector capture started:', capture)());
|
|
65
66
|
spector?.onCapture.add((capture: unknown) => {
|
|
66
|
-
log.info(
|
|
67
|
+
log.info('Spector capture complete:', capture)();
|
|
67
68
|
// Use undocumented Spector API to open the UI with our capture
|
|
68
69
|
// See https://github.com/BabylonJS/Spector.js/blob/767ad1195a25b85a85c381f400eb50a979239eca/src/spector.ts#L124
|
|
69
70
|
spector?.getResultUI()
|
|
@@ -82,7 +83,7 @@ export function initializeSpectorJS(props?: SpectorProps) {
|
|
|
82
83
|
// spector?.captureCanvas(props?.canvas);
|
|
83
84
|
spector?.startCapture(props?.canvas, 500); // 500 commands
|
|
84
85
|
new Promise(resolve => setTimeout(resolve, 2000)).then(_ => {
|
|
85
|
-
log.info(
|
|
86
|
+
log.info('Spector capture stopped after 2 seconds')();
|
|
86
87
|
spector?.stopCapture();
|
|
87
88
|
// spector?.displayUI();
|
|
88
89
|
});
|