@luma.gl/webgl 9.0.0-alpha.5 → 9.0.0-alpha.50
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 +101 -73
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +6 -6
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +74 -111
- 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 +309 -346
- 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 +17 -23
- 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 +31 -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-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 +87 -143
- 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 -11
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +60 -88
- 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 -24
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +63 -173
- 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 +99 -11
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +55 -21
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +108 -270
- 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 +11 -21
- 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 +21 -34
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +62 -42
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +137 -256
- 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 +10 -23
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +76 -41
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +219 -129
- 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 +191 -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 +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 +15 -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 +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 +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 +18 -41
- 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 +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 +8555 -0
- package/dist/index.cjs +6602 -0
- package/dist/index.d.ts +26 -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 +49 -0
- package/package.json +21 -9
- package/src/adapter/converters/device-parameters.ts +144 -41
- package/src/adapter/converters/sampler-parameters.ts +103 -41
- package/src/adapter/converters/shader-formats.ts +44 -0
- package/src/adapter/converters/texture-formats.ts +268 -195
- package/src/adapter/converters/vertex-formats.ts +71 -10
- package/src/adapter/device-helpers/device-features.ts +14 -3
- package/src/adapter/device-helpers/device-limits.ts +5 -3
- package/src/adapter/device-helpers/get-device-info.ts +53 -18
- 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 +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 +67 -62
- 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 +90 -134
- package/src/adapter/resources/webgl-render-pass.ts +166 -4
- package/src/adapter/resources/webgl-render-pipeline.ts +256 -192
- package/src/adapter/resources/webgl-sampler.ts +16 -10
- package/src/adapter/resources/webgl-shader.ts +14 -11
- package/src/adapter/resources/webgl-texture.ts +138 -99
- 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 +16 -14
- package/src/adapter/webgl-device.ts +328 -79
- package/src/classic/accessor.ts +8 -18
- package/src/classic/clear.ts +113 -0
- package/src/classic/copy-and-blit.ts +311 -0
- package/src/classic/format-utils.ts +46 -0
- package/src/classic/typed-array-utils.ts +21 -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 +14 -11
- package/src/context/state-tracker/with-parameters.ts +13 -4
- package/src/index.ts +70 -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 +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 -384
- 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 -833
- 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 -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/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 -284
|
@@ -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} 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
|
+
|
|
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';
|
|
24
|
+
import {WEBGLTransformFeedback} from './webgl-transform-feedback';
|
|
25
|
+
import {getGLDrawMode} from '../helpers/webgl-topology-utils';
|
|
25
26
|
|
|
26
27
|
const LOG_PROGRAM_PERF_PRIORITY = 4;
|
|
27
28
|
|
|
28
29
|
/** Creates a new render pipeline */
|
|
29
|
-
export
|
|
30
|
+
export class WEBGLRenderPipeline extends RenderPipeline {
|
|
31
|
+
/** The WebGL device that created this render pipeline */
|
|
30
32
|
device: WebGLDevice;
|
|
33
|
+
/** Handle to underlying WebGL program */
|
|
31
34
|
handle: WebGLProgram;
|
|
35
|
+
/** vertex shader */
|
|
32
36
|
vs: WEBGLShader;
|
|
37
|
+
/** fragment shader */
|
|
33
38
|
fs: WEBGLShader;
|
|
34
|
-
layout
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
_textureIndexCounter: number = 0;
|
|
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 */
|
|
47
|
+
varyings: string[] | null = null;
|
|
48
|
+
|
|
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,89 @@ 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
|
-
}
|
|
88
|
-
|
|
89
|
-
/** @todo needed for portable model */
|
|
90
|
-
setAttributes(attributes: Record<string, Buffer>): void {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
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
|
+
// }
|
|
113
123
|
|
|
114
|
-
/**
|
|
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
|
-
|
|
134
|
+
// Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block
|
|
135
|
+
// This convention allows shaders to name uniform blocks as `uniform appUniforms {} app;`
|
|
136
|
+
// and reference them as `app` from both GLSL and JS.
|
|
137
|
+
// TODO - this is rather hacky - we could also remap the name directly in the shader layout.
|
|
138
|
+
const binding =
|
|
139
|
+
this.shaderLayout.bindings.find(binding => binding.name === name) ||
|
|
140
|
+
this.shaderLayout.bindings.find(binding => binding.name === `${name}Uniforms`);
|
|
141
|
+
|
|
122
142
|
if (!binding) {
|
|
123
|
-
|
|
143
|
+
const validBindings = this.shaderLayout.bindings
|
|
144
|
+
.map(binding => `"${binding.name}"`)
|
|
145
|
+
.join(', ');
|
|
146
|
+
log.warn(
|
|
147
|
+
`Unknown binding "${name}" in render pipeline "${this.id}", expected one of ${validBindings}`
|
|
148
|
+
)();
|
|
149
|
+
continue; // eslint-disable-line no-continue
|
|
124
150
|
}
|
|
125
151
|
if (!value) {
|
|
126
|
-
log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();
|
|
152
|
+
log.warn(`Unsetting binding "${name}" in render pipeline "${this.id}"`)();
|
|
127
153
|
}
|
|
128
154
|
switch (binding.type) {
|
|
129
155
|
case 'uniform':
|
|
@@ -133,7 +159,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
133
159
|
}
|
|
134
160
|
break;
|
|
135
161
|
case 'texture':
|
|
136
|
-
if (!(value instanceof WEBGLTexture)) {
|
|
162
|
+
if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
|
|
137
163
|
throw new Error('texture value');
|
|
138
164
|
}
|
|
139
165
|
break;
|
|
@@ -148,7 +174,13 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
148
174
|
}
|
|
149
175
|
}
|
|
150
176
|
|
|
151
|
-
setUniforms(uniforms: Record<string,
|
|
177
|
+
setUniforms(uniforms: Record<string, UniformValue>) {
|
|
178
|
+
const {bindings} = splitUniformsAndBindings(uniforms);
|
|
179
|
+
Object.keys(bindings).forEach(name => {
|
|
180
|
+
log.warn(
|
|
181
|
+
`Unsupported value "${JSON.stringify(bindings[name])}" used in setUniforms() for key ${name}. Use setBindings() instead?`
|
|
182
|
+
)();
|
|
183
|
+
});
|
|
152
184
|
// TODO - check against layout
|
|
153
185
|
Object.assign(this.uniforms, uniforms);
|
|
154
186
|
}
|
|
@@ -158,7 +190,9 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
158
190
|
* This function unifies those ways into a single call using common parameters with sane defaults
|
|
159
191
|
*/
|
|
160
192
|
draw(options: {
|
|
161
|
-
renderPass
|
|
193
|
+
renderPass: RenderPass;
|
|
194
|
+
/** vertex attributes */
|
|
195
|
+
vertexArray: VertexArray;
|
|
162
196
|
vertexCount?: number;
|
|
163
197
|
indexCount?: number;
|
|
164
198
|
instanceCount?: number;
|
|
@@ -166,74 +200,111 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
166
200
|
firstIndex?: number;
|
|
167
201
|
firstInstance?: number;
|
|
168
202
|
baseVertex?: number;
|
|
203
|
+
transformFeedback?: WEBGLTransformFeedback;
|
|
169
204
|
}): boolean {
|
|
170
205
|
const {
|
|
171
|
-
renderPass
|
|
206
|
+
renderPass,
|
|
207
|
+
vertexArray,
|
|
172
208
|
vertexCount,
|
|
173
|
-
indexCount,
|
|
209
|
+
// indexCount,
|
|
174
210
|
instanceCount,
|
|
175
211
|
firstVertex = 0,
|
|
176
|
-
firstIndex,
|
|
177
|
-
firstInstance,
|
|
178
|
-
baseVertex
|
|
212
|
+
// firstIndex,
|
|
213
|
+
// firstInstance,
|
|
214
|
+
// baseVertex,
|
|
215
|
+
transformFeedback
|
|
179
216
|
} = options;
|
|
180
217
|
|
|
181
|
-
const
|
|
182
|
-
const isIndexed: boolean = Boolean(
|
|
183
|
-
const
|
|
184
|
-
const isInstanced: boolean =
|
|
218
|
+
const glDrawMode = getGLDrawMode(this.props.topology);
|
|
219
|
+
const isIndexed: boolean = Boolean(vertexArray.indexBuffer);
|
|
220
|
+
const glIndexType = (vertexArray.indexBuffer as WEBGLBuffer)?.glIndexType;
|
|
221
|
+
const isInstanced: boolean = Number(instanceCount) > 0;
|
|
185
222
|
|
|
186
223
|
// Avoid WebGL draw call when not rendering any data or values are incomplete
|
|
187
224
|
// Note: async textures set as uniforms might still be loading.
|
|
188
225
|
// Now that all uniforms have been updated, check if any texture
|
|
189
226
|
// in the uniforms is not yet initialized, then we don't draw
|
|
190
|
-
if (!this._areTexturesRenderable() ||
|
|
227
|
+
if (!this._areTexturesRenderable() || vertexCount === 0) {
|
|
191
228
|
// (isInstanced && instanceCount === 0)
|
|
192
229
|
return false;
|
|
193
230
|
}
|
|
194
231
|
|
|
195
232
|
this.device.gl.useProgram(this.handle);
|
|
196
233
|
|
|
197
|
-
|
|
198
|
-
|
|
234
|
+
// Note: Rebinds constant attributes before each draw call
|
|
235
|
+
vertexArray.bindBeforeRender(renderPass);
|
|
199
236
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
transformFeedback.begin(primitiveMode);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// We have to apply bindings before every draw call since other draw calls will overwrite
|
|
207
|
-
this._applyBindings();
|
|
208
|
-
this._applyUniforms();
|
|
237
|
+
if (transformFeedback) {
|
|
238
|
+
transformFeedback.begin(this.props.topology);
|
|
239
|
+
}
|
|
209
240
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
241
|
+
// We have to apply bindings before every draw call since other draw calls will overwrite
|
|
242
|
+
this._applyBindings();
|
|
243
|
+
this._applyUniforms();
|
|
244
|
+
|
|
245
|
+
const webglRenderPass = renderPass as WEBGLRenderPass;
|
|
246
|
+
// // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
|
|
247
|
+
// if (isIndexed && isInstanced) {
|
|
248
|
+
// // ANGLE_instanced_arrays extension
|
|
249
|
+
// this.device.gl2?.drawElementsInstanced(
|
|
250
|
+
// drawMode,
|
|
251
|
+
// vertexCount || 0, // indexCount?
|
|
252
|
+
// indexType,
|
|
253
|
+
// firstVertex,
|
|
254
|
+
// instanceCount || 0
|
|
255
|
+
// );
|
|
256
|
+
// // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
257
|
+
// // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
|
|
258
|
+
// } else if (isIndexed) {
|
|
259
|
+
// this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
|
|
260
|
+
// } else if (isInstanced) {
|
|
261
|
+
// this.device.gl2?.drawArraysInstanced(
|
|
262
|
+
// drawMode,
|
|
263
|
+
// firstVertex,
|
|
264
|
+
// vertexCount || 0,
|
|
265
|
+
// instanceCount || 0
|
|
266
|
+
// );
|
|
267
|
+
// } else {
|
|
268
|
+
// this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
|
|
269
|
+
// }
|
|
270
|
+
// });
|
|
271
|
+
|
|
272
|
+
withDeviceAndGLParameters(
|
|
273
|
+
this.device,
|
|
274
|
+
this.props.parameters,
|
|
275
|
+
webglRenderPass.glParameters,
|
|
276
|
+
() => {
|
|
213
277
|
if (isIndexed && isInstanced) {
|
|
214
278
|
// ANGLE_instanced_arrays extension
|
|
215
|
-
this.device.gl2
|
|
216
|
-
|
|
217
|
-
vertexCount,
|
|
218
|
-
|
|
279
|
+
this.device.gl2?.drawElementsInstanced(
|
|
280
|
+
glDrawMode,
|
|
281
|
+
vertexCount || 0, // indexCount?
|
|
282
|
+
glIndexType,
|
|
219
283
|
firstVertex,
|
|
220
|
-
instanceCount
|
|
284
|
+
instanceCount || 0
|
|
221
285
|
);
|
|
222
286
|
// } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
223
|
-
// this.device.gl2.drawRangeElements(
|
|
287
|
+
// this.device.gl2.drawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);
|
|
224
288
|
} else if (isIndexed) {
|
|
225
|
-
this.device.gl.drawElements(
|
|
289
|
+
this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?
|
|
226
290
|
} else if (isInstanced) {
|
|
227
|
-
this.device.gl2
|
|
291
|
+
this.device.gl2?.drawArraysInstanced(
|
|
292
|
+
glDrawMode,
|
|
293
|
+
firstVertex,
|
|
294
|
+
vertexCount || 0,
|
|
295
|
+
instanceCount || 0
|
|
296
|
+
);
|
|
228
297
|
} else {
|
|
229
|
-
this.device.gl.drawArrays(
|
|
298
|
+
this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);
|
|
230
299
|
}
|
|
231
|
-
});
|
|
232
300
|
|
|
233
|
-
|
|
234
|
-
|
|
301
|
+
if (transformFeedback) {
|
|
302
|
+
transformFeedback.end();
|
|
303
|
+
}
|
|
235
304
|
}
|
|
236
|
-
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
vertexArray.unbindAfterRender(renderPass);
|
|
237
308
|
|
|
238
309
|
return true;
|
|
239
310
|
}
|
|
@@ -251,17 +322,19 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
251
322
|
|
|
252
323
|
// Avoid checking program linking error in production
|
|
253
324
|
// @ts-expect-error
|
|
254
|
-
if (gl.debug
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
|
|
258
|
-
}
|
|
325
|
+
if (!gl.debug && log.level === 0) {
|
|
326
|
+
// return;
|
|
327
|
+
}
|
|
259
328
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
329
|
+
const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
|
|
330
|
+
if (!linked) {
|
|
331
|
+
throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
gl.validateProgram(this.handle);
|
|
335
|
+
const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
|
|
336
|
+
if (!validated) {
|
|
337
|
+
throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
|
|
265
338
|
}
|
|
266
339
|
}
|
|
267
340
|
|
|
@@ -275,14 +348,9 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
275
348
|
_areTexturesRenderable() {
|
|
276
349
|
let texturesRenderable = true;
|
|
277
350
|
|
|
278
|
-
for (const [
|
|
279
|
-
texture
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
for (const [name, texture] of Object.entries(this.bindings)) {
|
|
284
|
-
// texture.update();
|
|
285
|
-
if (texture.loaded !== undefined) {
|
|
351
|
+
for (const [, texture] of Object.entries(this.bindings)) {
|
|
352
|
+
if (texture instanceof WEBGLTexture) {
|
|
353
|
+
texture.update();
|
|
286
354
|
texturesRenderable = texturesRenderable && texture.loaded;
|
|
287
355
|
}
|
|
288
356
|
}
|
|
@@ -290,16 +358,43 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
290
358
|
return texturesRenderable;
|
|
291
359
|
}
|
|
292
360
|
|
|
293
|
-
/**
|
|
361
|
+
/**
|
|
362
|
+
* Constant attributes need to be reset before every draw call
|
|
363
|
+
* Any attribute that is disabled in the current vertex array object
|
|
364
|
+
* is read from the context's global constant value for that attribute location.
|
|
365
|
+
* @note Constant attributes are only supported in WebGL, not in WebGPU
|
|
366
|
+
*
|
|
367
|
+
_applyConstantAttributes(vertexArray: WEBGLVertexArray): void {
|
|
368
|
+
const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);
|
|
369
|
+
for (const [name, value] of Object.entries(this.)) {
|
|
370
|
+
const attributeInfo = attributeInfos[name];
|
|
371
|
+
if (!attributeInfo) {
|
|
372
|
+
log.warn(
|
|
373
|
+
`Ignoring constant value supplied for unknown attribute "${name}" in pipeline "${this.id}"`
|
|
374
|
+
)();
|
|
375
|
+
continue; // eslint-disable-line no-continue
|
|
376
|
+
}
|
|
377
|
+
vertexArray.setConstant(attributeInfo.location, value);
|
|
378
|
+
vertexArray.enable(attributeInfo.location, false);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
*/
|
|
382
|
+
|
|
383
|
+
/** Apply any bindings (before each draw call) */
|
|
294
384
|
_applyBindings() {
|
|
295
385
|
this.device.gl.useProgram(this.handle);
|
|
296
386
|
|
|
297
387
|
const {gl2} = this.device;
|
|
388
|
+
if (!gl2) {
|
|
389
|
+
throw new Error('bindings');
|
|
390
|
+
}
|
|
298
391
|
|
|
299
392
|
let textureUnit = 0;
|
|
300
393
|
let uniformBufferIndex = 0;
|
|
301
|
-
for (const binding of this.
|
|
302
|
-
|
|
394
|
+
for (const binding of this.shaderLayout.bindings) {
|
|
395
|
+
// Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block
|
|
396
|
+
const value =
|
|
397
|
+
this.bindings[binding.name] || this.bindings[binding.name.replace(/Uniforms$/, '')];
|
|
303
398
|
if (!value) {
|
|
304
399
|
throw new Error(`No value for binding ${binding.name} in ${this.id}`);
|
|
305
400
|
}
|
|
@@ -308,7 +403,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
308
403
|
// Set buffer
|
|
309
404
|
const {name} = binding;
|
|
310
405
|
const location = gl2.getUniformBlockIndex(this.handle, name);
|
|
311
|
-
if (location === GL.INVALID_INDEX) {
|
|
406
|
+
if (location as GL === GL.INVALID_INDEX) {
|
|
312
407
|
throw new Error(`Invalid uniform block name ${name}`);
|
|
313
408
|
}
|
|
314
409
|
gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);
|
|
@@ -319,8 +414,11 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
319
414
|
gl2.bindBufferRange(
|
|
320
415
|
GL.UNIFORM_BUFFER,
|
|
321
416
|
uniformBufferIndex,
|
|
417
|
+
// @ts-expect-error
|
|
322
418
|
value.buffer.handle,
|
|
419
|
+
// @ts-expect-error
|
|
323
420
|
value.offset || 0,
|
|
421
|
+
// @ts-expect-error
|
|
324
422
|
value.size || value.buffer.byteLength - value.offset
|
|
325
423
|
);
|
|
326
424
|
}
|
|
@@ -328,10 +426,24 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
328
426
|
break;
|
|
329
427
|
|
|
330
428
|
case 'texture':
|
|
331
|
-
if (!(value instanceof WEBGLTexture)) {
|
|
429
|
+
if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
|
|
332
430
|
throw new Error('texture');
|
|
333
431
|
}
|
|
334
|
-
|
|
432
|
+
let texture: WEBGLTexture;
|
|
433
|
+
if (value instanceof WEBGLTexture) {
|
|
434
|
+
texture = value;
|
|
435
|
+
} else if (
|
|
436
|
+
value instanceof WEBGLFramebuffer &&
|
|
437
|
+
value.colorAttachments[0] instanceof WEBGLTexture
|
|
438
|
+
) {
|
|
439
|
+
log.warn(
|
|
440
|
+
'Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead'
|
|
441
|
+
)();
|
|
442
|
+
texture = value.colorAttachments[0];
|
|
443
|
+
} else {
|
|
444
|
+
throw new Error('No texture');
|
|
445
|
+
}
|
|
446
|
+
|
|
335
447
|
gl2.activeTexture(GL.TEXTURE0 + textureUnit);
|
|
336
448
|
gl2.bindTexture(texture.target, texture.handle);
|
|
337
449
|
// gl2.bindSampler(textureUnit, sampler.handle);
|
|
@@ -349,65 +461,17 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
349
461
|
}
|
|
350
462
|
}
|
|
351
463
|
|
|
464
|
+
/**
|
|
465
|
+
* Due to program sharing, uniforms need to be reset before every draw call
|
|
466
|
+
* (though caching will avoid redundant WebGL calls)
|
|
467
|
+
*/
|
|
352
468
|
_applyUniforms() {
|
|
353
|
-
for (const uniformLayout of this.
|
|
469
|
+
for (const uniformLayout of this.shaderLayout.uniforms || []) {
|
|
354
470
|
const {name, location, type, textureUnit} = uniformLayout;
|
|
355
|
-
const value = this.uniforms[name]
|
|
471
|
+
const value = this.uniforms[name] ?? textureUnit;
|
|
356
472
|
if (value !== undefined) {
|
|
357
473
|
setUniform(this.device.gl, location, type, value);
|
|
358
474
|
}
|
|
359
475
|
}
|
|
360
476
|
}
|
|
361
477
|
}
|
|
362
|
-
|
|
363
|
-
/** Get the primitive type for transform feedback */
|
|
364
|
-
function getDrawMode(
|
|
365
|
-
topology: PrimitiveTopology
|
|
366
|
-
): GL.POINTS | GL.LINES | GL.LINE_STRIP | GL.TRIANGLES | GL.TRIANGLE_STRIP {
|
|
367
|
-
// prettier-ignore
|
|
368
|
-
switch (topology) {
|
|
369
|
-
case 'point-list': return GL.POINTS;
|
|
370
|
-
case 'line-list': return GL.LINES;
|
|
371
|
-
case 'line-strip': return GL.LINE_STRIP;
|
|
372
|
-
case 'triangle-list': return GL.TRIANGLES;
|
|
373
|
-
case 'triangle-strip': return GL.TRIANGLE_STRIP;
|
|
374
|
-
default: throw new Error(topology);
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
/** Get the primitive type for transform feedback */
|
|
379
|
-
function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {
|
|
380
|
-
// prettier-ignore
|
|
381
|
-
switch (topology) {
|
|
382
|
-
case 'point-list': return GL.POINTS;
|
|
383
|
-
case 'line-list': return GL.LINES;
|
|
384
|
-
case 'line-strip': return GL.LINES;
|
|
385
|
-
case 'triangle-list': return GL.TRIANGLES;
|
|
386
|
-
case 'triangle-strip': return GL.TRIANGLES;
|
|
387
|
-
default: throw new Error(topology);
|
|
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}`);
|
|
411
|
-
}
|
|
412
|
-
return binding;
|
|
413
|
-
}
|