@luma.gl/webgl 9.0.0-alpha.4 → 9.0.0-alpha.41
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 +108 -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 +10391 -0
- package/dist/index.cjs +6625 -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 +265 -170
- 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,66 +67,82 @@ 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
|
+
const validBindings = this.shaderLayout.bindings
|
|
137
|
+
.map(binding => `"${binding.name}"`)
|
|
138
|
+
.join(', ');
|
|
139
|
+
log.warn(
|
|
140
|
+
`Unknown binding "${name}" in render pipeline "${this.id}", expected one of ${validBindings}`
|
|
141
|
+
)();
|
|
142
|
+
continue; // eslint-disable-line no-continue
|
|
124
143
|
}
|
|
125
144
|
if (!value) {
|
|
126
|
-
log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();
|
|
145
|
+
log.warn(`Unsetting binding "${name}" in render pipeline "${this.id}"`)();
|
|
127
146
|
}
|
|
128
147
|
switch (binding.type) {
|
|
129
148
|
case 'uniform':
|
|
@@ -133,7 +152,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
133
152
|
}
|
|
134
153
|
break;
|
|
135
154
|
case 'texture':
|
|
136
|
-
if (!(value instanceof WEBGLTexture)) {
|
|
155
|
+
if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
|
|
137
156
|
throw new Error('texture value');
|
|
138
157
|
}
|
|
139
158
|
break;
|
|
@@ -148,7 +167,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
148
167
|
}
|
|
149
168
|
}
|
|
150
169
|
|
|
151
|
-
setUniforms(uniforms: Record<string,
|
|
170
|
+
setUniforms(uniforms: Record<string, UniformValue>) {
|
|
152
171
|
// TODO - check against layout
|
|
153
172
|
Object.assign(this.uniforms, uniforms);
|
|
154
173
|
}
|
|
@@ -158,7 +177,9 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
158
177
|
* This function unifies those ways into a single call using common parameters with sane defaults
|
|
159
178
|
*/
|
|
160
179
|
draw(options: {
|
|
161
|
-
renderPass
|
|
180
|
+
renderPass: RenderPass;
|
|
181
|
+
/** vertex attributes */
|
|
182
|
+
vertexArray: VertexArray;
|
|
162
183
|
vertexCount?: number;
|
|
163
184
|
indexCount?: number;
|
|
164
185
|
instanceCount?: number;
|
|
@@ -168,72 +189,109 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
168
189
|
baseVertex?: number;
|
|
169
190
|
}): boolean {
|
|
170
191
|
const {
|
|
171
|
-
renderPass
|
|
192
|
+
renderPass,
|
|
193
|
+
vertexArray,
|
|
172
194
|
vertexCount,
|
|
173
|
-
indexCount,
|
|
195
|
+
// indexCount,
|
|
174
196
|
instanceCount,
|
|
175
|
-
firstVertex = 0
|
|
176
|
-
firstIndex,
|
|
177
|
-
firstInstance,
|
|
178
|
-
baseVertex
|
|
197
|
+
firstVertex = 0
|
|
198
|
+
// firstIndex,
|
|
199
|
+
// firstInstance,
|
|
200
|
+
// baseVertex
|
|
179
201
|
} = options;
|
|
180
202
|
|
|
181
|
-
const
|
|
182
|
-
const isIndexed: boolean = Boolean(
|
|
183
|
-
const
|
|
184
|
-
const isInstanced: boolean =
|
|
203
|
+
const glDrawMode = getGLDrawMode(this.props.topology);
|
|
204
|
+
const isIndexed: boolean = Boolean(vertexArray.indexBuffer);
|
|
205
|
+
const glIndexType = (vertexArray.indexBuffer as WEBGLBuffer)?.glIndexType;
|
|
206
|
+
const isInstanced: boolean = Number(instanceCount) > 0;
|
|
185
207
|
|
|
186
208
|
// Avoid WebGL draw call when not rendering any data or values are incomplete
|
|
187
209
|
// Note: async textures set as uniforms might still be loading.
|
|
188
210
|
// Now that all uniforms have been updated, check if any texture
|
|
189
211
|
// in the uniforms is not yet initialized, then we don't draw
|
|
190
|
-
if (!this._areTexturesRenderable() ||
|
|
212
|
+
if (!this._areTexturesRenderable() || vertexCount === 0) {
|
|
191
213
|
// (isInstanced && instanceCount === 0)
|
|
192
214
|
return false;
|
|
193
215
|
}
|
|
194
216
|
|
|
195
217
|
this.device.gl.useProgram(this.handle);
|
|
196
218
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
const primitiveMode = getGLPrimitive(this.props.topology);
|
|
201
|
-
const transformFeedback: any = null;
|
|
202
|
-
if (transformFeedback) {
|
|
203
|
-
transformFeedback.begin(primitiveMode);
|
|
204
|
-
}
|
|
219
|
+
// Note: Rebinds constant attributes before each draw call
|
|
220
|
+
vertexArray.bindBeforeRender(renderPass);
|
|
205
221
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
222
|
+
const primitiveMode = getGLPrimitive(this.props.topology);
|
|
223
|
+
const transformFeedback: any = null;
|
|
224
|
+
if (transformFeedback) {
|
|
225
|
+
transformFeedback.begin(primitiveMode);
|
|
226
|
+
}
|
|
209
227
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
228
|
+
// We have to apply bindings before every draw call since other draw calls will overwrite
|
|
229
|
+
this._applyBindings();
|
|
230
|
+
this._applyUniforms();
|
|
231
|
+
|
|
232
|
+
const webglRenderPass = renderPass as WEBGLRenderPass;
|
|
233
|
+
// // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
|
|
234
|
+
// if (isIndexed && isInstanced) {
|
|
235
|
+
// // ANGLE_instanced_arrays extension
|
|
236
|
+
// this.device.gl2?.drawElementsInstanced(
|
|
237
|
+
// drawMode,
|
|
238
|
+
// vertexCount || 0, // indexCount?
|
|
239
|
+
// indexType,
|
|
240
|
+
// firstVertex,
|
|
241
|
+
// instanceCount || 0
|
|
242
|
+
// );
|
|
243
|
+
// // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
244
|
+
// // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
|
|
245
|
+
// } else if (isIndexed) {
|
|
246
|
+
// this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
|
|
247
|
+
// } else if (isInstanced) {
|
|
248
|
+
// this.device.gl2?.drawArraysInstanced(
|
|
249
|
+
// drawMode,
|
|
250
|
+
// firstVertex,
|
|
251
|
+
// vertexCount || 0,
|
|
252
|
+
// instanceCount || 0
|
|
253
|
+
// );
|
|
254
|
+
// } else {
|
|
255
|
+
// this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
|
|
256
|
+
// }
|
|
257
|
+
// });
|
|
258
|
+
|
|
259
|
+
withDeviceAndGLParameters(
|
|
260
|
+
this.device,
|
|
261
|
+
this.props.parameters,
|
|
262
|
+
webglRenderPass.glParameters,
|
|
263
|
+
() => {
|
|
213
264
|
if (isIndexed && isInstanced) {
|
|
214
265
|
// ANGLE_instanced_arrays extension
|
|
215
|
-
this.device.gl2
|
|
216
|
-
|
|
217
|
-
vertexCount,
|
|
218
|
-
|
|
266
|
+
this.device.gl2?.drawElementsInstanced(
|
|
267
|
+
glDrawMode,
|
|
268
|
+
vertexCount || 0, // indexCount?
|
|
269
|
+
glIndexType,
|
|
219
270
|
firstVertex,
|
|
220
|
-
instanceCount
|
|
271
|
+
instanceCount || 0
|
|
221
272
|
);
|
|
222
273
|
// } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
223
|
-
// this.device.gl2.drawRangeElements(
|
|
274
|
+
// this.device.gl2.drawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);
|
|
224
275
|
} else if (isIndexed) {
|
|
225
|
-
this.device.gl.drawElements(
|
|
276
|
+
this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?
|
|
226
277
|
} else if (isInstanced) {
|
|
227
|
-
this.device.gl2
|
|
278
|
+
this.device.gl2?.drawArraysInstanced(
|
|
279
|
+
glDrawMode,
|
|
280
|
+
firstVertex,
|
|
281
|
+
vertexCount || 0,
|
|
282
|
+
instanceCount || 0
|
|
283
|
+
);
|
|
228
284
|
} else {
|
|
229
|
-
this.device.gl.drawArrays(
|
|
285
|
+
this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);
|
|
230
286
|
}
|
|
231
|
-
});
|
|
232
287
|
|
|
233
|
-
|
|
234
|
-
|
|
288
|
+
if (transformFeedback) {
|
|
289
|
+
transformFeedback.end();
|
|
290
|
+
}
|
|
235
291
|
}
|
|
236
|
-
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
vertexArray.unbindAfterRender(renderPass);
|
|
237
295
|
|
|
238
296
|
return true;
|
|
239
297
|
}
|
|
@@ -251,17 +309,19 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
251
309
|
|
|
252
310
|
// Avoid checking program linking error in production
|
|
253
311
|
// @ts-expect-error
|
|
254
|
-
if (gl.debug
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
|
|
258
|
-
}
|
|
312
|
+
if (!gl.debug && log.level === 0) {
|
|
313
|
+
// return;
|
|
314
|
+
}
|
|
259
315
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
316
|
+
const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
|
|
317
|
+
if (!linked) {
|
|
318
|
+
throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
gl.validateProgram(this.handle);
|
|
322
|
+
const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
|
|
323
|
+
if (!validated) {
|
|
324
|
+
throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
|
|
265
325
|
}
|
|
266
326
|
}
|
|
267
327
|
|
|
@@ -275,14 +335,16 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
275
335
|
_areTexturesRenderable() {
|
|
276
336
|
let texturesRenderable = true;
|
|
277
337
|
|
|
278
|
-
for (const [
|
|
338
|
+
for (const [, texture] of Object.entries(this._textureUniforms)) {
|
|
279
339
|
texture.update();
|
|
280
340
|
texturesRenderable = texturesRenderable && texture.loaded;
|
|
281
341
|
}
|
|
282
342
|
|
|
283
|
-
for (const [
|
|
343
|
+
for (const [, texture] of Object.entries(this.bindings)) {
|
|
284
344
|
// texture.update();
|
|
345
|
+
// @ts-expect-error
|
|
285
346
|
if (texture.loaded !== undefined) {
|
|
347
|
+
// @ts-expect-error
|
|
286
348
|
texturesRenderable = texturesRenderable && texture.loaded;
|
|
287
349
|
}
|
|
288
350
|
}
|
|
@@ -290,15 +352,40 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
290
352
|
return texturesRenderable;
|
|
291
353
|
}
|
|
292
354
|
|
|
293
|
-
/**
|
|
355
|
+
/**
|
|
356
|
+
* Constant attributes need to be reset before every draw call
|
|
357
|
+
* Any attribute that is disabled in the current vertex array object
|
|
358
|
+
* is read from the context's global constant value for that attribute location.
|
|
359
|
+
* @note Constant attributes are only supported in WebGL, not in WebGPU
|
|
360
|
+
*
|
|
361
|
+
_applyConstantAttributes(vertexArray: WEBGLVertexArray): void {
|
|
362
|
+
const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);
|
|
363
|
+
for (const [name, value] of Object.entries(this.)) {
|
|
364
|
+
const attributeInfo = attributeInfos[name];
|
|
365
|
+
if (!attributeInfo) {
|
|
366
|
+
log.warn(
|
|
367
|
+
`Ignoring constant value supplied for unknown attribute "${name}" in pipeline "${this.id}"`
|
|
368
|
+
)();
|
|
369
|
+
continue; // eslint-disable-line no-continue
|
|
370
|
+
}
|
|
371
|
+
vertexArray.setConstant(attributeInfo.location, value);
|
|
372
|
+
vertexArray.enable(attributeInfo.location, false);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
*/
|
|
376
|
+
|
|
377
|
+
/** Apply any bindings (before each draw call) */
|
|
294
378
|
_applyBindings() {
|
|
295
379
|
this.device.gl.useProgram(this.handle);
|
|
296
380
|
|
|
297
381
|
const {gl2} = this.device;
|
|
382
|
+
if (!gl2) {
|
|
383
|
+
throw new Error('bindings');
|
|
384
|
+
}
|
|
298
385
|
|
|
299
386
|
let textureUnit = 0;
|
|
300
387
|
let uniformBufferIndex = 0;
|
|
301
|
-
for (const binding of this.
|
|
388
|
+
for (const binding of this.shaderLayout.bindings) {
|
|
302
389
|
const value = this.bindings[binding.name];
|
|
303
390
|
if (!value) {
|
|
304
391
|
throw new Error(`No value for binding ${binding.name} in ${this.id}`);
|
|
@@ -319,8 +406,11 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
319
406
|
gl2.bindBufferRange(
|
|
320
407
|
GL.UNIFORM_BUFFER,
|
|
321
408
|
uniformBufferIndex,
|
|
409
|
+
// @ts-expect-error
|
|
322
410
|
value.buffer.handle,
|
|
411
|
+
// @ts-expect-error
|
|
323
412
|
value.offset || 0,
|
|
413
|
+
// @ts-expect-error
|
|
324
414
|
value.size || value.buffer.byteLength - value.offset
|
|
325
415
|
);
|
|
326
416
|
}
|
|
@@ -328,10 +418,24 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
328
418
|
break;
|
|
329
419
|
|
|
330
420
|
case 'texture':
|
|
331
|
-
if (!(value instanceof WEBGLTexture)) {
|
|
421
|
+
if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
|
|
332
422
|
throw new Error('texture');
|
|
333
423
|
}
|
|
334
|
-
|
|
424
|
+
let texture: WEBGLTexture;
|
|
425
|
+
if (value instanceof WEBGLTexture) {
|
|
426
|
+
texture = value;
|
|
427
|
+
} else if (
|
|
428
|
+
value instanceof WEBGLFramebuffer &&
|
|
429
|
+
value.colorAttachments[0] instanceof WEBGLTexture
|
|
430
|
+
) {
|
|
431
|
+
log.warn(
|
|
432
|
+
'Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead'
|
|
433
|
+
)();
|
|
434
|
+
texture = value.colorAttachments[0];
|
|
435
|
+
} else {
|
|
436
|
+
throw new Error('No texture');
|
|
437
|
+
}
|
|
438
|
+
|
|
335
439
|
gl2.activeTexture(GL.TEXTURE0 + textureUnit);
|
|
336
440
|
gl2.bindTexture(texture.target, texture.handle);
|
|
337
441
|
// gl2.bindSampler(textureUnit, sampler.handle);
|
|
@@ -349,10 +453,14 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
349
453
|
}
|
|
350
454
|
}
|
|
351
455
|
|
|
456
|
+
/**
|
|
457
|
+
* Due to program sharing, uniforms need to be reset before every draw call
|
|
458
|
+
* (though caching will avoid redundant WebGL calls)
|
|
459
|
+
*/
|
|
352
460
|
_applyUniforms() {
|
|
353
|
-
for (const uniformLayout of this.
|
|
461
|
+
for (const uniformLayout of this.shaderLayout.uniforms || []) {
|
|
354
462
|
const {name, location, type, textureUnit} = uniformLayout;
|
|
355
|
-
const value = this.uniforms[name]
|
|
463
|
+
const value = this.uniforms[name] ?? textureUnit;
|
|
356
464
|
if (value !== undefined) {
|
|
357
465
|
setUniform(this.device.gl, location, type, value);
|
|
358
466
|
}
|
|
@@ -360,18 +468,27 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
360
468
|
}
|
|
361
469
|
}
|
|
362
470
|
|
|
363
|
-
/** Get the primitive type for
|
|
364
|
-
function
|
|
471
|
+
/** Get the primitive type for draw */
|
|
472
|
+
function getGLDrawMode(
|
|
365
473
|
topology: PrimitiveTopology
|
|
366
|
-
):
|
|
474
|
+
):
|
|
475
|
+
| GL.POINTS
|
|
476
|
+
| GL.LINES
|
|
477
|
+
| GL.LINE_STRIP
|
|
478
|
+
| GL.LINE_LOOP
|
|
479
|
+
| GL.TRIANGLES
|
|
480
|
+
| GL.TRIANGLE_STRIP
|
|
481
|
+
| GL.TRIANGLE_FAN {
|
|
367
482
|
// prettier-ignore
|
|
368
483
|
switch (topology) {
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
484
|
+
case 'point-list': return GL.POINTS;
|
|
485
|
+
case 'line-list': return GL.LINES;
|
|
486
|
+
case 'line-strip': return GL.LINE_STRIP;
|
|
487
|
+
case 'line-loop-webgl': return GL.LINE_LOOP;
|
|
488
|
+
case 'triangle-list': return GL.TRIANGLES;
|
|
489
|
+
case 'triangle-strip': return GL.TRIANGLE_STRIP;
|
|
490
|
+
case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;
|
|
491
|
+
default: throw new Error(topology);
|
|
375
492
|
}
|
|
376
493
|
}
|
|
377
494
|
|
|
@@ -379,35 +496,13 @@ function getDrawMode(
|
|
|
379
496
|
function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {
|
|
380
497
|
// prettier-ignore
|
|
381
498
|
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}`);
|
|
499
|
+
case 'point-list': return GL.POINTS;
|
|
500
|
+
case 'line-list': return GL.LINES;
|
|
501
|
+
case 'line-strip': return GL.LINES;
|
|
502
|
+
case 'line-loop-webgl': return GL.LINES;
|
|
503
|
+
case 'triangle-list': return GL.TRIANGLES;
|
|
504
|
+
case 'triangle-strip': return GL.TRIANGLES;
|
|
505
|
+
case 'triangle-fan-webgl': return GL.TRIANGLES;
|
|
506
|
+
default: throw new Error(topology);
|
|
411
507
|
}
|
|
412
|
-
return binding;
|
|
413
508
|
}
|
|
@@ -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.
|