@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.31
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/LICENSE +2 -1
- package/dist/adapter/converters/device-parameters.d.ts +14 -4
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +28 -46
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +5 -5
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +20 -56
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/shader-formats.d.ts +9 -0
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
- package/dist/adapter/converters/shader-formats.js +53 -0
- package/dist/adapter/converters/shader-formats.js.map +1 -0
- package/dist/adapter/converters/texture-formats.d.ts +32 -44
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +165 -201
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.d.ts +9 -3
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +48 -16
- package/dist/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/adapter/device-helpers/device-features.d.ts +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.d.ts +3 -3
- package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +2 -5
- package/dist/adapter/device-helpers/device-limits.js.map +1 -1
- 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 +9 -11
- 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/decode-webgl-types.d.ts +26 -0
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
- package/dist/adapter/helpers/{uniforms.js → decode-webgl-types.js} +20 -29
- package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
- 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 -48
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +58 -113
- 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 +2 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +3 -33
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.d.ts +11 -0
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
- package/dist/adapter/helpers/{attribute-utils.js → webgl-topology-utils.js} +2 -19
- package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
- package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +1 -28
- package/dist/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +35 -41
- package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/adapter/objects/webgl-resource.d.ts +6 -9
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +19 -75
- package/dist/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +39 -11
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js +122 -32
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +43 -71
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +169 -41
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +9 -18
- 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 +21 -24
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +41 -149
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +88 -9
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +52 -14
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +119 -182
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +7 -15
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts +3 -4
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +9 -22
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +64 -44
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +98 -213
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/webgl-canvas-context.d.ts +6 -7
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +8 -20
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +64 -41
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +133 -113
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/classic/accessor.d.ts +3 -3
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +14 -38
- package/dist/classic/accessor.js.map +1 -1
- package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -28
- package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
- package/dist/classic/{buffer.js → buffer-with-accessor.js} +54 -122
- package/dist/classic/buffer-with-accessor.js.map +1 -0
- package/dist/classic/clear.d.ts +22 -0
- package/dist/classic/clear.d.ts.map +1 -0
- package/dist/classic/clear.js +88 -0
- package/dist/classic/clear.js.map +1 -0
- package/dist/classic/copy-and-blit.d.ts +62 -0
- package/dist/classic/copy-and-blit.d.ts.map +1 -0
- package/dist/classic/copy-and-blit.js +202 -0
- package/dist/classic/copy-and-blit.js.map +1 -0
- package/dist/classic/format-utils.d.ts +3 -0
- package/dist/classic/format-utils.d.ts.map +1 -0
- package/dist/classic/format-utils.js +38 -0
- package/dist/classic/format-utils.js.map +1 -0
- package/dist/classic/typed-array-utils.d.ts +15 -17
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +1 -21
- package/dist/classic/typed-array-utils.js.map +1 -1
- package/dist/context/context/create-browser-context.d.ts +40 -0
- package/dist/context/context/create-browser-context.d.ts.map +1 -0
- package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +23 -19
- 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 +1 -4
- package/dist/context/context/webgl-checks.js.map +1 -1
- package/dist/context/debug/spector.d.ts +1 -2
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +8 -20
- package/dist/context/debug/spector.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +11 -34
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +8 -7
- 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 +105 -106
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +18 -36
- 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 +4 -9
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +21 -29
- 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 +10 -32
- 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 +16 -51
- 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 +10245 -0
- package/dist/index.cjs +6550 -0
- package/dist/index.d.ts +25 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -26
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist.min.js +37 -0
- package/package.json +21 -9
- package/src/adapter/converters/device-parameters.ts +88 -35
- package/src/adapter/converters/sampler-parameters.ts +19 -9
- package/src/adapter/converters/shader-formats.ts +41 -0
- package/src/adapter/converters/texture-formats.ts +264 -194
- package/src/adapter/converters/vertex-formats.ts +68 -10
- package/src/adapter/device-helpers/device-features.ts +10 -3
- package/src/adapter/device-helpers/device-limits.ts +3 -3
- package/src/adapter/device-helpers/get-device-info.ts +14 -10
- package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +36 -21
- package/src/adapter/helpers/get-shader-info.ts +40 -0
- package/src/adapter/helpers/get-shader-layout.ts +120 -146
- package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
- package/src/adapter/helpers/set-uniform.ts +7 -6
- package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +4 -5
- package/src/adapter/objects/constants-to-keys.ts +3 -25
- package/src/adapter/objects/webgl-renderbuffer.ts +40 -37
- package/src/adapter/objects/webgl-resource.ts +14 -23
- package/src/adapter/objects/webgl-vertex-array-object.ts +202 -37
- package/src/adapter/resources/webgl-buffer.ts +56 -58
- package/src/adapter/resources/webgl-command-buffer.ts +332 -25
- package/src/adapter/resources/webgl-command-encoder.ts +17 -12
- package/src/adapter/resources/webgl-external-texture.ts +2 -2
- package/src/adapter/resources/webgl-framebuffer.ts +88 -133
- package/src/adapter/resources/webgl-render-pass.ts +155 -4
- package/src/adapter/resources/webgl-render-pipeline.ts +232 -131
- package/src/adapter/resources/webgl-sampler.ts +13 -8
- package/src/adapter/resources/webgl-shader.ts +11 -10
- package/src/adapter/resources/webgl-texture.ts +113 -85
- package/src/adapter/webgl-canvas-context.ts +14 -14
- package/src/adapter/webgl-device.ts +192 -77
- package/src/classic/accessor.ts +4 -17
- package/src/classic/{buffer.ts → buffer-with-accessor.ts} +67 -75
- package/src/classic/clear.ts +110 -0
- package/src/classic/copy-and-blit.ts +308 -0
- package/src/classic/format-utils.ts +43 -0
- package/src/classic/typed-array-utils.ts +18 -27
- package/src/context/context/{create-context.ts → create-browser-context.ts} +48 -31
- package/src/context/context/create-headless-context.ts +48 -0
- package/src/context/context/webgl-checks.ts +1 -1
- package/src/context/debug/spector.ts +7 -6
- package/src/context/debug/webgl-developer-tools.ts +21 -15
- package/src/context/parameters/unified-parameter-api.ts +20 -14
- package/src/context/parameters/webgl-parameter-tables.ts +117 -98
- package/src/context/polyfill/context-data.ts +27 -0
- package/src/context/polyfill/get-parameter-polyfill.ts +8 -7
- package/src/context/polyfill/polyfill-context.ts +7 -9
- package/src/context/polyfill/polyfill-table.ts +18 -16
- package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
- package/src/context/state-tracker/track-context-state.ts +14 -13
- package/src/context/state-tracker/with-parameters.ts +8 -2
- package/src/index.ts +42 -33
- package/src/types.ts +2 -0
- package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
- package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
- package/dist/adapter/converters/renderbuffer-formats.js +0 -185
- package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
- package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
- package/dist/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/adapter/helpers/uniforms.d.ts +0 -26
- package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
- package/dist/adapter/helpers/uniforms.js.map +0 -1
- 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/classic/buffer.d.ts.map +0 -1
- package/dist/classic/buffer.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 +0 -41
- package/dist/context/context/create-context.d.ts.map +0 -1
- package/dist/context/context/create-context.js +0 -49
- 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.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/dist/types/webgl.d.ts +0 -144
- package/dist/types/webgl.d.ts.map +0 -1
- package/dist/types/webgl.js +0 -2
- package/dist/types/webgl.js.map +0 -1
- package/src/adapter/converters/renderbuffer-formats.ts +0 -92
- 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
- package/src/types/webgl.ts +0 -283
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
// luma.gl, MIT license
|
|
2
|
-
import {Resource, assert, uid, stubRemovedMethods} from '@luma.gl/
|
|
3
|
-
import type {Device, ResourceProps} from '@luma.gl/
|
|
4
|
-
import GL from '@luma.gl/constants';
|
|
2
|
+
import {Resource, assert, uid, stubRemovedMethods} from '@luma.gl/core';
|
|
3
|
+
import type {Device, ResourceProps} from '@luma.gl/core';
|
|
4
|
+
import {GL} from '@luma.gl/constants';
|
|
5
5
|
import {isWebGL2, assertWebGLContext} from '../../context/context/webgl-checks';
|
|
6
|
-
import WebGLDevice from '../webgl-device';
|
|
6
|
+
import {WebGLDevice} from '../webgl-device';
|
|
7
7
|
|
|
8
8
|
// Requires full GL enum to be bundled... Make these bindings dependent on dynamic import (debug)?
|
|
9
|
-
import {
|
|
9
|
+
import {getKeyValue} from './constants-to-keys';
|
|
10
10
|
|
|
11
11
|
const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Base class for WebGL object wrappers
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
id: string;
|
|
18
|
-
userData: any;
|
|
16
|
+
export abstract class WebGLResource<Props extends ResourceProps> extends Resource<Props> {
|
|
19
17
|
readonly device: WebGLDevice;
|
|
20
18
|
readonly gl: WebGLRenderingContext;
|
|
21
19
|
readonly gl2: WebGL2RenderingContext;
|
|
@@ -34,12 +32,10 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
34
32
|
assertWebGLContext(gl);
|
|
35
33
|
|
|
36
34
|
// extends
|
|
37
|
-
|
|
38
|
-
const {id, userData = {}} = props || {};
|
|
35
|
+
const {id} = props || {};
|
|
39
36
|
this.gl = gl;
|
|
40
37
|
this.gl2 = gl as WebGL2RenderingContext;
|
|
41
38
|
this.id = id || uid(this.constructor.name);
|
|
42
|
-
this.userData = userData;
|
|
43
39
|
|
|
44
40
|
// Set the handle
|
|
45
41
|
// If handle was provided, use it, otherwise create a new handle
|
|
@@ -48,7 +44,6 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
48
44
|
// this.glCount = glGetContextLossCount(this.gl);
|
|
49
45
|
|
|
50
46
|
// Default VertexArray needs to be created with null handle, so compare against undefined
|
|
51
|
-
// @ts-expect-error
|
|
52
47
|
this._handle = props?.handle;
|
|
53
48
|
if (this._handle === undefined) {
|
|
54
49
|
this._handle = this._createHandle();
|
|
@@ -57,7 +52,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
57
52
|
this.byteLength = 0;
|
|
58
53
|
}
|
|
59
54
|
|
|
60
|
-
toString(): string {
|
|
55
|
+
override toString(): string {
|
|
61
56
|
return `${this.constructor.name}(${this.id})`;
|
|
62
57
|
}
|
|
63
58
|
|
|
@@ -74,11 +69,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
74
69
|
return this._handle;
|
|
75
70
|
}
|
|
76
71
|
|
|
77
|
-
|
|
78
|
-
this.delete();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
delete({deleteChildren = false} = {}) {
|
|
72
|
+
override delete({deleteChildren = false} = {}) {
|
|
82
73
|
// Delete this object, and get refs to any children
|
|
83
74
|
// @ts-expect-error
|
|
84
75
|
const children = this._handle && this._deleteHandle(this._handle);
|
|
@@ -91,7 +82,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
91
82
|
// @ts-expect-error
|
|
92
83
|
if (children && deleteChildren) {
|
|
93
84
|
// @ts-expect-error
|
|
94
|
-
children.filter(Boolean).forEach((child) => child.
|
|
85
|
+
children.filter(Boolean).forEach((child) => child.destroy());
|
|
95
86
|
}
|
|
96
87
|
|
|
97
88
|
return this;
|
|
@@ -130,7 +121,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
130
121
|
* @param name
|
|
131
122
|
* @return param
|
|
132
123
|
*/
|
|
133
|
-
getParameter(pname: number, props = {}): any {
|
|
124
|
+
getParameter(pname: number, props: any = {}): any {
|
|
134
125
|
pname = getKeyValue(this.gl, pname);
|
|
135
126
|
assert(pname);
|
|
136
127
|
|
|
@@ -163,7 +154,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
163
154
|
// Many resources support a getParameter call -
|
|
164
155
|
// getParameters will get all parameters - slow but useful for debugging
|
|
165
156
|
// eslint-disable-next-line complexity
|
|
166
|
-
getParameters(options: {parameters
|
|
157
|
+
getParameters(options: {parameters?: any, keys?: any} = {}) {
|
|
167
158
|
const {parameters, keys} = options;
|
|
168
159
|
|
|
169
160
|
// Get parameter definitions for this Resource
|
|
@@ -188,10 +179,10 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
188
179
|
(!('extension' in parameter) || this.gl.getExtension(parameter.extension));
|
|
189
180
|
|
|
190
181
|
if (parameterAvailable) {
|
|
191
|
-
const key = keys ?
|
|
182
|
+
const key = keys ? this.device.getGLKey(pname) : pname;
|
|
192
183
|
values[key] = this.getParameter(pname, options);
|
|
193
184
|
if (keys && parameter.type === 'GLenum') {
|
|
194
|
-
values[key] =
|
|
185
|
+
values[key] = this.device.getGLKey(values[key]);
|
|
195
186
|
}
|
|
196
187
|
}
|
|
197
188
|
}
|
|
@@ -1,64 +1,104 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type {Device, Buffer, ResourceProps, TypedArray, NumericArray} from '@luma.gl/core';
|
|
2
|
+
import {Resource, assert, getScratchArray, fillArray} from '@luma.gl/core';
|
|
3
|
+
import {GL} from '@luma.gl/constants';
|
|
3
4
|
import {getBrowser} from '@probe.gl/env';
|
|
4
5
|
|
|
5
|
-
import WebGLDevice from '../webgl-device';
|
|
6
|
-
import WebGLResource from './webgl-resource';
|
|
6
|
+
import {WebGLDevice} from '../webgl-device';
|
|
7
|
+
import {WebGLResource} from './webgl-resource';
|
|
8
|
+
import {WEBGLBuffer} from '../resources/webgl-buffer';
|
|
7
9
|
|
|
8
|
-
import
|
|
10
|
+
import {BufferWithAccessor} from '../../classic/buffer-with-accessor';
|
|
11
|
+
import {AccessorObject} from '../..';
|
|
9
12
|
|
|
10
13
|
const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
|
|
11
14
|
|
|
12
15
|
/**
|
|
13
16
|
* VertexArrayObject properties
|
|
17
|
+
* @param constantAttributeZero Attribute 0 can not be disable on most desktop OpenGL based browsers
|
|
18
|
+
* and on iOS Safari browser.
|
|
14
19
|
*/
|
|
15
20
|
export type VertexArrayObjectProps = ResourceProps & {
|
|
21
|
+
constantAttributeZero?: boolean;
|
|
16
22
|
};
|
|
17
23
|
|
|
18
24
|
/** VertexArrayObject wrapper */
|
|
19
|
-
export
|
|
20
|
-
get [Symbol.toStringTag](): string {
|
|
25
|
+
export class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObjectProps> {
|
|
26
|
+
override get [Symbol.toStringTag](): string {
|
|
21
27
|
return 'BaseVertexArrayObject';
|
|
22
28
|
}
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
/** Buffer constant */
|
|
31
|
+
private buffer: BufferWithAccessor | null = null;
|
|
32
|
+
private bufferValue = null;
|
|
33
|
+
|
|
34
|
+
static isConstantAttributeZeroSupported(device: Device): boolean {
|
|
35
|
+
return device.info.type === 'webgl2' || getBrowser() === 'Chrome';
|
|
27
36
|
}
|
|
28
37
|
|
|
29
|
-
|
|
38
|
+
// Create a VertexArray
|
|
39
|
+
constructor(device: Device, props?: VertexArrayObjectProps) {
|
|
40
|
+
super(device, props, {...Resource.defaultProps, constantAttributeZero: false});
|
|
41
|
+
Object.seal(this);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
override destroy(): void {
|
|
45
|
+
super.destroy();
|
|
46
|
+
if (this.buffer) {
|
|
47
|
+
this.buffer?.destroy();
|
|
48
|
+
} }
|
|
49
|
+
|
|
50
|
+
override _createHandle() {
|
|
30
51
|
return this.gl2.createVertexArray();
|
|
31
52
|
}
|
|
32
53
|
|
|
33
|
-
_deleteHandle(): void {
|
|
54
|
+
override _deleteHandle(): void {
|
|
34
55
|
this.gl2.deleteVertexArray(this.handle);
|
|
35
56
|
// @ts-expect-error
|
|
36
57
|
return [this.elements];
|
|
37
58
|
// return [this.elements, ...this.buffers];
|
|
38
59
|
}
|
|
39
60
|
|
|
40
|
-
_bindHandle(handle: WEBGLVertexArrayObject): void {
|
|
61
|
+
override _bindHandle(handle: WEBGLVertexArrayObject): void {
|
|
41
62
|
this.gl2.bindVertexArray(handle);
|
|
42
63
|
}
|
|
43
64
|
|
|
65
|
+
/**
|
|
66
|
+
* Enabling an attribute location makes it reference the currently bound buffer
|
|
67
|
+
* Disabling an attribute location makes it reference the global constant value
|
|
68
|
+
* TODO - handle single values for size 1 attributes?
|
|
69
|
+
* TODO - convert classic arrays based on known type?
|
|
70
|
+
*/
|
|
71
|
+
enable(location: number, enable = true): void {
|
|
72
|
+
// Attribute 0 cannot be disabled in most desktop OpenGL based browsers...
|
|
73
|
+
const canDisableAttributeZero = this.device.isWebGL2 || getBrowser() === 'Chrome';
|
|
74
|
+
const canDisableAttribute = canDisableAttributeZero || location !== 0;
|
|
75
|
+
|
|
76
|
+
if (enable || canDisableAttribute) {
|
|
77
|
+
location = Number(location);
|
|
78
|
+
this.bind(() =>
|
|
79
|
+
enable
|
|
80
|
+
? this.gl.enableVertexAttribArray(location)
|
|
81
|
+
: this.gl.disableVertexAttribArray(location)
|
|
82
|
+
);
|
|
83
|
+
} }
|
|
84
|
+
|
|
44
85
|
// Set (bind) an elements buffer, for indexed rendering.
|
|
45
86
|
// Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported
|
|
46
|
-
setElementBuffer(elementBuffer:
|
|
47
|
-
assert(!elementBuffer || elementBuffer.
|
|
87
|
+
setElementBuffer(elementBuffer: WEBGLBuffer | null = null, opts = {}) {
|
|
88
|
+
assert(!elementBuffer || elementBuffer.glTarget === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);
|
|
48
89
|
|
|
49
90
|
// The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...
|
|
50
91
|
this.bind(() => {
|
|
51
92
|
this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);
|
|
52
93
|
});
|
|
53
|
-
|
|
54
|
-
return this;
|
|
55
94
|
}
|
|
56
95
|
|
|
57
96
|
/** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */
|
|
58
|
-
setBuffer(location: number, buffer:
|
|
97
|
+
setBuffer(location: number, buffer: WEBGLBuffer, accessor: AccessorObject): void {
|
|
59
98
|
// Check target
|
|
60
|
-
if (buffer.
|
|
61
|
-
|
|
99
|
+
if (buffer.glTarget === GL.ELEMENT_ARRAY_BUFFER) {
|
|
100
|
+
this.setElementBuffer(buffer, accessor);
|
|
101
|
+
return;
|
|
62
102
|
}
|
|
63
103
|
|
|
64
104
|
const {size, type, stride, offset, normalized, integer, divisor} = accessor;
|
|
@@ -83,29 +123,154 @@ export default class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObj
|
|
|
83
123
|
|
|
84
124
|
// NOTE We don't unbind buffer here, typically another buffer will be bound just after
|
|
85
125
|
});
|
|
126
|
+
}
|
|
86
127
|
|
|
87
|
-
|
|
128
|
+
/**
|
|
129
|
+
* Set an attribute to a constant value
|
|
130
|
+
* @param device
|
|
131
|
+
* @param location
|
|
132
|
+
* @param array
|
|
133
|
+
*
|
|
134
|
+
* @note Constants are stored globally on the WebGL context, not the VAO
|
|
135
|
+
* so they need to be updated before every render
|
|
136
|
+
* @todo - use known type (in configuration or passed in) to allow non-typed arrays?
|
|
137
|
+
* @todo - remember/cache values to avoid setting them unnecessarily?
|
|
138
|
+
*/
|
|
139
|
+
setConstant(location: any, array: TypedArray): void {
|
|
140
|
+
switch (array.constructor) {
|
|
141
|
+
case Float32Array:
|
|
142
|
+
setConstantFloatArray(this.device, location, array as Float32Array);
|
|
143
|
+
break;
|
|
144
|
+
case Int32Array:
|
|
145
|
+
setConstantIntArray(this.device, location, array as Int32Array);
|
|
146
|
+
break;
|
|
147
|
+
case Uint32Array:
|
|
148
|
+
setConstantUintArray(this.device, location, array as Uint32Array);
|
|
149
|
+
break;
|
|
150
|
+
default:
|
|
151
|
+
assert(false);
|
|
152
|
+
}
|
|
88
153
|
}
|
|
89
154
|
|
|
90
155
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
156
|
+
* Provide a means to create a buffer that is equivalent to a constant.
|
|
157
|
+
* NOTE: Desktop OpenGL cannot disable attribute 0.
|
|
158
|
+
* https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-
|
|
159
|
+
* this-has-significant-performance-penalty
|
|
95
160
|
*/
|
|
96
|
-
|
|
97
|
-
//
|
|
98
|
-
const canDisableAttributeZero = this.device.isWebGL2 || getBrowser() === 'Chrome';
|
|
99
|
-
const canDisableAttribute = canDisableAttributeZero || location !== 0;
|
|
161
|
+
getConstantBuffer(elementCount: number, value): Buffer {
|
|
162
|
+
// Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)
|
|
100
163
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
164
|
+
const constantValue = normalizeConstantArrayValue(value);
|
|
165
|
+
|
|
166
|
+
const byteLength = constantValue.byteLength * elementCount;
|
|
167
|
+
const length = constantValue.length * elementCount;
|
|
168
|
+
|
|
169
|
+
let updateNeeded = !this.buffer;
|
|
170
|
+
|
|
171
|
+
this.buffer = this.buffer || this.device.createBuffer({byteLength}) as BufferWithAccessor;
|
|
172
|
+
updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);
|
|
173
|
+
|
|
174
|
+
// Reallocate and update contents if needed
|
|
175
|
+
updateNeeded =
|
|
176
|
+
updateNeeded || !compareConstantArrayValues(constantValue, this.bufferValue);
|
|
177
|
+
|
|
178
|
+
if (updateNeeded) {
|
|
179
|
+
// Create a typed array that is big enough, and fill it with the required data
|
|
180
|
+
const typedArray = getScratchArray(value.constructor, length);
|
|
181
|
+
fillArray({target: typedArray, source: constantValue, start: 0, count: length});
|
|
182
|
+
this.buffer.subData(typedArray);
|
|
183
|
+
this.bufferValue = value;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return this.buffer;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function setConstantFloatArray(device: WebGLDevice, location: number, array: Float32Array): void {
|
|
191
|
+
switch (array.length) {
|
|
192
|
+
case 1:
|
|
193
|
+
device.gl.vertexAttrib1fv(location, array);
|
|
194
|
+
break;
|
|
195
|
+
case 2:
|
|
196
|
+
device.gl.vertexAttrib2fv(location, array);
|
|
197
|
+
break;
|
|
198
|
+
case 3:
|
|
199
|
+
device.gl.vertexAttrib3fv(location, array);
|
|
200
|
+
break;
|
|
201
|
+
case 4:
|
|
202
|
+
device.gl.vertexAttrib4fv(location, array);
|
|
203
|
+
break;
|
|
204
|
+
default:
|
|
205
|
+
assert(false);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function setConstantIntArray(device: WebGLDevice, location: number, array: Int32Array): void {
|
|
210
|
+
device.assertWebGL2();
|
|
211
|
+
device.gl2?.vertexAttribI4iv(location, array);
|
|
212
|
+
// switch (array.length) {
|
|
213
|
+
// case 1:
|
|
214
|
+
// gl.vertexAttribI1iv(location, array);
|
|
215
|
+
// break;
|
|
216
|
+
// case 2:
|
|
217
|
+
// gl.vertexAttribI2iv(location, array);
|
|
218
|
+
// break;
|
|
219
|
+
// case 3:
|
|
220
|
+
// gl.vertexAttribI3iv(location, array);
|
|
221
|
+
// break;
|
|
222
|
+
// case 4:
|
|
223
|
+
// break;
|
|
224
|
+
// default:
|
|
225
|
+
// assert(false);
|
|
226
|
+
// }
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function setConstantUintArray(device: WebGLDevice, location: number, array: Uint32Array) {
|
|
230
|
+
device.assertWebGL2();
|
|
231
|
+
device.gl2?.vertexAttribI4uiv(location, array);
|
|
232
|
+
// switch (array.length) {
|
|
233
|
+
// case 1:
|
|
234
|
+
// gl.vertexAttribI1uiv(location, array);
|
|
235
|
+
// break;
|
|
236
|
+
// case 2:
|
|
237
|
+
// gl.vertexAttribI2uiv(location, array);
|
|
238
|
+
// break;
|
|
239
|
+
// case 3:
|
|
240
|
+
// gl.vertexAttribI3uiv(location, array);
|
|
241
|
+
// break;
|
|
242
|
+
// case 4:
|
|
243
|
+
// gl.vertexAttribI4uiv(location, array);
|
|
244
|
+
// break;
|
|
245
|
+
// default:
|
|
246
|
+
// assert(false);
|
|
247
|
+
// }
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// HELPERS
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)
|
|
254
|
+
* TODO - handle single values for size 1 attributes?
|
|
255
|
+
*/
|
|
256
|
+
function normalizeConstantArrayValue(arrayValue: NumericArray) {
|
|
257
|
+
if (Array.isArray(arrayValue)) {
|
|
258
|
+
return new Float32Array(arrayValue);
|
|
259
|
+
}
|
|
260
|
+
return arrayValue;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
*
|
|
265
|
+
*/
|
|
266
|
+
function compareConstantArrayValues(v1: NumericArray, v2: NumericArray): boolean {
|
|
267
|
+
if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
for (let i = 0; i < v1.length; ++i) {
|
|
271
|
+
if (v1[i] !== v2[i]) {
|
|
272
|
+
return false;
|
|
108
273
|
}
|
|
109
|
-
return this;
|
|
110
274
|
}
|
|
275
|
+
return true;
|
|
111
276
|
}
|
|
@@ -1,25 +1,30 @@
|
|
|
1
|
-
import type {BufferProps} from '@luma.gl/
|
|
2
|
-
import {Buffer, assert} from '@luma.gl/
|
|
3
|
-
import GL from '@luma.gl/constants';
|
|
4
|
-
import WebGLDevice from '../webgl-device';
|
|
1
|
+
import type {BufferProps} from '@luma.gl/core';
|
|
2
|
+
import {Buffer, assert} from '@luma.gl/core';
|
|
3
|
+
import {GL} from '@luma.gl/constants';
|
|
4
|
+
import {WebGLDevice} from '../webgl-device';
|
|
5
5
|
|
|
6
6
|
const DEBUG_DATA_LENGTH = 10;
|
|
7
7
|
|
|
8
8
|
/** WebGL Buffer interface */
|
|
9
|
-
export
|
|
9
|
+
export class WEBGLBuffer extends Buffer {
|
|
10
10
|
readonly device: WebGLDevice;
|
|
11
11
|
readonly gl: WebGLRenderingContext;
|
|
12
12
|
readonly gl2: WebGL2RenderingContext | null;
|
|
13
13
|
readonly handle: WebGLBuffer;
|
|
14
|
-
readonly target: number;
|
|
15
14
|
|
|
15
|
+
/** Target in OpenGL defines the type of buffer */
|
|
16
|
+
readonly glTarget: GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER;
|
|
17
|
+
/** Usage is a hint on how frequently the buffer will be updates */
|
|
18
|
+
readonly glUsage: GL.STATIC_DRAW | GL.DYNAMIC_DRAW;
|
|
19
|
+
/** Index type is needed when issuing draw calls, so we pre-compute it */
|
|
20
|
+
readonly glIndexType: GL.UNSIGNED_SHORT | GL.UNSIGNED_INT = GL.UNSIGNED_SHORT;
|
|
21
|
+
|
|
22
|
+
/** Number of bytes allocated on the GPU for this buffer */
|
|
16
23
|
byteLength: number;
|
|
24
|
+
/** Number of bytes used */
|
|
17
25
|
bytesUsed: number;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
webglUsage: number;
|
|
21
|
-
|
|
22
|
-
accessor: {};
|
|
26
|
+
/** A partial CPU-side copy of the data in this buffer, for debugging purposes */
|
|
27
|
+
debugData: ArrayBuffer | null = null;
|
|
23
28
|
|
|
24
29
|
constructor(device: WebGLDevice, props: BufferProps = {}) {
|
|
25
30
|
super(device, props);
|
|
@@ -28,18 +33,17 @@ export default class WEBGLBuffer extends Buffer {
|
|
|
28
33
|
this.gl = this.device.gl;
|
|
29
34
|
this.gl2 = this.device.gl2;
|
|
30
35
|
|
|
31
|
-
const handle = typeof props === 'object' ? (props
|
|
36
|
+
const handle = typeof props === 'object' ? (props ).handle : undefined;
|
|
32
37
|
this.handle = handle || this.gl.createBuffer();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this.
|
|
41
|
-
|
|
42
|
-
this.webglUsage = this.props.webglUsage || getWebGLUsage(this.props.usage);
|
|
38
|
+
device.setSpectorMetadata(this.handle, {...this.props, data: typeof this.props.data});
|
|
39
|
+
|
|
40
|
+
// - In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers
|
|
41
|
+
// otherwise buffer type will lock to generic (non-element) buffer
|
|
42
|
+
// - In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here
|
|
43
|
+
this.glTarget = getWebGLTarget(this.props.usage);
|
|
44
|
+
this.glUsage = getWebGLUsage(this.props.usage);
|
|
45
|
+
this.glIndexType = this.props.indexType === 'uint32' ? GL.UNSIGNED_INT : GL.UNSIGNED_SHORT;
|
|
46
|
+
|
|
43
47
|
this.debugData = null;
|
|
44
48
|
|
|
45
49
|
// Set data: (re)initializes the buffer
|
|
@@ -48,25 +52,19 @@ export default class WEBGLBuffer extends Buffer {
|
|
|
48
52
|
} else {
|
|
49
53
|
this._initWithByteLength(props.byteLength || 0);
|
|
50
54
|
}
|
|
51
|
-
|
|
52
|
-
// Deprecated: Merge main props and accessor
|
|
53
|
-
// this.accessor = {...props.accessor};
|
|
54
|
-
|
|
55
|
-
// Object.seal(this);
|
|
56
55
|
}
|
|
57
56
|
|
|
58
|
-
|
|
57
|
+
// PRIVATE METHODS
|
|
59
58
|
|
|
60
|
-
|
|
59
|
+
/** Allocate a new buffer and initialize to contents of typed array */
|
|
61
60
|
_initWithData(data, byteOffset: number = 0, byteLength: number = data.byteLength + byteOffset): this {
|
|
62
61
|
assert(ArrayBuffer.isView(data));
|
|
63
62
|
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
this.gl.
|
|
67
|
-
this.gl.
|
|
68
|
-
this.gl.
|
|
69
|
-
this.gl.bindBuffer(target, null);
|
|
63
|
+
const glTarget = this._getWriteTarget();
|
|
64
|
+
this.gl.bindBuffer(glTarget, this.handle);
|
|
65
|
+
this.gl.bufferData(glTarget, byteLength, this.glUsage);
|
|
66
|
+
this.gl.bufferSubData(glTarget, byteOffset, data);
|
|
67
|
+
this.gl.bindBuffer(glTarget, null);
|
|
70
68
|
|
|
71
69
|
this.debugData = data.slice(0, DEBUG_DATA_LENGTH);
|
|
72
70
|
this.bytesUsed = byteLength;
|
|
@@ -88,11 +86,11 @@ export default class WEBGLBuffer extends Buffer {
|
|
|
88
86
|
data = new Float32Array(0);
|
|
89
87
|
}
|
|
90
88
|
|
|
91
|
-
const
|
|
89
|
+
const glTarget = this._getWriteTarget();
|
|
92
90
|
|
|
93
|
-
this.gl.bindBuffer(
|
|
94
|
-
this.gl.bufferData(
|
|
95
|
-
this.gl.bindBuffer(
|
|
91
|
+
this.gl.bindBuffer(glTarget, this.handle);
|
|
92
|
+
this.gl.bufferData(glTarget, data, this.glUsage);
|
|
93
|
+
this.gl.bindBuffer(glTarget, null);
|
|
96
94
|
|
|
97
95
|
this.debugData = null;
|
|
98
96
|
this.bytesUsed = byteLength;
|
|
@@ -101,41 +99,40 @@ export default class WEBGLBuffer extends Buffer {
|
|
|
101
99
|
return this;
|
|
102
100
|
}
|
|
103
101
|
|
|
104
|
-
destroy(): void {
|
|
105
|
-
if (this.handle) {
|
|
102
|
+
override destroy(): void {
|
|
103
|
+
if (!this.destroyed && this.handle) {
|
|
106
104
|
this.removeStats();
|
|
107
105
|
this.trackDeallocatedMemory();
|
|
108
106
|
this.gl.deleteBuffer(this.handle);
|
|
107
|
+
this.destroyed = true;
|
|
109
108
|
// @ts-expect-error
|
|
110
109
|
this.handle = null;
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
|
|
114
|
-
write(data: ArrayBufferView, byteOffset: number = 0): void {
|
|
113
|
+
override write(data: ArrayBufferView, byteOffset: number = 0): void {
|
|
115
114
|
const srcOffset = 0;
|
|
116
|
-
const byteLength = data.byteLength;
|
|
115
|
+
const byteLength = undefined; // data.byteLength;
|
|
117
116
|
|
|
118
117
|
// Create the buffer - binding it here for the first time locks the type
|
|
119
118
|
// In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type
|
|
120
|
-
const
|
|
121
|
-
this.gl.bindBuffer(
|
|
119
|
+
const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;
|
|
120
|
+
this.gl.bindBuffer(glTarget, this.handle);
|
|
122
121
|
// WebGL2: subData supports additional srcOffset and length parameters
|
|
123
122
|
if (srcOffset !== 0 || byteLength !== undefined) {
|
|
124
123
|
this.device.assertWebGL2();
|
|
125
|
-
|
|
126
|
-
// @ts-expect-error
|
|
127
|
-
this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);
|
|
124
|
+
this.gl2.bufferSubData(glTarget, byteOffset, data, srcOffset, byteLength);
|
|
128
125
|
} else {
|
|
129
|
-
this.gl.bufferSubData(
|
|
126
|
+
this.gl.bufferSubData(glTarget, byteOffset, data);
|
|
130
127
|
}
|
|
131
|
-
this.gl.bindBuffer(
|
|
128
|
+
this.gl.bindBuffer(glTarget, null);
|
|
132
129
|
|
|
133
130
|
// TODO - update local `data` if offsets are right
|
|
134
131
|
// this.debugData = data.slice(byteOffset, 40);
|
|
135
132
|
}
|
|
136
133
|
|
|
137
134
|
/** Read data from the buffer */
|
|
138
|
-
async readAsync(
|
|
135
|
+
override async readAsync(
|
|
139
136
|
byteOffset: number = 0,
|
|
140
137
|
byteLength?: number
|
|
141
138
|
): Promise<ArrayBuffer> {
|
|
@@ -162,13 +159,13 @@ export default class WEBGLBuffer extends Buffer {
|
|
|
162
159
|
}
|
|
163
160
|
|
|
164
161
|
_getWriteTarget() {
|
|
165
|
-
return this.
|
|
166
|
-
// return this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.
|
|
162
|
+
return this.glTarget;
|
|
163
|
+
// return this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;
|
|
167
164
|
}
|
|
168
165
|
|
|
169
166
|
_getReadTarget() {
|
|
170
|
-
return this.
|
|
171
|
-
return this.device.isWebGL2 ? GL.COPY_READ_BUFFER : this.
|
|
167
|
+
return this.glTarget;
|
|
168
|
+
// return this.device.isWebGL2 ? GL.COPY_READ_BUFFER : this.glTarget;
|
|
172
169
|
}
|
|
173
170
|
}
|
|
174
171
|
|
|
@@ -183,7 +180,7 @@ export default class WEBGLBuffer extends Buffer {
|
|
|
183
180
|
// static INDIRECT = 0x0100;
|
|
184
181
|
// static QUERY_RESOLVE = 0x0200;
|
|
185
182
|
|
|
186
|
-
function getWebGLTarget(usage: number): GL {
|
|
183
|
+
function getWebGLTarget(usage: number): GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER {
|
|
187
184
|
if (usage & Buffer.INDEX) {
|
|
188
185
|
return GL.ELEMENT_ARRAY_BUFFER;
|
|
189
186
|
}
|
|
@@ -205,7 +202,8 @@ function getWebGLTarget(usage: number): GL {
|
|
|
205
202
|
return GL.ARRAY_BUFFER;
|
|
206
203
|
}
|
|
207
204
|
|
|
208
|
-
|
|
205
|
+
/** @todo usage is not passed correctly */
|
|
206
|
+
function getWebGLUsage(usage: number): GL.STATIC_DRAW | GL.DYNAMIC_DRAW {
|
|
209
207
|
if (usage & Buffer.INDEX) {
|
|
210
208
|
return GL.STATIC_DRAW;
|
|
211
209
|
}
|
|
@@ -215,5 +213,5 @@ function getWebGLUsage(usage: number): GL {
|
|
|
215
213
|
if (usage & Buffer.UNIFORM) {
|
|
216
214
|
return GL.DYNAMIC_DRAW;
|
|
217
215
|
}
|
|
218
|
-
return GL.
|
|
216
|
+
return GL.STATIC_DRAW;
|
|
219
217
|
}
|