@luma.gl/webgl 9.0.0-alpha.4 → 9.0.0-alpha.40
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 +23 -4
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +42 -47
- 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 +51 -19
- 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 +14 -21
- 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.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/{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 +60 -115
- 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 +3 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +27 -57
- 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 +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 +34 -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 +26 -83
- package/dist/adapter/objects/webgl-resource.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 +49 -78
- 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 -43
- 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 -24
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +46 -155
- 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 +91 -11
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +53 -19
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +107 -230
- 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 +10 -19
- 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 +19 -31
- 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 +119 -235
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- 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 +166 -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 +10 -23
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +74 -41
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +214 -128
- 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 +23 -48
- package/dist/classic/accessor.js.map +1 -1
- package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -29
- package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
- package/dist/classic/{buffer.js → buffer-with-accessor.js} +55 -125
- 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 +200 -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/context/context/create-browser-context.js +53 -0
- 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.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 +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 +16 -39
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +9 -8
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +9 -19
- 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.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +22 -30
- 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.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 +26 -62
- 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 +10390 -0
- package/dist/index.cjs +6615 -0
- package/dist/index.d.ts +27 -24
- 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 +124 -36
- package/src/adapter/converters/sampler-parameters.ts +22 -9
- package/src/adapter/converters/shader-formats.ts +44 -0
- package/src/adapter/converters/texture-formats.ts +267 -194
- package/src/adapter/converters/vertex-formats.ts +71 -10
- package/src/adapter/device-helpers/device-features.ts +13 -3
- package/src/adapter/device-helpers/device-limits.ts +5 -3
- package/src/adapter/device-helpers/get-device-info.ts +17 -10
- package/src/adapter/device-helpers/is-old-ie.ts +3 -0
- package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +39 -21
- package/src/adapter/helpers/get-shader-info.ts +41 -0
- package/src/adapter/helpers/get-shader-layout.ts +121 -146
- package/src/adapter/helpers/parse-shader-compiler-log.ts +4 -2
- package/src/adapter/helpers/set-uniform.ts +39 -35
- package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +7 -5
- 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 +59 -58
- package/src/adapter/resources/webgl-command-buffer.ts +333 -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 +89 -133
- package/src/adapter/resources/webgl-render-pass.ts +160 -4
- package/src/adapter/resources/webgl-render-pipeline.ts +254 -174
- package/src/adapter/resources/webgl-sampler.ts +15 -9
- package/src/adapter/resources/webgl-shader.ts +14 -11
- package/src/adapter/resources/webgl-texture.ts +120 -90
- package/src/adapter/resources/webgl-vertex-array.ts +279 -0
- package/src/adapter/webgl-canvas-context.ts +16 -14
- package/src/adapter/webgl-device.ts +321 -78
- package/src/classic/accessor.ts +7 -17
- package/src/classic/{buffer.ts → buffer-with-accessor.ts} +68 -76
- package/src/classic/clear.ts +113 -0
- package/src/classic/copy-and-blit.ts +314 -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 +140 -0
- package/src/context/context/create-headless-context.ts +51 -0
- package/src/context/context/webgl-checks.ts +3 -1
- package/src/context/debug/spector.ts +9 -6
- package/src/context/debug/webgl-developer-tools.ts +23 -15
- package/src/context/parameters/unified-parameter-api.ts +23 -14
- 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 +10 -9
- package/src/context/polyfill/polyfill-table.ts +21 -16
- 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 +20 -16
- package/src/context/state-tracker/with-parameters.ts +13 -4
- package/src/index.ts +69 -35
- 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.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/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.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 +0 -49
- package/dist/esm/context/context/create-context.js.map +0 -1
- package/dist/esm/context/context/device-pixels.js +0 -98
- package/dist/esm/context/context/device-pixels.js.map +0 -1
- package/dist/esm/context/context/webgl-checks.js +0 -34
- package/dist/esm/context/context/webgl-checks.js.map +0 -1
- package/dist/esm/context/debug/spector.js +0 -76
- package/dist/esm/context/debug/spector.js.map +0 -1
- package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
- package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
- package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
- package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
- package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-context.js +0 -92
- package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-table.js +0 -160
- package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
- package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/esm/context/state-tracker/track-context-state.js +0 -183
- package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/esm/context/state-tracker/with-parameters.js +0 -36
- package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/esm/index.js +0 -27
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/init.js +0 -4
- package/dist/esm/init.js.map +0 -1
- package/dist/esm/types/webgl.js +0 -2
- package/dist/esm/types/webgl.js.map +0 -1
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
- package/dist/init.d.ts +0 -2
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -4
- package/dist/init.js.map +0 -1
- package/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/adapter/objects/webgl-vertex-array-object.ts +0 -111
- package/src/bundle.ts +0 -4
- package/src/context/context/context-state.ts +0 -41
- package/src/context/context/create-context.ts +0 -110
- package/src/context/context/device-pixels.ts +0 -152
- package/src/init.ts +0 -4
- package/src/types/webgl.ts +0 -283
|
@@ -1,56 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import {RenderPipeline, cast, log, decodeVertexFormat} from '@luma.gl/api';
|
|
13
|
-
import GL from '@luma.gl/constants';
|
|
14
|
-
import {getWebGLDataType} from '../converters/texture-formats';
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
// Copyright (c) vis.gl contributors
|
|
3
|
+
|
|
4
|
+
import type {UniformValue, RenderPipelineProps, Binding} from '@luma.gl/core';
|
|
5
|
+
import type {ShaderLayout, PrimitiveTopology} from '@luma.gl/core';
|
|
6
|
+
import type {RenderPass, VertexArray} from '@luma.gl/core';
|
|
7
|
+
import {RenderPipeline, cast, log} from '@luma.gl/core';
|
|
8
|
+
import {mergeShaderLayout} from '@luma.gl/core';
|
|
9
|
+
// import {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';
|
|
10
|
+
import {GL} from '@luma.gl/constants';
|
|
11
|
+
|
|
15
12
|
import {getShaderLayout} from '../helpers/get-shader-layout';
|
|
16
|
-
import {
|
|
13
|
+
import {withDeviceAndGLParameters} from '../converters/device-parameters';
|
|
17
14
|
import {setUniform} from '../helpers/set-uniform';
|
|
18
15
|
// import {copyUniform, checkUniformValues} from '../../classes/uniforms';
|
|
19
16
|
|
|
20
|
-
import WebGLDevice from '../webgl-device';
|
|
21
|
-
import WEBGLBuffer from './webgl-buffer';
|
|
22
|
-
import WEBGLShader from './webgl-shader';
|
|
23
|
-
import
|
|
24
|
-
import
|
|
17
|
+
import {WebGLDevice} from '../webgl-device';
|
|
18
|
+
import {WEBGLBuffer} from './webgl-buffer';
|
|
19
|
+
import {WEBGLShader} from './webgl-shader';
|
|
20
|
+
import {WEBGLFramebuffer} from './webgl-framebuffer';
|
|
21
|
+
import {WEBGLTexture} from './webgl-texture';
|
|
22
|
+
// import {WEBGLVertexArray} from './webgl-vertex-array';
|
|
23
|
+
import {WEBGLRenderPass} from './webgl-render-pass';
|
|
25
24
|
|
|
26
25
|
const LOG_PROGRAM_PERF_PRIORITY = 4;
|
|
27
26
|
|
|
28
27
|
/** Creates a new render pipeline */
|
|
29
|
-
export
|
|
28
|
+
export class WEBGLRenderPipeline extends RenderPipeline {
|
|
29
|
+
/** The WebGL device that created this render pipeline */
|
|
30
30
|
device: WebGLDevice;
|
|
31
|
+
/** Handle to underlying WebGL program */
|
|
31
32
|
handle: WebGLProgram;
|
|
33
|
+
/** vertex shader */
|
|
32
34
|
vs: WEBGLShader;
|
|
35
|
+
/** fragment shader */
|
|
33
36
|
fs: WEBGLShader;
|
|
34
|
-
layout
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
/** The layout extracted from shader by WebGL introspection APIs */
|
|
38
|
+
introspectedLayout: ShaderLayout;
|
|
39
|
+
|
|
40
|
+
/** Uniforms set on this model */
|
|
41
|
+
uniforms: Record<string, UniformValue> = {};
|
|
42
|
+
/** Bindings set on this model */
|
|
43
|
+
bindings: Record<string, Binding> = {};
|
|
44
|
+
/** WebGL varyings */
|
|
45
|
+
varyings: string[] | null = null;
|
|
46
|
+
|
|
43
47
|
_textureUniforms: Record<string, any> = {};
|
|
44
48
|
_textureIndexCounter: number = 0;
|
|
45
49
|
_uniformCount: number = 0;
|
|
46
|
-
_uniformSetters: Record<string, Function
|
|
50
|
+
_uniformSetters: Record<string, Function> = {}; // TODO are these used?
|
|
47
51
|
|
|
48
52
|
constructor(device: WebGLDevice, props: RenderPipelineProps) {
|
|
49
53
|
super(device, props);
|
|
50
54
|
this.device = device;
|
|
51
55
|
this.handle = this.props.handle || this.device.gl.createProgram();
|
|
52
|
-
|
|
53
|
-
this.handle.__SPECTOR_Metadata = {id: this.props.id};
|
|
56
|
+
this.device.setSpectorMetadata(this.handle, {id: this.props.id});
|
|
54
57
|
|
|
55
58
|
// Create shaders if needed
|
|
56
59
|
this.vs = cast<WEBGLShader>(props.vs);
|
|
@@ -64,63 +67,74 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
64
67
|
if (varyings && varyings.length > 0) {
|
|
65
68
|
this.device.assertWebGL2();
|
|
66
69
|
this.varyings = varyings;
|
|
67
|
-
this.device.gl2
|
|
70
|
+
this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);
|
|
68
71
|
}
|
|
69
72
|
|
|
70
73
|
this._compileAndLink();
|
|
71
74
|
|
|
72
|
-
this.
|
|
73
|
-
|
|
75
|
+
this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);
|
|
76
|
+
// Merge provided layout with introspected layout
|
|
77
|
+
this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);
|
|
78
|
+
// Merge layout with any buffer map overrides
|
|
79
|
+
// this.bufferLayout = props.bufferLayout || [];
|
|
80
|
+
// this.shaderLayout = mergeBufferMap(this.shaderLayout, this.bufferLayout);
|
|
74
81
|
}
|
|
75
82
|
|
|
76
|
-
destroy(): void {
|
|
83
|
+
override destroy(): void {
|
|
77
84
|
if (this.handle) {
|
|
78
85
|
this.device.gl.deleteProgram(this.handle);
|
|
79
|
-
this.handle = null;
|
|
86
|
+
// this.handle = null;
|
|
87
|
+
this.destroyed = true;
|
|
80
88
|
}
|
|
81
89
|
}
|
|
82
90
|
|
|
83
|
-
setIndexBuffer(indexBuffer: Buffer): void {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
91
|
+
// setIndexBuffer(indexBuffer: Buffer): void {
|
|
92
|
+
// const webglBuffer = cast<WEBGLBuffer>(indexBuffer);
|
|
93
|
+
// this.vertexArrayObject.setElementBuffer(webglBuffer);
|
|
94
|
+
// this._indexBuffer = indexBuffer;
|
|
95
|
+
// }
|
|
96
|
+
|
|
97
|
+
// /** @todo needed for portable model */
|
|
98
|
+
// setAttributes(attributes: Record<string, Buffer>): void {
|
|
99
|
+
// for (const [name, buffer] of Object.entries(attributes)) {
|
|
100
|
+
// const webglBuffer = cast<WEBGLBuffer>(buffer);
|
|
101
|
+
// const attribute = getAttributeLayout(this.layout, name);
|
|
102
|
+
// if (!attribute) {
|
|
103
|
+
// log.warn(
|
|
104
|
+
// `Ignoring buffer supplied for unknown attribute "${name}" in pipeline "${this.id}" (buffer "${buffer.id}")`
|
|
105
|
+
// )();
|
|
106
|
+
// continue;
|
|
107
|
+
// }
|
|
108
|
+
// const decoded = decodeVertexFormat(attribute.format);
|
|
109
|
+
// const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;
|
|
110
|
+
// const divisor = attribute.stepMode === 'instance' ? 1 : 0;
|
|
111
|
+
// const type = getWebGLDataType(typeString);
|
|
112
|
+
// this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
|
|
113
|
+
// size,
|
|
114
|
+
// type,
|
|
115
|
+
// stride,
|
|
116
|
+
// offset: 0,
|
|
117
|
+
// normalized,
|
|
118
|
+
// integer,
|
|
119
|
+
// divisor
|
|
120
|
+
// });
|
|
121
|
+
// }
|
|
122
|
+
// }
|
|
88
123
|
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const attribute = getAttributeLayout(this.layout, name);
|
|
94
|
-
if (!attribute) {
|
|
95
|
-
log.warn(`Ignoring buffer supplied for unknown attribute "${name}" in pipeline "${this.id}" (buffer "${buffer.id}")`)();
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
const decoded = decodeVertexFormat(attribute.format);
|
|
99
|
-
const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;
|
|
100
|
-
const divisor = attribute.stepMode === 'instance' ? 1 : 0;
|
|
101
|
-
const type = getWebGLDataType(typeString);
|
|
102
|
-
this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
|
|
103
|
-
size,
|
|
104
|
-
type,
|
|
105
|
-
stride,
|
|
106
|
-
offset: 0,
|
|
107
|
-
normalized,
|
|
108
|
-
integer,
|
|
109
|
-
divisor: attribute.stepMode === 'instance' ? 1 : 0
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/** @todo needed for portable model */
|
|
124
|
+
/**
|
|
125
|
+
* Bindings include: textures, samplers and uniform buffers
|
|
126
|
+
* @todo needed for portable model
|
|
127
|
+
*/
|
|
115
128
|
setBindings(bindings: Record<string, Binding>): void {
|
|
116
129
|
// if (log.priority >= 2) {
|
|
117
130
|
// checkUniformValues(uniforms, this.id, this._uniformSetters);
|
|
118
131
|
// }
|
|
119
132
|
|
|
120
133
|
for (const [name, value] of Object.entries(bindings)) {
|
|
121
|
-
const binding = this.
|
|
134
|
+
const binding = this.shaderLayout.bindings.find(binding => binding.name === name);
|
|
122
135
|
if (!binding) {
|
|
123
136
|
log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();
|
|
137
|
+
continue; // eslint-disable-line no-continue
|
|
124
138
|
}
|
|
125
139
|
if (!value) {
|
|
126
140
|
log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();
|
|
@@ -133,7 +147,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
133
147
|
}
|
|
134
148
|
break;
|
|
135
149
|
case 'texture':
|
|
136
|
-
if (!(value instanceof WEBGLTexture)) {
|
|
150
|
+
if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
|
|
137
151
|
throw new Error('texture value');
|
|
138
152
|
}
|
|
139
153
|
break;
|
|
@@ -148,7 +162,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
148
162
|
}
|
|
149
163
|
}
|
|
150
164
|
|
|
151
|
-
setUniforms(uniforms: Record<string,
|
|
165
|
+
setUniforms(uniforms: Record<string, UniformValue>) {
|
|
152
166
|
// TODO - check against layout
|
|
153
167
|
Object.assign(this.uniforms, uniforms);
|
|
154
168
|
}
|
|
@@ -158,7 +172,9 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
158
172
|
* This function unifies those ways into a single call using common parameters with sane defaults
|
|
159
173
|
*/
|
|
160
174
|
draw(options: {
|
|
161
|
-
renderPass
|
|
175
|
+
renderPass: RenderPass;
|
|
176
|
+
/** vertex attributes */
|
|
177
|
+
vertexArray: VertexArray;
|
|
162
178
|
vertexCount?: number;
|
|
163
179
|
indexCount?: number;
|
|
164
180
|
instanceCount?: number;
|
|
@@ -168,73 +184,105 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
168
184
|
baseVertex?: number;
|
|
169
185
|
}): boolean {
|
|
170
186
|
const {
|
|
171
|
-
renderPass
|
|
187
|
+
renderPass,
|
|
188
|
+
vertexArray,
|
|
172
189
|
vertexCount,
|
|
173
|
-
indexCount,
|
|
190
|
+
// indexCount,
|
|
174
191
|
instanceCount,
|
|
175
|
-
firstVertex = 0
|
|
176
|
-
firstIndex,
|
|
177
|
-
firstInstance,
|
|
178
|
-
baseVertex
|
|
192
|
+
firstVertex = 0
|
|
193
|
+
// firstIndex,
|
|
194
|
+
// firstInstance,
|
|
195
|
+
// baseVertex
|
|
179
196
|
} = options;
|
|
180
197
|
|
|
181
|
-
const
|
|
182
|
-
const isIndexed: boolean = Boolean(
|
|
183
|
-
const
|
|
184
|
-
const isInstanced: boolean =
|
|
198
|
+
const glDrawMode = getGLDrawMode(this.props.topology);
|
|
199
|
+
const isIndexed: boolean = Boolean(vertexArray.indexBuffer);
|
|
200
|
+
const glIndexType = (vertexArray.indexBuffer as WEBGLBuffer)?.glIndexType;
|
|
201
|
+
const isInstanced: boolean = Number(instanceCount) > 0;
|
|
185
202
|
|
|
186
203
|
// Avoid WebGL draw call when not rendering any data or values are incomplete
|
|
187
204
|
// Note: async textures set as uniforms might still be loading.
|
|
188
205
|
// Now that all uniforms have been updated, check if any texture
|
|
189
206
|
// in the uniforms is not yet initialized, then we don't draw
|
|
190
|
-
if (!this._areTexturesRenderable() ||
|
|
207
|
+
if (!this._areTexturesRenderable() || vertexCount === 0) {
|
|
191
208
|
// (isInstanced && instanceCount === 0)
|
|
192
209
|
return false;
|
|
193
210
|
}
|
|
194
211
|
|
|
195
212
|
this.device.gl.useProgram(this.handle);
|
|
196
213
|
|
|
197
|
-
|
|
198
|
-
|
|
214
|
+
// Note: Rebinds constant attributes before each draw call
|
|
215
|
+
vertexArray.bindBeforeRender(renderPass);
|
|
199
216
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
217
|
+
const primitiveMode = getGLPrimitive(this.props.topology);
|
|
218
|
+
const transformFeedback: any = null;
|
|
219
|
+
if (transformFeedback) {
|
|
220
|
+
transformFeedback.begin(primitiveMode);
|
|
221
|
+
}
|
|
205
222
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
223
|
+
// We have to apply bindings before every draw call since other draw calls will overwrite
|
|
224
|
+
this._applyBindings();
|
|
225
|
+
this._applyUniforms();
|
|
226
|
+
|
|
227
|
+
const webglRenderPass = renderPass as WEBGLRenderPass;
|
|
228
|
+
// // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
|
|
229
|
+
// if (isIndexed && isInstanced) {
|
|
230
|
+
// // ANGLE_instanced_arrays extension
|
|
231
|
+
// this.device.gl2?.drawElementsInstanced(
|
|
232
|
+
// drawMode,
|
|
233
|
+
// vertexCount || 0, // indexCount?
|
|
234
|
+
// indexType,
|
|
235
|
+
// firstVertex,
|
|
236
|
+
// instanceCount || 0
|
|
237
|
+
// );
|
|
238
|
+
// // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
239
|
+
// // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
|
|
240
|
+
// } else if (isIndexed) {
|
|
241
|
+
// this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
|
|
242
|
+
// } else if (isInstanced) {
|
|
243
|
+
// this.device.gl2?.drawArraysInstanced(
|
|
244
|
+
// drawMode,
|
|
245
|
+
// firstVertex,
|
|
246
|
+
// vertexCount || 0,
|
|
247
|
+
// instanceCount || 0
|
|
248
|
+
// );
|
|
249
|
+
// } else {
|
|
250
|
+
// this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
|
|
251
|
+
// }
|
|
252
|
+
// });
|
|
253
|
+
|
|
254
|
+
withDeviceAndGLParameters(this.device, this.props.parameters, webglRenderPass.glParameters, () => {
|
|
255
|
+
if (isIndexed && isInstanced) {
|
|
256
|
+
// ANGLE_instanced_arrays extension
|
|
257
|
+
this.device.gl2?.drawElementsInstanced(
|
|
258
|
+
glDrawMode,
|
|
259
|
+
vertexCount || 0, // indexCount?
|
|
260
|
+
glIndexType,
|
|
261
|
+
firstVertex,
|
|
262
|
+
instanceCount || 0
|
|
263
|
+
);
|
|
264
|
+
// } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
265
|
+
// this.device.gl2.drawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);
|
|
266
|
+
} else if (isIndexed) {
|
|
267
|
+
this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?
|
|
268
|
+
} else if (isInstanced) {
|
|
269
|
+
this.device.gl2?.drawArraysInstanced(
|
|
270
|
+
glDrawMode,
|
|
271
|
+
firstVertex,
|
|
272
|
+
vertexCount || 0,
|
|
273
|
+
instanceCount || 0
|
|
274
|
+
);
|
|
275
|
+
} else {
|
|
276
|
+
this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);
|
|
277
|
+
}
|
|
232
278
|
|
|
233
279
|
if (transformFeedback) {
|
|
234
280
|
transformFeedback.end();
|
|
235
281
|
}
|
|
236
282
|
});
|
|
237
283
|
|
|
284
|
+
vertexArray.unbindAfterRender(renderPass);
|
|
285
|
+
|
|
238
286
|
return true;
|
|
239
287
|
}
|
|
240
288
|
|
|
@@ -251,17 +299,19 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
251
299
|
|
|
252
300
|
// Avoid checking program linking error in production
|
|
253
301
|
// @ts-expect-error
|
|
254
|
-
if (gl.debug
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
|
|
258
|
-
}
|
|
302
|
+
if (!gl.debug && log.level === 0) {
|
|
303
|
+
// return;
|
|
304
|
+
}
|
|
259
305
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
306
|
+
const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
|
|
307
|
+
if (!linked) {
|
|
308
|
+
throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
gl.validateProgram(this.handle);
|
|
312
|
+
const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
|
|
313
|
+
if (!validated) {
|
|
314
|
+
throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
|
|
265
315
|
}
|
|
266
316
|
}
|
|
267
317
|
|
|
@@ -275,14 +325,16 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
275
325
|
_areTexturesRenderable() {
|
|
276
326
|
let texturesRenderable = true;
|
|
277
327
|
|
|
278
|
-
for (const [
|
|
328
|
+
for (const [, texture] of Object.entries(this._textureUniforms)) {
|
|
279
329
|
texture.update();
|
|
280
330
|
texturesRenderable = texturesRenderable && texture.loaded;
|
|
281
331
|
}
|
|
282
332
|
|
|
283
|
-
for (const [
|
|
333
|
+
for (const [, texture] of Object.entries(this.bindings)) {
|
|
284
334
|
// texture.update();
|
|
335
|
+
// @ts-expect-error
|
|
285
336
|
if (texture.loaded !== undefined) {
|
|
337
|
+
// @ts-expect-error
|
|
286
338
|
texturesRenderable = texturesRenderable && texture.loaded;
|
|
287
339
|
}
|
|
288
340
|
}
|
|
@@ -290,15 +342,40 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
290
342
|
return texturesRenderable;
|
|
291
343
|
}
|
|
292
344
|
|
|
293
|
-
/**
|
|
345
|
+
/**
|
|
346
|
+
* Constant attributes need to be reset before every draw call
|
|
347
|
+
* Any attribute that is disabled in the current vertex array object
|
|
348
|
+
* is read from the context's global constant value for that attribute location.
|
|
349
|
+
* @note Constant attributes are only supported in WebGL, not in WebGPU
|
|
350
|
+
*
|
|
351
|
+
_applyConstantAttributes(vertexArray: WEBGLVertexArray): void {
|
|
352
|
+
const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);
|
|
353
|
+
for (const [name, value] of Object.entries(this.)) {
|
|
354
|
+
const attributeInfo = attributeInfos[name];
|
|
355
|
+
if (!attributeInfo) {
|
|
356
|
+
log.warn(
|
|
357
|
+
`Ignoring constant value supplied for unknown attribute "${name}" in pipeline "${this.id}"`
|
|
358
|
+
)();
|
|
359
|
+
continue; // eslint-disable-line no-continue
|
|
360
|
+
}
|
|
361
|
+
vertexArray.setConstant(attributeInfo.location, value);
|
|
362
|
+
vertexArray.enable(attributeInfo.location, false);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
*/
|
|
366
|
+
|
|
367
|
+
/** Apply any bindings (before each draw call) */
|
|
294
368
|
_applyBindings() {
|
|
295
369
|
this.device.gl.useProgram(this.handle);
|
|
296
370
|
|
|
297
371
|
const {gl2} = this.device;
|
|
372
|
+
if (!gl2) {
|
|
373
|
+
throw new Error('bindings');
|
|
374
|
+
}
|
|
298
375
|
|
|
299
376
|
let textureUnit = 0;
|
|
300
377
|
let uniformBufferIndex = 0;
|
|
301
|
-
for (const binding of this.
|
|
378
|
+
for (const binding of this.shaderLayout.bindings) {
|
|
302
379
|
const value = this.bindings[binding.name];
|
|
303
380
|
if (!value) {
|
|
304
381
|
throw new Error(`No value for binding ${binding.name} in ${this.id}`);
|
|
@@ -319,8 +396,11 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
319
396
|
gl2.bindBufferRange(
|
|
320
397
|
GL.UNIFORM_BUFFER,
|
|
321
398
|
uniformBufferIndex,
|
|
399
|
+
// @ts-expect-error
|
|
322
400
|
value.buffer.handle,
|
|
401
|
+
// @ts-expect-error
|
|
323
402
|
value.offset || 0,
|
|
403
|
+
// @ts-expect-error
|
|
324
404
|
value.size || value.buffer.byteLength - value.offset
|
|
325
405
|
);
|
|
326
406
|
}
|
|
@@ -328,10 +408,19 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
328
408
|
break;
|
|
329
409
|
|
|
330
410
|
case 'texture':
|
|
331
|
-
if (!(value instanceof WEBGLTexture)) {
|
|
411
|
+
if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
|
|
332
412
|
throw new Error('texture');
|
|
333
413
|
}
|
|
334
|
-
|
|
414
|
+
let texture: WEBGLTexture;
|
|
415
|
+
if (value instanceof WEBGLTexture) {
|
|
416
|
+
texture = value;
|
|
417
|
+
} else if (value instanceof WEBGLFramebuffer && value.colorAttachments[0] instanceof WEBGLTexture) {
|
|
418
|
+
log.warn('Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead')();
|
|
419
|
+
texture = value.colorAttachments[0];
|
|
420
|
+
} else {
|
|
421
|
+
throw new Error('No texture');
|
|
422
|
+
}
|
|
423
|
+
|
|
335
424
|
gl2.activeTexture(GL.TEXTURE0 + textureUnit);
|
|
336
425
|
gl2.bindTexture(texture.target, texture.handle);
|
|
337
426
|
// gl2.bindSampler(textureUnit, sampler.handle);
|
|
@@ -349,10 +438,14 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
349
438
|
}
|
|
350
439
|
}
|
|
351
440
|
|
|
441
|
+
/**
|
|
442
|
+
* Due to program sharing, uniforms need to be reset before every draw call
|
|
443
|
+
* (though caching will avoid redundant WebGL calls)
|
|
444
|
+
*/
|
|
352
445
|
_applyUniforms() {
|
|
353
|
-
for (const uniformLayout of this.
|
|
446
|
+
for (const uniformLayout of this.shaderLayout.uniforms || []) {
|
|
354
447
|
const {name, location, type, textureUnit} = uniformLayout;
|
|
355
|
-
const value = this.uniforms[name]
|
|
448
|
+
const value = this.uniforms[name] ?? textureUnit;
|
|
356
449
|
if (value !== undefined) {
|
|
357
450
|
setUniform(this.device.gl, location, type, value);
|
|
358
451
|
}
|
|
@@ -360,18 +453,27 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
360
453
|
}
|
|
361
454
|
}
|
|
362
455
|
|
|
363
|
-
/** Get the primitive type for
|
|
364
|
-
function
|
|
456
|
+
/** Get the primitive type for draw */
|
|
457
|
+
function getGLDrawMode(
|
|
365
458
|
topology: PrimitiveTopology
|
|
366
|
-
):
|
|
459
|
+
):
|
|
460
|
+
| GL.POINTS
|
|
461
|
+
| GL.LINES
|
|
462
|
+
| GL.LINE_STRIP
|
|
463
|
+
| GL.LINE_LOOP
|
|
464
|
+
| GL.TRIANGLES
|
|
465
|
+
| GL.TRIANGLE_STRIP
|
|
466
|
+
| GL.TRIANGLE_FAN {
|
|
367
467
|
// prettier-ignore
|
|
368
468
|
switch (topology) {
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
469
|
+
case 'point-list': return GL.POINTS;
|
|
470
|
+
case 'line-list': return GL.LINES;
|
|
471
|
+
case 'line-strip': return GL.LINE_STRIP;
|
|
472
|
+
case 'line-loop-webgl': return GL.LINE_LOOP;
|
|
473
|
+
case 'triangle-list': return GL.TRIANGLES;
|
|
474
|
+
case 'triangle-strip': return GL.TRIANGLE_STRIP;
|
|
475
|
+
case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;
|
|
476
|
+
default: throw new Error(topology);
|
|
375
477
|
}
|
|
376
478
|
}
|
|
377
479
|
|
|
@@ -379,35 +481,13 @@ function getDrawMode(
|
|
|
379
481
|
function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {
|
|
380
482
|
// prettier-ignore
|
|
381
483
|
switch (topology) {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
function getAttributesByLocation(
|
|
392
|
-
attributes: Record<string, Buffer>,
|
|
393
|
-
layout: ShaderLayout
|
|
394
|
-
): Record<number, Buffer> {
|
|
395
|
-
const byLocation: Record<number, Buffer> = {};
|
|
396
|
-
for (const [name, buffer] of Object.entries(attributes)) {
|
|
397
|
-
const attribute = getAttributeLayout(layout, name);
|
|
398
|
-
byLocation[attribute.location] = buffer;
|
|
399
|
-
}
|
|
400
|
-
return byLocation;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
function getAttributeLayout(layout: ShaderLayout, name: string): AttributeLayout | undefined {
|
|
404
|
-
return layout.attributes.find((binding) => binding.name === name);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
function getBindingLayout(layout: ShaderLayout, name: string): BindingLayout {
|
|
408
|
-
const binding = layout.bindings.find((binding) => binding.name === name);
|
|
409
|
-
if (!binding) {
|
|
410
|
-
throw new Error(`Unknown binding ${name}`);
|
|
484
|
+
case 'point-list': return GL.POINTS;
|
|
485
|
+
case 'line-list': return GL.LINES;
|
|
486
|
+
case 'line-strip': return GL.LINES;
|
|
487
|
+
case 'line-loop-webgl': return GL.LINES;
|
|
488
|
+
case 'triangle-list': return GL.TRIANGLES;
|
|
489
|
+
case 'triangle-strip': return GL.TRIANGLES;
|
|
490
|
+
case 'triangle-fan-webgl': return GL.TRIANGLES;
|
|
491
|
+
default: throw new Error(topology);
|
|
411
492
|
}
|
|
412
|
-
return binding;
|
|
413
493
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
// Copyright (c) vis.gl contributors
|
|
3
|
+
|
|
4
|
+
import {Sampler, SamplerProps} from '@luma.gl/core';
|
|
5
|
+
import {GL, GLSamplerParameters} from '@luma.gl/constants';
|
|
4
6
|
import {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';
|
|
5
|
-
import type WebGLDevice from '../webgl-device';
|
|
7
|
+
import type {WebGLDevice} from '../webgl-device';
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* Sampler object -
|
|
@@ -11,10 +13,10 @@ import type WebGLDevice from '../webgl-device';
|
|
|
11
13
|
* so that they can be set directly on the texture
|
|
12
14
|
* https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html
|
|
13
15
|
*/
|
|
14
|
-
export
|
|
16
|
+
export class WEBGLSampler extends Sampler {
|
|
15
17
|
readonly device: WebGLDevice;
|
|
16
18
|
readonly handle: WebGLSampler;
|
|
17
|
-
readonly parameters:
|
|
19
|
+
readonly parameters: GLSamplerParameters;
|
|
18
20
|
|
|
19
21
|
constructor(device: WebGLDevice, props: SamplerProps) {
|
|
20
22
|
super(device, props);
|
|
@@ -26,16 +28,20 @@ export default class WEBGLSampler extends Sampler {
|
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
30
|
|
|
29
|
-
destroy(): void {
|
|
31
|
+
override destroy(): void {
|
|
30
32
|
if (this.handle) {
|
|
31
33
|
this.device.gl2.deleteSampler(this.handle);
|
|
32
|
-
// @ts-expect-error
|
|
34
|
+
// @ts-expect-error read-only/undefined
|
|
33
35
|
this.handle = undefined;
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
|
|
39
|
+
override toString(): string {
|
|
40
|
+
return `Sampler(${this.id},${JSON.stringify(this.props)})`;
|
|
41
|
+
}
|
|
42
|
+
|
|
37
43
|
/** Set sampler parameters on the sampler */
|
|
38
|
-
private _setSamplerParameters(parameters:
|
|
44
|
+
private _setSamplerParameters(parameters: GLSamplerParameters): void {
|
|
39
45
|
for (const [pname, value] of Object.entries(parameters)) {
|
|
40
46
|
// Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.
|
|
41
47
|
// For now, pick the float version for parameters specified as GLfloat.
|