@luma.gl/webgl 9.0.0-alpha.9 → 9.0.0-beta.1
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 +3 -1
- package/dist/adapter/converters/device-parameters.d.ts +12 -3
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +89 -74
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +4 -10
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +29 -180
- 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 +52 -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 +306 -343
- 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 +53 -22
- 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 +9 -25
- 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 +54 -58
- 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 +49 -22
- package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/adapter/device-helpers/is-old-ie.d.ts.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/decode-webgl-types.js +89 -0
- package/dist/adapter/helpers/decode-webgl-types.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 -138
- 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 +16 -11
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts +3 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +51 -82
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
- package/dist/adapter/helpers/webgl-topology-utils.js +103 -0
- 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 +2 -29
- 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 +36 -44
- 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 +26 -83
- package/dist/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +19 -14
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +67 -101
- 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 +175 -48
- 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 +10 -20
- 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 -25
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +63 -175
- 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 +98 -12
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +34 -20
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +110 -293
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts +5 -4
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +11 -21
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts +5 -5
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +18 -44
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +51 -31
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +123 -244
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-transform-feedback.js +164 -0
- package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
- package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-vertex-array.js +167 -0
- package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
- 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 +12 -23
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +92 -41
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +205 -158
- 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 +26 -52
- package/dist/classic/accessor.js.map +1 -1
- 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 +192 -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 +37 -0
- package/dist/classic/format-utils.js.map +1 -0
- package/dist/classic/typed-array-utils.d.ts +17 -17
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +18 -39
- package/dist/classic/typed-array-utils.js.map +1 -1
- package/dist/context/context/create-browser-context.d.ts +17 -18
- package/dist/context/context/create-browser-context.d.ts.map +1 -1
- package/dist/context/context/create-browser-context.js +11 -19
- package/dist/context/context/create-browser-context.js.map +1 -1
- package/dist/context/context/create-headless-context.d.ts +1 -1
- package/dist/context/context/create-headless-context.d.ts.map +1 -1
- package/dist/context/context/create-headless-context.js +6 -7
- package/dist/context/context/create-headless-context.js.map +1 -1
- package/dist/context/context/webgl-checks.d.ts.map +1 -1
- 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 +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 +18 -41
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +5 -5
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +9 -17
- 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 +267 -286
- 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 +37 -43
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +27 -31
- package/dist/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/context/polyfill/polyfill-table.d.ts +7 -7
- package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-table.js +17 -40
- 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 +17 -87
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.d.ts.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 +25 -61
- 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 +8 -10
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/dist.dev.js +9344 -0
- package/dist/index.cjs +6556 -0
- package/dist/index.d.ts +23 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -27
- 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 +52 -0
- package/package.json +21 -9
- package/src/adapter/converters/device-parameters.ts +120 -43
- package/src/adapter/converters/sampler-parameters.ts +54 -126
- package/src/adapter/converters/shader-formats.ts +44 -0
- package/src/adapter/converters/texture-formats.ts +265 -192
- package/src/adapter/converters/vertex-formats.ts +71 -10
- package/src/adapter/device-helpers/device-features.ts +5 -2
- package/src/adapter/device-helpers/device-limits.ts +4 -2
- package/src/adapter/device-helpers/get-device-info.ts +72 -18
- package/src/adapter/device-helpers/is-old-ie.ts +3 -0
- package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +31 -24
- package/src/adapter/helpers/get-shader-layout.ts +87 -131
- package/src/adapter/helpers/parse-shader-compiler-log.ts +24 -8
- package/src/adapter/helpers/set-uniform.ts +39 -35
- package/src/adapter/helpers/webgl-topology-utils.ts +103 -0
- package/src/adapter/objects/constants-to-keys.ts +6 -25
- package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
- package/src/adapter/objects/webgl-resource.ts +16 -23
- package/src/adapter/resources/webgl-buffer.ts +101 -106
- package/src/adapter/resources/webgl-command-buffer.ts +327 -25
- package/src/adapter/resources/webgl-command-encoder.ts +20 -12
- package/src/adapter/resources/webgl-external-texture.ts +5 -2
- package/src/adapter/resources/webgl-framebuffer.ts +86 -133
- package/src/adapter/resources/webgl-render-pass.ts +165 -4
- package/src/adapter/resources/webgl-render-pipeline.ts +209 -205
- package/src/adapter/resources/webgl-sampler.ts +12 -8
- package/src/adapter/resources/webgl-shader.ts +32 -27
- package/src/adapter/resources/webgl-texture.ts +117 -91
- package/src/adapter/resources/webgl-transform-feedback.ts +202 -0
- package/src/adapter/resources/webgl-vertex-array.ts +283 -0
- package/src/adapter/webgl-canvas-context.ts +18 -13
- package/src/adapter/webgl-device.ts +327 -92
- package/src/classic/accessor.ts +8 -5
- package/src/classic/clear.ts +113 -0
- package/src/classic/copy-and-blit.ts +312 -0
- package/src/classic/format-utils.ts +46 -0
- package/src/classic/typed-array-utils.ts +19 -27
- package/src/context/context/create-browser-context.ts +53 -31
- package/src/context/context/create-headless-context.ts +5 -2
- package/src/context/context/webgl-checks.ts +3 -1
- package/src/context/debug/spector.ts +8 -5
- package/src/context/debug/webgl-developer-tools.ts +26 -17
- package/src/context/parameters/unified-parameter-api.ts +15 -9
- package/src/context/parameters/webgl-parameter-tables.ts +120 -98
- package/src/context/polyfill/context-data.ts +30 -0
- package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
- package/src/context/polyfill/polyfill-context.ts +15 -8
- package/src/context/polyfill/polyfill-table.ts +20 -15
- package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
- package/src/context/state-tracker/deep-array-equal.ts +2 -0
- package/src/context/state-tracker/track-context-state.ts +13 -10
- package/src/context/state-tracker/with-parameters.ts +13 -4
- package/src/index.ts +65 -39
- package/src/types.ts +5 -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 +0 -81
- 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 +0 -99
- package/dist/adapter/helpers/uniforms.js.map +0 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
- package/dist/adapter/objects/webgl-vertex-array-object.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 +0 -95
- package/dist/classic/buffer.d.ts.map +0 -1
- package/dist/classic/buffer.js +0 -392
- 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/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 -103
- package/dist/context/context/device-pixels.js.map +0 -1
- package/dist/es5/adapter/converters/device-parameters.js +0 -185
- 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 -245
- 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 -155
- 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 -391
- 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 -346
- package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
- package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
- 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 -150
- 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 -463
- 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 -478
- 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-browser-context.js +0 -83
- package/dist/es5/context/context/create-browser-context.js.map +0 -1
- package/dist/es5/context/context/create-headless-context.js +0 -60
- package/dist/es5/context/context/create-headless-context.js.map +0 -1
- package/dist/es5/context/context/device-pixels.js +0 -121
- 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 -134
- 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 -290
- 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 -168
- 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 -227
- 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 -112
- 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 -330
- 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 -267
- package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
- package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
- 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 -76
- package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-texture.js +0 -834
- 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 -337
- 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 -392
- 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-browser-context.js +0 -61
- package/dist/esm/context/context/create-browser-context.js.map +0 -1
- package/dist/esm/context/context/create-headless-context.js +0 -43
- package/dist/esm/context/context/create-headless-context.js.map +0 -1
- package/dist/esm/context/context/device-pixels.js +0 -103
- 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 -63
- 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 -91
- 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 -28
- 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 -145
- 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/adapter/helpers/attribute-utils.ts +0 -61
- package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
- package/src/bundle.ts +0 -4
- package/src/classic/buffer.ts +0 -474
- package/src/context/context/context-state.ts +0 -41
- package/src/context/context/device-pixels.ts +0 -158
- package/src/init.ts +0 -4
- package/src/types/webgl.ts +0 -284
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import type {PrimitiveTopology, ShaderLayout, TransformFeedbackProps} from '@luma.gl/core';
|
|
2
|
+
import {log, TransformFeedback, Buffer, BufferRange} from '@luma.gl/core';
|
|
3
|
+
import {GL} from '@luma.gl/constants';
|
|
4
|
+
import {WebGLDevice} from '../webgl-device';
|
|
5
|
+
import {WEBGLBuffer} from '../..';
|
|
6
|
+
import {getGLPrimitive} from '../helpers/webgl-topology-utils';
|
|
7
|
+
|
|
8
|
+
export class WEBGLTransformFeedback extends TransformFeedback {
|
|
9
|
+
readonly device: WebGLDevice;
|
|
10
|
+
readonly gl2: WebGL2RenderingContext;
|
|
11
|
+
readonly handle: WebGLTransformFeedback;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* NOTE: The Model already has this information while drawing, but
|
|
15
|
+
* TransformFeedback currently needs it internally, to look up
|
|
16
|
+
* varying information outside of a draw() call.
|
|
17
|
+
*/
|
|
18
|
+
readonly layout: ShaderLayout;
|
|
19
|
+
buffers: Record<string, BufferRange> = {};
|
|
20
|
+
unusedBuffers: Record<string, Buffer> = {};
|
|
21
|
+
/**
|
|
22
|
+
* Allows us to avoid a Chrome bug where a buffer that is already bound to a
|
|
23
|
+
* different target cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.
|
|
24
|
+
* This a major workaround, see: https://github.com/KhronosGroup/WebGL/issues/2346
|
|
25
|
+
*/
|
|
26
|
+
bindOnUse = true;
|
|
27
|
+
private _bound: boolean = false;
|
|
28
|
+
|
|
29
|
+
constructor(device: WebGLDevice, props: TransformFeedbackProps) {
|
|
30
|
+
super(device, props);
|
|
31
|
+
|
|
32
|
+
device.assertWebGL2();
|
|
33
|
+
this.device = device;
|
|
34
|
+
this.gl2 = device.gl2;
|
|
35
|
+
this.handle = this.props.handle || this.gl2.createTransformFeedback();
|
|
36
|
+
this.layout = this.props.layout;
|
|
37
|
+
|
|
38
|
+
if (props.buffers) {
|
|
39
|
+
this.setBuffers(props.buffers);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
Object.seal(this);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
override destroy(): void {
|
|
46
|
+
this.gl2.deleteTransformFeedback(this.handle);
|
|
47
|
+
super.destroy();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
begin(topology: PrimitiveTopology = 'point-list'): void {
|
|
51
|
+
this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);
|
|
52
|
+
if (this.bindOnUse) {
|
|
53
|
+
this._bindBuffers();
|
|
54
|
+
}
|
|
55
|
+
this.gl2.beginTransformFeedback(getGLPrimitive(topology));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
end(): void {
|
|
59
|
+
this.gl2.endTransformFeedback();
|
|
60
|
+
if (!this.bindOnUse) {
|
|
61
|
+
this._unbindBuffers();
|
|
62
|
+
}
|
|
63
|
+
this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// SUBCLASS
|
|
67
|
+
|
|
68
|
+
setBuffers(buffers: Record<string, Buffer | BufferRange>): void {
|
|
69
|
+
this.buffers = {};
|
|
70
|
+
this.unusedBuffers = {};
|
|
71
|
+
|
|
72
|
+
this.bind(() => {
|
|
73
|
+
for (const bufferName in buffers) {
|
|
74
|
+
this.setBuffer(bufferName, buffers[bufferName]);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
setBuffer(locationOrName: string | number, bufferOrRange: Buffer | BufferRange): void {
|
|
80
|
+
const location = this._getVaryingIndex(locationOrName);
|
|
81
|
+
const {buffer, byteLength, byteOffset} = this._getBufferRange(bufferOrRange);
|
|
82
|
+
|
|
83
|
+
if (location < 0) {
|
|
84
|
+
this.unusedBuffers[locationOrName] = buffer;
|
|
85
|
+
log.warn(`${this.id} unusedBuffers varying buffer ${locationOrName}`)();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
this.buffers[location] = {buffer, byteLength, byteOffset};
|
|
90
|
+
|
|
91
|
+
// Need to avoid chrome bug where buffer that is already bound to a different target
|
|
92
|
+
// cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.
|
|
93
|
+
if (!this.bindOnUse) {
|
|
94
|
+
this._bindBuffer(location, buffer, byteOffset, byteLength);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
getBuffer(locationOrName: string | number): Buffer | BufferRange | null {
|
|
99
|
+
if (isIndex(locationOrName)) {
|
|
100
|
+
return this.buffers[locationOrName] || null;
|
|
101
|
+
}
|
|
102
|
+
const location = this._getVaryingIndex(locationOrName);
|
|
103
|
+
return location >= 0 ? this.buffers[location] : null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
bind(funcOrHandle = this.handle) {
|
|
107
|
+
if (typeof funcOrHandle !== 'function') {
|
|
108
|
+
this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, funcOrHandle);
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
let value: unknown;
|
|
113
|
+
|
|
114
|
+
if (!this._bound) {
|
|
115
|
+
this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);
|
|
116
|
+
this._bound = true;
|
|
117
|
+
value = funcOrHandle();
|
|
118
|
+
this._bound = false;
|
|
119
|
+
this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);
|
|
120
|
+
} else {
|
|
121
|
+
value = funcOrHandle();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
unbind() {
|
|
128
|
+
this.bind(null);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// PRIVATE METHODS
|
|
132
|
+
|
|
133
|
+
/** Extract offsets for bindBufferRange */
|
|
134
|
+
protected _getBufferRange(
|
|
135
|
+
bufferOrRange: Buffer | {buffer: Buffer; byteOffset?: number; byteLength?: number}
|
|
136
|
+
): Required<BufferRange> {
|
|
137
|
+
if (bufferOrRange instanceof WEBGLBuffer) {
|
|
138
|
+
return {buffer: bufferOrRange, byteOffset: 0, byteLength: bufferOrRange.byteLength};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// To use bindBufferRange either offset or size must be specified.
|
|
142
|
+
// @ts-expect-error Must be a BufferRange.
|
|
143
|
+
const {buffer, byteOffset = 0, byteLength = bufferOrRange.buffer.byteLength} = bufferOrRange;
|
|
144
|
+
return {buffer, byteOffset, byteLength};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
protected _getVaryingIndex(locationOrName: string | number): number {
|
|
148
|
+
if (isIndex(locationOrName)) {
|
|
149
|
+
return Number(locationOrName);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
for (const varying of this.layout.varyings) {
|
|
153
|
+
if (locationOrName === varying.name) {
|
|
154
|
+
return varying.location;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return -1;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Need to avoid chrome bug where buffer that is already bound to a different target
|
|
163
|
+
* cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.
|
|
164
|
+
*/
|
|
165
|
+
protected _bindBuffers(): void {
|
|
166
|
+
for (const bufferIndex in this.buffers) {
|
|
167
|
+
const {buffer, byteLength, byteOffset} = this._getBufferRange(this.buffers[bufferIndex]);
|
|
168
|
+
this._bindBuffer(Number(bufferIndex), buffer, byteOffset, byteLength);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
protected _unbindBuffers(): void {
|
|
173
|
+
for (const bufferIndex in this.buffers) {
|
|
174
|
+
this.gl2.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, Number(bufferIndex), null);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
protected _bindBuffer(
|
|
179
|
+
index: number,
|
|
180
|
+
buffer: Buffer,
|
|
181
|
+
byteOffset = 0,
|
|
182
|
+
byteLength?: number
|
|
183
|
+
): void {
|
|
184
|
+
const handle = buffer && (buffer as WEBGLBuffer).handle;
|
|
185
|
+
if (!handle || byteLength === undefined) {
|
|
186
|
+
this.gl2.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);
|
|
187
|
+
} else {
|
|
188
|
+
this.gl2.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteLength);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Returns true if the given value is an integer, or a string that
|
|
195
|
+
* trivially converts to an integer (only numeric characters).
|
|
196
|
+
*/
|
|
197
|
+
function isIndex(value: string | number): boolean {
|
|
198
|
+
if (typeof value === 'number') {
|
|
199
|
+
return Number.isInteger(value);
|
|
200
|
+
}
|
|
201
|
+
return /^\d+$/.test(value);
|
|
202
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
// Copyright (c) vis.gl contributors
|
|
3
|
+
|
|
4
|
+
import type {Device, Buffer, VertexArrayProps, TypedArray, NumberArray} from '@luma.gl/core';
|
|
5
|
+
import {VertexArray, getScratchArray, fillArray} from '@luma.gl/core';
|
|
6
|
+
import {GL} from '@luma.gl/constants';
|
|
7
|
+
import {getBrowser} from '@probe.gl/env';
|
|
8
|
+
|
|
9
|
+
import {WebGLDevice} from '../webgl-device';
|
|
10
|
+
import {WEBGLBuffer} from '../resources/webgl-buffer';
|
|
11
|
+
|
|
12
|
+
import {getGLFromVertexType} from '../converters/vertex-formats';
|
|
13
|
+
// import {AccessorObject} from '../..';
|
|
14
|
+
// import {getGLFromVertexType} from '../converters/vertex-formats';
|
|
15
|
+
|
|
16
|
+
/** VertexArrayObject wrapper */
|
|
17
|
+
export class WEBGLVertexArray extends VertexArray {
|
|
18
|
+
override get [Symbol.toStringTag](): string {
|
|
19
|
+
return 'VertexArray';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
readonly device: WebGLDevice;
|
|
23
|
+
readonly handle: WebGLVertexArrayObject;
|
|
24
|
+
|
|
25
|
+
/** Attribute 0 buffer constant */
|
|
26
|
+
private buffer: WEBGLBuffer | null = null;
|
|
27
|
+
private bufferValue = null;
|
|
28
|
+
|
|
29
|
+
/** * Attribute 0 can not be disable on most desktop OpenGL based browsers */
|
|
30
|
+
static isConstantAttributeZeroSupported(device: Device): boolean {
|
|
31
|
+
return device.info.type === 'webgl2' || getBrowser() === 'Chrome';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Create a VertexArray
|
|
35
|
+
constructor(device: WebGLDevice, props?: VertexArrayProps) {
|
|
36
|
+
super(device, props);
|
|
37
|
+
this.device = device;
|
|
38
|
+
this.handle = this.device.gl2.createVertexArray();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
override destroy(): void {
|
|
42
|
+
super.destroy();
|
|
43
|
+
if (this.buffer) {
|
|
44
|
+
this.buffer?.destroy();
|
|
45
|
+
}
|
|
46
|
+
if (this.handle) {
|
|
47
|
+
this.device.gl2.deleteVertexArray(this.handle);
|
|
48
|
+
// @ts-expect-error read-only/undefined
|
|
49
|
+
this.handle = undefined!;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Auto-delete elements?
|
|
53
|
+
// return [this.elements];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
// Set (bind/unbind) an elements buffer, for indexed rendering.
|
|
58
|
+
// Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER or null. Constants not supported
|
|
59
|
+
*
|
|
60
|
+
* @param elementBuffer
|
|
61
|
+
*/
|
|
62
|
+
setIndexBuffer(indexBuffer: Buffer | null): void {
|
|
63
|
+
const buffer = indexBuffer as WEBGLBuffer;
|
|
64
|
+
// Explicitly allow `null` to support clearing the index buffer
|
|
65
|
+
if (buffer && buffer.glTarget !== GL.ELEMENT_ARRAY_BUFFER) {
|
|
66
|
+
throw new Error('Use .setBuffer()');
|
|
67
|
+
}
|
|
68
|
+
// In WebGL The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject
|
|
69
|
+
this.device.gl2.bindVertexArray(this.handle);
|
|
70
|
+
// TODO - this initial binding does not seem to take effect? see bindBeforeRender()
|
|
71
|
+
this.device.gl2.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, buffer ? buffer.handle : null);
|
|
72
|
+
// log.log(1, 'VertexArray.setIndexBuffer', indexBuffer)();
|
|
73
|
+
// log.log(1, `Binding vertex array ${this.id}`, buffer?.id)();
|
|
74
|
+
|
|
75
|
+
this.indexBuffer = buffer;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */
|
|
79
|
+
setBuffer(location: number, attributeBuffer: Buffer): void {
|
|
80
|
+
const buffer = attributeBuffer as WEBGLBuffer;
|
|
81
|
+
// Sanity check target
|
|
82
|
+
if (buffer.glTarget === GL.ELEMENT_ARRAY_BUFFER) {
|
|
83
|
+
throw new Error('Use .setIndexBuffer()');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const {size, type, stride, offset, normalized, integer, divisor} = this._getAccessor(location);
|
|
87
|
+
|
|
88
|
+
this.device.gl2.bindVertexArray(this.handle);
|
|
89
|
+
// A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target
|
|
90
|
+
this.device.gl.bindBuffer(GL.ARRAY_BUFFER, buffer.handle);
|
|
91
|
+
|
|
92
|
+
// WebGL2 supports *integer* data formats, i.e. GPU will see integer values
|
|
93
|
+
if (integer) {
|
|
94
|
+
this.device.assertWebGL2();
|
|
95
|
+
this.device.gl2.vertexAttribIPointer(location, size, type, stride, offset);
|
|
96
|
+
} else {
|
|
97
|
+
// Attaches ARRAY_BUFFER with specified buffer format to location
|
|
98
|
+
this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Mark as non-constant
|
|
102
|
+
this.device.gl.enableVertexAttribArray(location);
|
|
103
|
+
// Set the step mode 0=vertex, 1=instance
|
|
104
|
+
this.device.gl2.vertexAttribDivisor(location, divisor || 0);
|
|
105
|
+
|
|
106
|
+
this.attributes[location] = buffer;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Set a location in vertex attributes array to a constant value, disables the location */
|
|
110
|
+
override setConstant(location: number, value: TypedArray): void {
|
|
111
|
+
this._enable(location, false);
|
|
112
|
+
this.attributes[location] = value;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
init = false;
|
|
116
|
+
|
|
117
|
+
override bindBeforeRender(): void {
|
|
118
|
+
this.device.gl2.bindVertexArray(this.handle);
|
|
119
|
+
// TODO - the initial bind does not seem to take effect.
|
|
120
|
+
if (!this.init) {
|
|
121
|
+
// log.log(1, `Binding vertex array ${this.id}`, this.indexBuffer?.id)();
|
|
122
|
+
const webglBuffer = this.indexBuffer as WEBGLBuffer;
|
|
123
|
+
this.device.gl2.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, webglBuffer?.handle || null);
|
|
124
|
+
this.init = true;
|
|
125
|
+
}
|
|
126
|
+
this._applyConstantAttributes();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
override unbindAfterRender(): void {
|
|
130
|
+
// log.log(1, `Unbinding vertex array ${this.id}`)();
|
|
131
|
+
// TODO technically this is not necessary, but we might be interfacing
|
|
132
|
+
// with code that does not use vertex array objects
|
|
133
|
+
this.device.gl2.bindVertexArray(null);
|
|
134
|
+
// this.device.gl2.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Internal methods
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Constant attributes need to be reset before every draw call
|
|
141
|
+
* Any attribute that is disabled in the current vertex array object
|
|
142
|
+
* is read from the context's global constant value for that attribute location.
|
|
143
|
+
* @note Constant attributes are only supported in WebGL, not in WebGPU
|
|
144
|
+
*/
|
|
145
|
+
protected _applyConstantAttributes(): void {
|
|
146
|
+
for (let location = 0; location < this.maxVertexAttributes; ++location) {
|
|
147
|
+
const constant = this.attributes[location];
|
|
148
|
+
// A typed array means this is a constant
|
|
149
|
+
if (ArrayBuffer.isView(constant)) {
|
|
150
|
+
this.device.setConstantAttribute(location, constant);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Set a location in vertex attributes array to a buffer, enables the location, sets divisor
|
|
157
|
+
* @note requires vertex array to be bound
|
|
158
|
+
*/
|
|
159
|
+
// protected _setAttributeLayout(location: number): void {
|
|
160
|
+
// const {size, type, stride, offset, normalized, integer, divisor} = this._getAccessor(location);
|
|
161
|
+
|
|
162
|
+
// // WebGL2 supports *integer* data formats, i.e. GPU will see integer values
|
|
163
|
+
// if (integer) {
|
|
164
|
+
// this.device.assertWebGL2();
|
|
165
|
+
// this.device.gl2.vertexAttribIPointer(location, size, type, stride, offset);
|
|
166
|
+
// } else {
|
|
167
|
+
// // Attaches ARRAY_BUFFER with specified buffer format to location
|
|
168
|
+
// this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
|
|
169
|
+
// }
|
|
170
|
+
// this.device.gl2.vertexAttribDivisor(location, divisor || 0);
|
|
171
|
+
// }
|
|
172
|
+
|
|
173
|
+
/** Get an accessor from the */
|
|
174
|
+
protected _getAccessor(location: number) {
|
|
175
|
+
const attributeInfo = this.attributeInfos[location];
|
|
176
|
+
if (!attributeInfo) {
|
|
177
|
+
throw new Error(`Unknown attribute location ${location}`);
|
|
178
|
+
}
|
|
179
|
+
const glType = getGLFromVertexType(attributeInfo.bufferDataType);
|
|
180
|
+
return {
|
|
181
|
+
size: attributeInfo.bufferComponents,
|
|
182
|
+
type: glType,
|
|
183
|
+
stride: attributeInfo.byteStride,
|
|
184
|
+
offset: attributeInfo.byteOffset,
|
|
185
|
+
normalized: attributeInfo.normalized,
|
|
186
|
+
// it is the shader attribute declaration, not the vertex memory format,
|
|
187
|
+
// that determines if the data in the buffer will be treated as integers.
|
|
188
|
+
//
|
|
189
|
+
// Also note that WebGL supports assigning non-normalized integer data to floating point attributes,
|
|
190
|
+
// but as far as we can tell, WebGPU does not.
|
|
191
|
+
integer: attributeInfo.integer,
|
|
192
|
+
divisor: attributeInfo.stepMode === 'instance' ? 1 : 0
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Enabling an attribute location makes it reference the currently bound buffer
|
|
198
|
+
* Disabling an attribute location makes it reference the global constant value
|
|
199
|
+
* TODO - handle single values for size 1 attributes?
|
|
200
|
+
* TODO - convert classic arrays based on known type?
|
|
201
|
+
*/
|
|
202
|
+
protected _enable(location: number, enable = true): void {
|
|
203
|
+
// Attribute 0 cannot be disabled in most desktop OpenGL based browsers...
|
|
204
|
+
const canDisableAttributeZero = WEBGLVertexArray.isConstantAttributeZeroSupported(this.device);
|
|
205
|
+
const canDisableAttribute = canDisableAttributeZero || location !== 0;
|
|
206
|
+
|
|
207
|
+
if (enable || canDisableAttribute) {
|
|
208
|
+
location = Number(location);
|
|
209
|
+
this.device.gl2.bindVertexArray(this.handle);
|
|
210
|
+
if (enable) {
|
|
211
|
+
this.device.gl.enableVertexAttribArray(location);
|
|
212
|
+
} else {
|
|
213
|
+
this.device.gl.disableVertexAttribArray(location);
|
|
214
|
+
}
|
|
215
|
+
this.device.gl2.bindVertexArray(null);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Provide a means to create a buffer that is equivalent to a constant.
|
|
221
|
+
* NOTE: Desktop OpenGL cannot disable attribute 0.
|
|
222
|
+
* https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-
|
|
223
|
+
* this-has-significant-performance-penalty
|
|
224
|
+
*/
|
|
225
|
+
getConstantBuffer(elementCount: number, value: TypedArray): Buffer {
|
|
226
|
+
// Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)
|
|
227
|
+
|
|
228
|
+
const constantValue = normalizeConstantArrayValue(value);
|
|
229
|
+
|
|
230
|
+
const byteLength = constantValue.byteLength * elementCount;
|
|
231
|
+
const length = constantValue.length * elementCount;
|
|
232
|
+
|
|
233
|
+
if (this.buffer && byteLength !== this.buffer.byteLength) {
|
|
234
|
+
throw new Error(
|
|
235
|
+
`Buffer size is immutable, byte length ${byteLength} !== ${this.buffer.byteLength}.`
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
let updateNeeded = !this.buffer;
|
|
239
|
+
|
|
240
|
+
this.buffer = this.buffer || this.device.createBuffer({byteLength});
|
|
241
|
+
|
|
242
|
+
// Reallocate and update contents if needed
|
|
243
|
+
updateNeeded = updateNeeded || !compareConstantArrayValues(constantValue, this.bufferValue);
|
|
244
|
+
|
|
245
|
+
if (updateNeeded) {
|
|
246
|
+
// Create a typed array that is big enough, and fill it with the required data
|
|
247
|
+
const typedArray = getScratchArray(value.constructor, length);
|
|
248
|
+
fillArray({target: typedArray, source: constantValue, start: 0, count: length});
|
|
249
|
+
this.buffer.write(typedArray);
|
|
250
|
+
this.bufferValue = value;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return this.buffer;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// HELPER FUNCTIONS
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)
|
|
261
|
+
* TODO - handle single values for size 1 attributes?
|
|
262
|
+
*/
|
|
263
|
+
function normalizeConstantArrayValue(arrayValue: NumberArray) {
|
|
264
|
+
if (Array.isArray(arrayValue)) {
|
|
265
|
+
return new Float32Array(arrayValue);
|
|
266
|
+
}
|
|
267
|
+
return arrayValue;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
*
|
|
272
|
+
*/
|
|
273
|
+
function compareConstantArrayValues(v1: NumberArray, v2: NumberArray): boolean {
|
|
274
|
+
if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
for (let i = 0; i < v1.length; ++i) {
|
|
278
|
+
if (v1[i] !== v2[i]) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// luma.gl, MIT license
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import
|
|
2
|
+
// Copyright (c) vis.gl contributors
|
|
3
|
+
|
|
4
|
+
import type {CanvasContextProps} from '@luma.gl/core';
|
|
5
|
+
import {CanvasContext} from '@luma.gl/core';
|
|
6
|
+
import {WebGLDevice} from './webgl-device';
|
|
7
|
+
import {WEBGLFramebuffer} from './resources/webgl-framebuffer';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
*
|
|
10
|
-
* @todo This class is WIP, intended to replace the old gltools-based context size tracking
|
|
10
|
+
* A WebGL Canvas Context which manages the canvas and handles drawing buffer resizing etc
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export class WebGLCanvasContext extends CanvasContext {
|
|
13
13
|
readonly device: WebGLDevice;
|
|
14
14
|
presentationSize: [number, number];
|
|
15
15
|
private _framebuffer: WEBGLFramebuffer | null = null;
|
|
@@ -19,11 +19,13 @@ export default class WebGLCanvasContext extends CanvasContext {
|
|
|
19
19
|
super(props);
|
|
20
20
|
this.device = device;
|
|
21
21
|
this.presentationSize = [-1, -1];
|
|
22
|
+
this._setAutoCreatedCanvasId(`${this.device.id}-canvas`);
|
|
22
23
|
this.update();
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
getCurrentFramebuffer(): WEBGLFramebuffer {
|
|
26
27
|
this.update();
|
|
28
|
+
// Setting handle to null returns a reference to the default framebuffer
|
|
27
29
|
this._framebuffer = this._framebuffer || new WEBGLFramebuffer(this.device, {handle: null});
|
|
28
30
|
return this._framebuffer;
|
|
29
31
|
}
|
|
@@ -34,6 +36,7 @@ export default class WebGLCanvasContext extends CanvasContext {
|
|
|
34
36
|
const sizeChanged = size[0] !== this.presentationSize[0] || size[1] !== this.presentationSize[1];
|
|
35
37
|
if (sizeChanged) {
|
|
36
38
|
this.presentationSize = size;
|
|
39
|
+
this.resize();
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
42
|
|
|
@@ -49,23 +52,25 @@ export default class WebGLCanvasContext extends CanvasContext {
|
|
|
49
52
|
* canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio
|
|
50
53
|
* See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
|
|
51
54
|
*/
|
|
52
|
-
|
|
55
|
+
resize(options?: {width?: number; height?: number; useDevicePixels?: boolean | number}): void {
|
|
56
|
+
if (!this.device.gl) return;
|
|
57
|
+
|
|
53
58
|
// Resize browser context .
|
|
54
59
|
if (this.canvas) {
|
|
55
|
-
const devicePixelRatio = getDevicePixelRatio(options?.useDevicePixels);
|
|
56
|
-
setDevicePixelRatio(
|
|
60
|
+
const devicePixelRatio = this.getDevicePixelRatio(options?.useDevicePixels);
|
|
61
|
+
this.setDevicePixelRatio(devicePixelRatio, options);
|
|
57
62
|
return;
|
|
58
63
|
}
|
|
59
64
|
|
|
60
65
|
// Resize headless gl context
|
|
61
66
|
const ext = this.device.gl.getExtension('STACKGL_resize_drawingbuffer');
|
|
62
|
-
if (ext && options &&
|
|
67
|
+
if (ext && options && 'width' in options && 'height' in options) {
|
|
63
68
|
ext.resize(options.width, options.height);
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
|
|
67
72
|
commit() {
|
|
68
|
-
// gl.commit was ultimately removed from standard??
|
|
73
|
+
// gl.commit was ultimately removed from the WebGL standard??
|
|
69
74
|
// if (this.offScreen && this.gl.commit) {
|
|
70
75
|
// // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext
|
|
71
76
|
// this.gl.commit();
|