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