@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.31
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 +2 -1
- package/dist/adapter/converters/device-parameters.d.ts +14 -4
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +28 -46
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +5 -5
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +20 -56
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/shader-formats.d.ts +9 -0
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
- package/dist/adapter/converters/shader-formats.js +53 -0
- package/dist/adapter/converters/shader-formats.js.map +1 -0
- package/dist/adapter/converters/texture-formats.d.ts +32 -44
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +165 -201
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.d.ts +9 -3
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +48 -16
- 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 +13 -20
- package/dist/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
- package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +2 -5
- package/dist/adapter/device-helpers/device-limits.js.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +9 -11
- package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/adapter/device-helpers/is-old-ie.js +2 -1
- package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
- package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
- package/dist/adapter/helpers/{uniforms.js → decode-webgl-types.js} +20 -29
- package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
- package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
- package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
- package/dist/adapter/helpers/get-shader-info.js +25 -0
- package/dist/adapter/helpers/get-shader-info.js.map +1 -0
- package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +58 -113
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts +2 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +3 -33
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.d.ts +11 -0
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
- package/dist/adapter/helpers/{attribute-utils.js → webgl-topology-utils.js} +2 -19
- package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
- package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +1 -28
- 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 +35 -41
- package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/adapter/objects/webgl-resource.d.ts +6 -9
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +19 -75
- package/dist/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +39 -11
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js +122 -32
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +43 -71
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +169 -41
- 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 +9 -18
- 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 +41 -149
- 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 +88 -9
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +52 -14
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +119 -182
- 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 +7 -15
- 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 +9 -22
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +64 -44
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +98 -213
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- 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 +8 -20
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +64 -41
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +133 -113
- 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 +14 -38
- package/dist/classic/accessor.js.map +1 -1
- package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -28
- package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
- package/dist/classic/{buffer.js → buffer-with-accessor.js} +54 -122
- package/dist/classic/buffer-with-accessor.js.map +1 -0
- package/dist/classic/clear.d.ts +22 -0
- package/dist/classic/clear.d.ts.map +1 -0
- package/dist/classic/clear.js +88 -0
- package/dist/classic/clear.js.map +1 -0
- package/dist/classic/copy-and-blit.d.ts +62 -0
- package/dist/classic/copy-and-blit.d.ts.map +1 -0
- package/dist/classic/copy-and-blit.js +202 -0
- package/dist/classic/copy-and-blit.js.map +1 -0
- package/dist/classic/format-utils.d.ts +3 -0
- package/dist/classic/format-utils.d.ts.map +1 -0
- package/dist/classic/format-utils.js +38 -0
- package/dist/classic/format-utils.js.map +1 -0
- package/dist/classic/typed-array-utils.d.ts +15 -17
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +1 -21
- package/dist/classic/typed-array-utils.js.map +1 -1
- package/dist/context/context/create-browser-context.d.ts +40 -0
- package/dist/context/context/create-browser-context.d.ts.map +1 -0
- package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +23 -19
- 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.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 +11 -34
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +8 -7
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +8 -18
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +18 -36
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/context/polyfill/context-data.d.ts +13 -0
- package/dist/context/polyfill/context-data.d.ts.map +1 -0
- package/dist/context/polyfill/context-data.js +12 -0
- package/dist/context/polyfill/context-data.js.map +1 -0
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.js +4 -9
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +21 -29
- package/dist/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/context/polyfill/polyfill-table.d.ts +8 -8
- package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-table.js +10 -32
- package/dist/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.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 +16 -51
- 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 +7 -9
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/dist.dev.js +10245 -0
- package/dist/index.cjs +6550 -0
- package/dist/index.d.ts +25 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -26
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist.min.js +37 -0
- package/package.json +21 -9
- package/src/adapter/converters/device-parameters.ts +88 -35
- package/src/adapter/converters/sampler-parameters.ts +19 -9
- package/src/adapter/converters/shader-formats.ts +41 -0
- package/src/adapter/converters/texture-formats.ts +264 -194
- package/src/adapter/converters/vertex-formats.ts +68 -10
- package/src/adapter/device-helpers/device-features.ts +10 -3
- package/src/adapter/device-helpers/device-limits.ts +3 -3
- package/src/adapter/device-helpers/get-device-info.ts +14 -10
- package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +36 -21
- package/src/adapter/helpers/get-shader-info.ts +40 -0
- package/src/adapter/helpers/get-shader-layout.ts +120 -146
- package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
- package/src/adapter/helpers/set-uniform.ts +7 -6
- package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +4 -5
- package/src/adapter/objects/constants-to-keys.ts +3 -25
- package/src/adapter/objects/webgl-renderbuffer.ts +40 -37
- package/src/adapter/objects/webgl-resource.ts +14 -23
- package/src/adapter/objects/webgl-vertex-array-object.ts +202 -37
- package/src/adapter/resources/webgl-buffer.ts +56 -58
- package/src/adapter/resources/webgl-command-buffer.ts +332 -25
- package/src/adapter/resources/webgl-command-encoder.ts +17 -12
- package/src/adapter/resources/webgl-external-texture.ts +2 -2
- package/src/adapter/resources/webgl-framebuffer.ts +88 -133
- package/src/adapter/resources/webgl-render-pass.ts +155 -4
- package/src/adapter/resources/webgl-render-pipeline.ts +232 -131
- package/src/adapter/resources/webgl-sampler.ts +13 -8
- package/src/adapter/resources/webgl-shader.ts +11 -10
- package/src/adapter/resources/webgl-texture.ts +113 -85
- package/src/adapter/webgl-canvas-context.ts +14 -14
- package/src/adapter/webgl-device.ts +192 -77
- package/src/classic/accessor.ts +4 -17
- package/src/classic/{buffer.ts → buffer-with-accessor.ts} +67 -75
- package/src/classic/clear.ts +110 -0
- package/src/classic/copy-and-blit.ts +308 -0
- package/src/classic/format-utils.ts +43 -0
- package/src/classic/typed-array-utils.ts +18 -27
- package/src/context/context/{create-context.ts → create-browser-context.ts} +48 -31
- package/src/context/context/create-headless-context.ts +48 -0
- package/src/context/context/webgl-checks.ts +1 -1
- package/src/context/debug/spector.ts +7 -6
- package/src/context/debug/webgl-developer-tools.ts +21 -15
- package/src/context/parameters/unified-parameter-api.ts +20 -14
- package/src/context/parameters/webgl-parameter-tables.ts +117 -98
- package/src/context/polyfill/context-data.ts +27 -0
- package/src/context/polyfill/get-parameter-polyfill.ts +8 -7
- package/src/context/polyfill/polyfill-context.ts +7 -9
- package/src/context/polyfill/polyfill-table.ts +18 -16
- package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
- package/src/context/state-tracker/track-context-state.ts +14 -13
- package/src/context/state-tracker/with-parameters.ts +8 -2
- package/src/index.ts +42 -33
- package/src/types.ts +2 -0
- package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
- package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
- package/dist/adapter/converters/renderbuffer-formats.js +0 -185
- package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
- package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
- package/dist/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/adapter/helpers/uniforms.d.ts +0 -26
- package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
- package/dist/adapter/helpers/uniforms.js.map +0 -1
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/bundle.js.map +0 -1
- package/dist/classic/buffer.d.ts.map +0 -1
- package/dist/classic/buffer.js.map +0 -1
- package/dist/context/context/context-state.d.ts +0 -18
- package/dist/context/context/context-state.d.ts.map +0 -1
- package/dist/context/context/context-state.js +0 -26
- package/dist/context/context/context-state.js.map +0 -1
- package/dist/context/context/create-context.d.ts +0 -41
- package/dist/context/context/create-context.d.ts.map +0 -1
- package/dist/context/context/create-context.js +0 -49
- package/dist/context/context/create-context.js.map +0 -1
- package/dist/context/context/device-pixels.d.ts +0 -25
- package/dist/context/context/device-pixels.d.ts.map +0 -1
- package/dist/context/context/device-pixels.js +0 -98
- package/dist/context/context/device-pixels.js.map +0 -1
- package/dist/es5/adapter/converters/device-parameters.js +0 -170
- package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
- package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
- package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
- package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/es5/adapter/converters/texture-formats.js +0 -1031
- package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
- package/dist/es5/adapter/converters/vertex-formats.js +0 -45
- package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/es5/adapter/device-helpers/device-features.js +0 -144
- package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
- package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
- package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
- package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
- package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
- package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
- package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/es5/adapter/helpers/set-uniform.js +0 -125
- package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/es5/adapter/helpers/uniforms.js +0 -112
- package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
- package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
- package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
- package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-resource.js +0 -292
- package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
- package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
- package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
- package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
- package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
- package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
- package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
- package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
- package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
- package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-shader.js +0 -149
- package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-texture.js +0 -986
- package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/es5/adapter/webgl-canvas-context.js +0 -97
- package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/es5/adapter/webgl-device.js +0 -399
- package/dist/es5/adapter/webgl-device.js.map +0 -1
- package/dist/es5/bundle.js +0 -7
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/classic/accessor.js +0 -181
- package/dist/es5/classic/accessor.js.map +0 -1
- package/dist/es5/classic/buffer.js +0 -470
- package/dist/es5/classic/buffer.js.map +0 -1
- package/dist/es5/classic/typed-array-utils.js +0 -126
- package/dist/es5/classic/typed-array-utils.js.map +0 -1
- package/dist/es5/context/context/context-state.js +0 -31
- package/dist/es5/context/context/context-state.js.map +0 -1
- package/dist/es5/context/context/create-context.js +0 -69
- package/dist/es5/context/context/create-context.js.map +0 -1
- package/dist/es5/context/context/device-pixels.js +0 -115
- package/dist/es5/context/context/device-pixels.js.map +0 -1
- package/dist/es5/context/context/webgl-checks.js +0 -54
- package/dist/es5/context/context/webgl-checks.js.map +0 -1
- package/dist/es5/context/debug/spector.js +0 -133
- package/dist/es5/context/debug/spector.js.map +0 -1
- package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
- package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
- package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
- package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
- package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-context.js +0 -135
- package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-table.js +0 -166
- package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
- package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
- package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/es5/context/state-tracker/track-context-state.js +0 -211
- package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/es5/context/state-tracker/with-parameters.js +0 -44
- package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/es5/index.js +0 -276
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/init.js +0 -10
- package/dist/es5/init.js.map +0 -1
- package/dist/es5/types/webgl.js +0 -6
- package/dist/es5/types/webgl.js.map +0 -1
- package/dist/es5/types.js +0 -2
- package/dist/es5/types.js.map +0 -1
- package/dist/esm/adapter/converters/device-parameters.js +0 -155
- package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
- package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
- package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
- package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/esm/adapter/converters/texture-formats.js +0 -954
- package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
- package/dist/esm/adapter/converters/vertex-formats.js +0 -35
- package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/esm/adapter/device-helpers/device-features.js +0 -102
- package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
- package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
- package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
- package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
- package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
- package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
- package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/esm/adapter/helpers/set-uniform.js +0 -115
- package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/esm/adapter/helpers/uniforms.js +0 -99
- package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
- package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
- package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
- package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-resource.js +0 -216
- package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
- package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
- package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
- package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
- package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
- package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
- package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
- package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
- package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
- package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-shader.js +0 -75
- package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-texture.js +0 -831
- package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/esm/adapter/webgl-canvas-context.js +0 -54
- package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/esm/adapter/webgl-device.js +0 -280
- package/dist/esm/adapter/webgl-device.js.map +0 -1
- package/dist/esm/bundle.js +0 -5
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/classic/accessor.js +0 -144
- package/dist/esm/classic/accessor.js.map +0 -1
- package/dist/esm/classic/buffer.js +0 -384
- package/dist/esm/classic/buffer.js.map +0 -1
- package/dist/esm/classic/typed-array-utils.js +0 -112
- package/dist/esm/classic/typed-array-utils.js.map +0 -1
- package/dist/esm/context/context/context-state.js +0 -26
- package/dist/esm/context/context/context-state.js.map +0 -1
- package/dist/esm/context/context/create-context.js.map +0 -1
- package/dist/esm/context/context/device-pixels.js +0 -98
- package/dist/esm/context/context/device-pixels.js.map +0 -1
- package/dist/esm/context/context/webgl-checks.js +0 -34
- package/dist/esm/context/context/webgl-checks.js.map +0 -1
- package/dist/esm/context/debug/spector.js +0 -76
- package/dist/esm/context/debug/spector.js.map +0 -1
- package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
- package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
- package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
- package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
- package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-context.js +0 -92
- package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-table.js +0 -160
- package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
- package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/esm/context/state-tracker/track-context-state.js +0 -183
- package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/esm/context/state-tracker/with-parameters.js +0 -36
- package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/esm/index.js +0 -27
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/init.js +0 -4
- package/dist/esm/init.js.map +0 -1
- package/dist/esm/types/webgl.js +0 -2
- package/dist/esm/types/webgl.js.map +0 -1
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
- package/dist/init.d.ts +0 -2
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -4
- package/dist/init.js.map +0 -1
- package/dist/types/webgl.d.ts +0 -144
- package/dist/types/webgl.d.ts.map +0 -1
- package/dist/types/webgl.js +0 -2
- package/dist/types/webgl.js.map +0 -1
- package/src/adapter/converters/renderbuffer-formats.ts +0 -92
- package/src/bundle.ts +0 -4
- package/src/context/context/context-state.ts +0 -41
- package/src/context/context/device-pixels.ts +0 -152
- package/src/init.ts +0 -4
- package/src/types/webgl.ts +0 -283
|
@@ -1,56 +1,76 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
RenderPipelineProps,
|
|
3
|
-
RenderPipelineParameters,
|
|
4
3
|
RenderPass,
|
|
5
4
|
Buffer,
|
|
6
5
|
Binding,
|
|
7
6
|
ShaderLayout,
|
|
8
7
|
PrimitiveTopology,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
} from '@luma.gl/
|
|
12
|
-
import {RenderPipeline, cast, log
|
|
13
|
-
import
|
|
14
|
-
|
|
8
|
+
TypedArray,
|
|
9
|
+
BufferLayout
|
|
10
|
+
} from '@luma.gl/core';
|
|
11
|
+
import {RenderPipeline, cast, log} from '@luma.gl/core';
|
|
12
|
+
import {
|
|
13
|
+
mergeShaderLayout,
|
|
14
|
+
getAttributeInfosFromLayouts
|
|
15
|
+
} from '@luma.gl/core';
|
|
16
|
+
import {GL} from '@luma.gl/constants';
|
|
17
|
+
|
|
18
|
+
import {getGLFromVertexType} from '../converters/vertex-formats';
|
|
15
19
|
import {getShaderLayout} from '../helpers/get-shader-layout';
|
|
16
|
-
import {withDeviceParameters} from '../converters/device-parameters';
|
|
20
|
+
import {withDeviceParameters, withGLParameters} from '../converters/device-parameters';
|
|
17
21
|
import {setUniform} from '../helpers/set-uniform';
|
|
18
22
|
// import {copyUniform, checkUniformValues} from '../../classes/uniforms';
|
|
19
23
|
|
|
20
|
-
import WebGLDevice from '../webgl-device';
|
|
21
|
-
import WEBGLBuffer from './webgl-buffer';
|
|
22
|
-
import WEBGLShader from './webgl-shader';
|
|
23
|
-
import WEBGLTexture from './webgl-texture';
|
|
24
|
-
import WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object';
|
|
24
|
+
import {WebGLDevice} from '../webgl-device';
|
|
25
|
+
import {WEBGLBuffer} from './webgl-buffer';
|
|
26
|
+
import {WEBGLShader} from './webgl-shader';
|
|
27
|
+
import {WEBGLTexture} from './webgl-texture';
|
|
28
|
+
import {WEBGLVertexArrayObject} from '../objects/webgl-vertex-array-object';
|
|
29
|
+
import {WEBGLRenderPass} from './webgl-render-pass';
|
|
25
30
|
|
|
26
31
|
const LOG_PROGRAM_PERF_PRIORITY = 4;
|
|
27
32
|
|
|
28
33
|
/** Creates a new render pipeline */
|
|
29
|
-
export
|
|
34
|
+
export class WEBGLRenderPipeline extends RenderPipeline {
|
|
35
|
+
/** The WebGL device that created this render pipeline */
|
|
30
36
|
device: WebGLDevice;
|
|
37
|
+
/** Handle to underlying WebGL program */
|
|
31
38
|
handle: WebGLProgram;
|
|
39
|
+
/** vertex shader */
|
|
32
40
|
vs: WEBGLShader;
|
|
41
|
+
/** fragment shader */
|
|
33
42
|
fs: WEBGLShader;
|
|
34
|
-
layout
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
/** The layout extracted from shader by WebGL introspection APIs */
|
|
44
|
+
introspectedLayout: ShaderLayout;
|
|
45
|
+
/** The merged layout */
|
|
46
|
+
shaderLayout: ShaderLayout;
|
|
47
|
+
/** Buffer map describing buffer interleaving etc */
|
|
48
|
+
bufferLayout: BufferLayout[];
|
|
49
|
+
|
|
50
|
+
/** Uniforms set on this model */
|
|
41
51
|
uniforms: Record<string, any> = {};
|
|
52
|
+
/** Bindings set on this model */
|
|
42
53
|
bindings: Record<string, any> = {};
|
|
54
|
+
/** Any constant attributes */
|
|
55
|
+
constantAttributes: Record<string, TypedArray> = {};
|
|
56
|
+
/** Index buffer is stored separately */
|
|
57
|
+
_indexBuffer?: WEBGLBuffer;
|
|
58
|
+
/** WebGL varyings */
|
|
59
|
+
varyings: string[] | null = null;
|
|
60
|
+
|
|
61
|
+
/** Stores attribute bindings */
|
|
62
|
+
vertexArrayObject: WEBGLVertexArrayObject;
|
|
63
|
+
|
|
43
64
|
_textureUniforms: Record<string, any> = {};
|
|
44
65
|
_textureIndexCounter: number = 0;
|
|
45
66
|
_uniformCount: number = 0;
|
|
46
|
-
_uniformSetters: Record<string, Function
|
|
67
|
+
_uniformSetters: Record<string, Function> = {}; // TODO are these used?
|
|
47
68
|
|
|
48
69
|
constructor(device: WebGLDevice, props: RenderPipelineProps) {
|
|
49
70
|
super(device, props);
|
|
50
71
|
this.device = device;
|
|
51
72
|
this.handle = this.props.handle || this.device.gl.createProgram();
|
|
52
|
-
|
|
53
|
-
this.handle.__SPECTOR_Metadata = {id: this.props.id};
|
|
73
|
+
this.device.setSpectorMetadata(this.handle, {id: this.props.id});
|
|
54
74
|
|
|
55
75
|
// Create shaders if needed
|
|
56
76
|
this.vs = cast<WEBGLShader>(props.vs);
|
|
@@ -64,63 +84,122 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
64
84
|
if (varyings && varyings.length > 0) {
|
|
65
85
|
this.device.assertWebGL2();
|
|
66
86
|
this.varyings = varyings;
|
|
67
|
-
this.device.gl2
|
|
87
|
+
this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);
|
|
68
88
|
}
|
|
69
89
|
|
|
70
90
|
this._compileAndLink();
|
|
71
91
|
|
|
72
|
-
this.
|
|
92
|
+
this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);
|
|
93
|
+
// Merge provided layout with introspected layout
|
|
94
|
+
this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);
|
|
95
|
+
// Merge layout with any buffer map overrides
|
|
96
|
+
this.bufferLayout = props.bufferLayout || [];
|
|
97
|
+
// this.shaderLayout = mergeBufferMap(this.shaderLayout, this.bufferLayout);
|
|
73
98
|
this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);
|
|
74
99
|
}
|
|
75
100
|
|
|
76
|
-
destroy(): void {
|
|
101
|
+
override destroy(): void {
|
|
77
102
|
if (this.handle) {
|
|
78
103
|
this.device.gl.deleteProgram(this.handle);
|
|
79
|
-
this.handle = null;
|
|
104
|
+
// this.handle = null;
|
|
105
|
+
this.destroyed = true;
|
|
80
106
|
}
|
|
81
107
|
}
|
|
82
108
|
|
|
83
109
|
setIndexBuffer(indexBuffer: Buffer): void {
|
|
84
110
|
const webglBuffer = cast<WEBGLBuffer>(indexBuffer);
|
|
85
111
|
this.vertexArrayObject.setElementBuffer(webglBuffer);
|
|
86
|
-
this._indexBuffer =
|
|
112
|
+
this._indexBuffer = webglBuffer;
|
|
87
113
|
}
|
|
88
114
|
|
|
115
|
+
|
|
89
116
|
/** @todo needed for portable model */
|
|
90
|
-
setAttributes(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
117
|
+
setAttributes(buffers: Record<string, Buffer>): void {
|
|
118
|
+
const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);
|
|
119
|
+
|
|
120
|
+
for (const [bufferName, buffer] of Object.entries(buffers)) {
|
|
121
|
+
let set = false;
|
|
122
|
+
for (const attributeInfo of Object.values(attributeInfos)) {
|
|
123
|
+
if (attributeInfo.bufferName !== bufferName) {
|
|
124
|
+
continue; // eslint-disable-line no-continue
|
|
125
|
+
}
|
|
126
|
+
const webglBuffer = cast<WEBGLBuffer>(buffer);
|
|
127
|
+
|
|
128
|
+
const glType = getGLFromVertexType(attributeInfo.bufferDataType);
|
|
129
|
+
// TODO remove when we have more confidence
|
|
130
|
+
log.log(1, {
|
|
131
|
+
setAttribute: attributeInfo.name,
|
|
132
|
+
toBuffer: bufferName,
|
|
133
|
+
size: attributeInfo.bufferComponents,
|
|
134
|
+
type: glType,
|
|
135
|
+
stride: attributeInfo.byteStride,
|
|
136
|
+
offset: attributeInfo.byteOffset,
|
|
137
|
+
normalized: attributeInfo.normalized,
|
|
138
|
+
// it is the shader attribute declaration, not the vertex memory format,
|
|
139
|
+
// that determines if the data in the buffer will be treated as integers.
|
|
140
|
+
// /
|
|
141
|
+
// Also note that WebGL supports assigning non-normalized integer data to floating point attributes,
|
|
142
|
+
// but as far as we can tell, WebGPU does not.
|
|
143
|
+
integer: attributeInfo.integer,
|
|
144
|
+
divisor: attributeInfo.stepMode === 'instance' ? 1 : 0
|
|
145
|
+
})();
|
|
146
|
+
this.vertexArrayObject.setBuffer(attributeInfo.location, webglBuffer, {
|
|
147
|
+
size: attributeInfo.bufferComponents,
|
|
148
|
+
type: glType,
|
|
149
|
+
stride: attributeInfo.byteStride,
|
|
150
|
+
offset: attributeInfo.byteOffset,
|
|
151
|
+
normalized: attributeInfo.normalized,
|
|
152
|
+
// it is the shader attribute declaration, not the vertex memory format,
|
|
153
|
+
// that determines if the data in the buffer will be treated as integers.
|
|
154
|
+
// /
|
|
155
|
+
// Also note that WebGL supports assigning non-normalized integer data to floating point attributes,
|
|
156
|
+
// but as far as we can tell, WebGPU does not.
|
|
157
|
+
integer: attributeInfo.integer,
|
|
158
|
+
divisor: attributeInfo.stepMode === 'instance' ? 1 : 0
|
|
159
|
+
});
|
|
160
|
+
set = true;
|
|
161
|
+
}
|
|
162
|
+
if (!set) {
|
|
163
|
+
log.warn(`setAttributes(): Ignoring (buffer "${buffer.id}" for unknown attribute "${name}" in pipeline "${this.id}"`)();
|
|
97
164
|
}
|
|
98
|
-
const decoded = decodeVertexFormat(attribute.format);
|
|
99
|
-
const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;
|
|
100
|
-
const divisor = attribute.stepMode === 'instance' ? 1 : 0;
|
|
101
|
-
const type = getWebGLDataType(typeString);
|
|
102
|
-
this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
|
|
103
|
-
size,
|
|
104
|
-
type,
|
|
105
|
-
stride,
|
|
106
|
-
offset: 0,
|
|
107
|
-
normalized,
|
|
108
|
-
integer,
|
|
109
|
-
divisor: attribute.stepMode === 'instance' ? 1 : 0
|
|
110
|
-
});
|
|
111
165
|
}
|
|
112
166
|
}
|
|
113
167
|
|
|
114
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Constant attributes are only supported in WebGL, not in WebGPU
|
|
170
|
+
* Any attribute that is disabled in the current vertex array object
|
|
171
|
+
* is read from the context's global constant value for that attribute location.
|
|
172
|
+
* @param attributes
|
|
173
|
+
*/
|
|
174
|
+
setConstantAttributes(attributes: Record<string, TypedArray>): void {
|
|
175
|
+
// TODO - there should be no advantage to setting these here vs in _applyConstantAttributes
|
|
176
|
+
// for (const [name, value] of Object.entries(attributes)) {
|
|
177
|
+
// const attributeInfo = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout, name);
|
|
178
|
+
// if (!attributeInfo) {
|
|
179
|
+
// log.warn(
|
|
180
|
+
// `Ignoring constant value supplied for unknown attribute "${name}" in pipeline "${this.id}"`
|
|
181
|
+
// )();
|
|
182
|
+
// continue; // eslint-disable-line no-continue
|
|
183
|
+
// }
|
|
184
|
+
// this.vertexArrayObject.setConstant(attributeInfo.location, value);
|
|
185
|
+
// }
|
|
186
|
+
Object.assign(this.constantAttributes, attributes);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Bindings include: textures, samplers and uniform buffers
|
|
191
|
+
* @todo needed for portable model
|
|
192
|
+
*/
|
|
115
193
|
setBindings(bindings: Record<string, Binding>): void {
|
|
116
194
|
// if (log.priority >= 2) {
|
|
117
195
|
// checkUniformValues(uniforms, this.id, this._uniformSetters);
|
|
118
196
|
// }
|
|
119
197
|
|
|
120
198
|
for (const [name, value] of Object.entries(bindings)) {
|
|
121
|
-
const binding = this.
|
|
199
|
+
const binding = this.shaderLayout.bindings.find(binding => binding.name === name);
|
|
122
200
|
if (!binding) {
|
|
123
201
|
log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();
|
|
202
|
+
continue; // eslint-disable-line no-continue
|
|
124
203
|
}
|
|
125
204
|
if (!value) {
|
|
126
205
|
log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();
|
|
@@ -158,7 +237,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
158
237
|
* This function unifies those ways into a single call using common parameters with sane defaults
|
|
159
238
|
*/
|
|
160
239
|
draw(options: {
|
|
161
|
-
renderPass
|
|
240
|
+
renderPass: RenderPass;
|
|
162
241
|
vertexCount?: number;
|
|
163
242
|
indexCount?: number;
|
|
164
243
|
instanceCount?: number;
|
|
@@ -168,20 +247,20 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
168
247
|
baseVertex?: number;
|
|
169
248
|
}): boolean {
|
|
170
249
|
const {
|
|
171
|
-
renderPass
|
|
250
|
+
renderPass,
|
|
172
251
|
vertexCount,
|
|
173
|
-
indexCount,
|
|
252
|
+
// indexCount,
|
|
174
253
|
instanceCount,
|
|
175
|
-
firstVertex = 0
|
|
176
|
-
firstIndex,
|
|
177
|
-
firstInstance,
|
|
178
|
-
baseVertex
|
|
254
|
+
firstVertex = 0
|
|
255
|
+
// firstIndex,
|
|
256
|
+
// firstInstance,
|
|
257
|
+
// baseVertex
|
|
179
258
|
} = options;
|
|
180
259
|
|
|
181
|
-
const drawMode =
|
|
260
|
+
const drawMode = getGLDrawMode(this.props.topology);
|
|
182
261
|
const isIndexed: boolean = Boolean(this._indexBuffer);
|
|
183
|
-
const indexType = this._indexBuffer?.
|
|
184
|
-
const isInstanced: boolean = options.instanceCount > 0;
|
|
262
|
+
const indexType = this._indexBuffer?.glIndexType;
|
|
263
|
+
const isInstanced: boolean = Number(options.instanceCount) > 0;
|
|
185
264
|
|
|
186
265
|
// Avoid WebGL draw call when not rendering any data or values are incomplete
|
|
187
266
|
// Note: async textures set as uniforms might still be loading.
|
|
@@ -195,8 +274,6 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
195
274
|
this.device.gl.useProgram(this.handle);
|
|
196
275
|
|
|
197
276
|
this.vertexArrayObject.bind(() => {
|
|
198
|
-
const parameters = {...this.props.parameters, framebuffer: renderPass.props.framebuffer};
|
|
199
|
-
|
|
200
277
|
const primitiveMode = getGLPrimitive(this.props.topology);
|
|
201
278
|
const transformFeedback: any = null;
|
|
202
279
|
if (transformFeedback) {
|
|
@@ -206,33 +283,43 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
206
283
|
// We have to apply bindings before every draw call since other draw calls will overwrite
|
|
207
284
|
this._applyBindings();
|
|
208
285
|
this._applyUniforms();
|
|
286
|
+
this._applyConstantAttributes();
|
|
287
|
+
|
|
288
|
+
const webglRenderPass = renderPass as WEBGLRenderPass;
|
|
209
289
|
|
|
210
290
|
// TODO - double context push/pop
|
|
211
|
-
withDeviceParameters(this.device, parameters, () => {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
291
|
+
withDeviceParameters(this.device, this.props.parameters, () => {
|
|
292
|
+
withGLParameters(this.device, webglRenderPass.glParameters, () => {
|
|
293
|
+
// TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
|
|
294
|
+
if (isIndexed && isInstanced) {
|
|
295
|
+
// ANGLE_instanced_arrays extension
|
|
296
|
+
this.device.gl2?.drawElementsInstanced(
|
|
297
|
+
drawMode,
|
|
298
|
+
vertexCount || 0, // indexCount?
|
|
299
|
+
indexType,
|
|
300
|
+
firstVertex,
|
|
301
|
+
instanceCount || 0
|
|
302
|
+
);
|
|
303
|
+
// } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
304
|
+
// this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
|
|
305
|
+
} else if (isIndexed) {
|
|
306
|
+
this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
|
|
307
|
+
} else if (isInstanced) {
|
|
308
|
+
this.device.gl2?.drawArraysInstanced(
|
|
309
|
+
drawMode,
|
|
310
|
+
firstVertex,
|
|
311
|
+
vertexCount || 0,
|
|
312
|
+
instanceCount || 0
|
|
313
|
+
);
|
|
314
|
+
} else {
|
|
315
|
+
this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
if (transformFeedback) {
|
|
320
|
+
transformFeedback.end();
|
|
230
321
|
}
|
|
231
322
|
});
|
|
232
|
-
|
|
233
|
-
if (transformFeedback) {
|
|
234
|
-
transformFeedback.end();
|
|
235
|
-
}
|
|
236
323
|
});
|
|
237
324
|
|
|
238
325
|
return true;
|
|
@@ -275,12 +362,12 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
275
362
|
_areTexturesRenderable() {
|
|
276
363
|
let texturesRenderable = true;
|
|
277
364
|
|
|
278
|
-
for (const [
|
|
365
|
+
for (const [, texture] of Object.entries(this._textureUniforms)) {
|
|
279
366
|
texture.update();
|
|
280
367
|
texturesRenderable = texturesRenderable && texture.loaded;
|
|
281
368
|
}
|
|
282
369
|
|
|
283
|
-
for (const [
|
|
370
|
+
for (const [, texture] of Object.entries(this.bindings)) {
|
|
284
371
|
// texture.update();
|
|
285
372
|
if (texture.loaded !== undefined) {
|
|
286
373
|
texturesRenderable = texturesRenderable && texture.loaded;
|
|
@@ -290,15 +377,38 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
290
377
|
return texturesRenderable;
|
|
291
378
|
}
|
|
292
379
|
|
|
293
|
-
/**
|
|
380
|
+
/**
|
|
381
|
+
* Constant attributes need to be reset before every draw call
|
|
382
|
+
* Any attribute that is disabled in the current vertex array object
|
|
383
|
+
* is read from the context's global constant value for that attribute location.
|
|
384
|
+
* @note Constant attributes are only supported in WebGL, not in WebGPU
|
|
385
|
+
*/
|
|
386
|
+
_applyConstantAttributes(): void {
|
|
387
|
+
const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);
|
|
388
|
+
for (const [name, value] of Object.entries(this.constantAttributes)) {
|
|
389
|
+
const attributeInfo = attributeInfos[name];
|
|
390
|
+
if (!attributeInfo) {
|
|
391
|
+
log.warn(
|
|
392
|
+
`Ignoring constant value supplied for unknown attribute "${name}" in pipeline "${this.id}"`
|
|
393
|
+
)();
|
|
394
|
+
continue; // eslint-disable-line no-continue
|
|
395
|
+
}
|
|
396
|
+
this.vertexArrayObject.setConstant(attributeInfo.location, value);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/** Apply any bindings (before each draw call) */
|
|
294
401
|
_applyBindings() {
|
|
295
402
|
this.device.gl.useProgram(this.handle);
|
|
296
403
|
|
|
297
404
|
const {gl2} = this.device;
|
|
405
|
+
if (!gl2) {
|
|
406
|
+
throw new Error('bindings');
|
|
407
|
+
}
|
|
298
408
|
|
|
299
409
|
let textureUnit = 0;
|
|
300
410
|
let uniformBufferIndex = 0;
|
|
301
|
-
for (const binding of this.
|
|
411
|
+
for (const binding of this.shaderLayout.bindings) {
|
|
302
412
|
const value = this.bindings[binding.name];
|
|
303
413
|
if (!value) {
|
|
304
414
|
throw new Error(`No value for binding ${binding.name} in ${this.id}`);
|
|
@@ -349,10 +459,14 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
349
459
|
}
|
|
350
460
|
}
|
|
351
461
|
|
|
462
|
+
/**
|
|
463
|
+
* Due to program sharing, uniforms need to be reset before every draw call
|
|
464
|
+
* (though caching will avoid redundant WebGL calls)
|
|
465
|
+
*/
|
|
352
466
|
_applyUniforms() {
|
|
353
|
-
for (const uniformLayout of this.
|
|
467
|
+
for (const uniformLayout of this.shaderLayout.uniforms || []) {
|
|
354
468
|
const {name, location, type, textureUnit} = uniformLayout;
|
|
355
|
-
const value = this.uniforms[name]
|
|
469
|
+
const value = this.uniforms[name] ?? textureUnit;
|
|
356
470
|
if (value !== undefined) {
|
|
357
471
|
setUniform(this.device.gl, location, type, value);
|
|
358
472
|
}
|
|
@@ -360,18 +474,27 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
360
474
|
}
|
|
361
475
|
}
|
|
362
476
|
|
|
363
|
-
/** Get the primitive type for
|
|
364
|
-
function
|
|
477
|
+
/** Get the primitive type for draw */
|
|
478
|
+
function getGLDrawMode(
|
|
365
479
|
topology: PrimitiveTopology
|
|
366
|
-
):
|
|
480
|
+
):
|
|
481
|
+
| GL.POINTS
|
|
482
|
+
| GL.LINES
|
|
483
|
+
| GL.LINE_STRIP
|
|
484
|
+
| GL.LINE_LOOP
|
|
485
|
+
| GL.TRIANGLES
|
|
486
|
+
| GL.TRIANGLE_STRIP
|
|
487
|
+
| GL.TRIANGLE_FAN {
|
|
367
488
|
// prettier-ignore
|
|
368
489
|
switch (topology) {
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
490
|
+
case 'point-list': return GL.POINTS;
|
|
491
|
+
case 'line-list': return GL.LINES;
|
|
492
|
+
case 'line-strip': return GL.LINE_STRIP;
|
|
493
|
+
case 'line-loop-webgl': return GL.LINE_LOOP;
|
|
494
|
+
case 'triangle-list': return GL.TRIANGLES;
|
|
495
|
+
case 'triangle-strip': return GL.TRIANGLE_STRIP;
|
|
496
|
+
case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;
|
|
497
|
+
default: throw new Error(topology);
|
|
375
498
|
}
|
|
376
499
|
}
|
|
377
500
|
|
|
@@ -379,35 +502,13 @@ function getDrawMode(
|
|
|
379
502
|
function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {
|
|
380
503
|
// prettier-ignore
|
|
381
504
|
switch (topology) {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
function getAttributesByLocation(
|
|
392
|
-
attributes: Record<string, Buffer>,
|
|
393
|
-
layout: ShaderLayout
|
|
394
|
-
): Record<number, Buffer> {
|
|
395
|
-
const byLocation: Record<number, Buffer> = {};
|
|
396
|
-
for (const [name, buffer] of Object.entries(attributes)) {
|
|
397
|
-
const attribute = getAttributeLayout(layout, name);
|
|
398
|
-
byLocation[attribute.location] = buffer;
|
|
399
|
-
}
|
|
400
|
-
return byLocation;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
function getAttributeLayout(layout: ShaderLayout, name: string): AttributeLayout | undefined {
|
|
404
|
-
return layout.attributes.find((binding) => binding.name === name);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
function getBindingLayout(layout: ShaderLayout, name: string): BindingLayout {
|
|
408
|
-
const binding = layout.bindings.find((binding) => binding.name === name);
|
|
409
|
-
if (!binding) {
|
|
410
|
-
throw new Error(`Unknown binding ${name}`);
|
|
505
|
+
case 'point-list': return GL.POINTS;
|
|
506
|
+
case 'line-list': return GL.LINES;
|
|
507
|
+
case 'line-strip': return GL.LINES;
|
|
508
|
+
case 'line-loop-webgl': return GL.LINES;
|
|
509
|
+
case 'triangle-list': return GL.TRIANGLES;
|
|
510
|
+
case 'triangle-strip': return GL.TRIANGLES;
|
|
511
|
+
case 'triangle-fan-webgl': return GL.TRIANGLES;
|
|
512
|
+
default: throw new Error(topology);
|
|
411
513
|
}
|
|
412
|
-
return binding;
|
|
413
514
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
|
|
3
|
+
import {Sampler, SamplerProps} from '@luma.gl/core';
|
|
4
|
+
import {GL, GLSamplerParameters} from '@luma.gl/constants';
|
|
4
5
|
import {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';
|
|
5
|
-
import type WebGLDevice from '../webgl-device';
|
|
6
|
+
import type {WebGLDevice} from '../webgl-device';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Sampler object -
|
|
@@ -11,10 +12,10 @@ import type WebGLDevice from '../webgl-device';
|
|
|
11
12
|
* so that they can be set directly on the texture
|
|
12
13
|
* https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html
|
|
13
14
|
*/
|
|
14
|
-
export
|
|
15
|
+
export class WEBGLSampler extends Sampler {
|
|
15
16
|
readonly device: WebGLDevice;
|
|
16
17
|
readonly handle: WebGLSampler;
|
|
17
|
-
readonly parameters:
|
|
18
|
+
readonly parameters: GLSamplerParameters;
|
|
18
19
|
|
|
19
20
|
constructor(device: WebGLDevice, props: SamplerProps) {
|
|
20
21
|
super(device, props);
|
|
@@ -26,7 +27,7 @@ export default class WEBGLSampler extends Sampler {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
destroy(): void {
|
|
30
|
+
override destroy(): void {
|
|
30
31
|
if (this.handle) {
|
|
31
32
|
this.device.gl2.deleteSampler(this.handle);
|
|
32
33
|
// @ts-expect-error
|
|
@@ -34,8 +35,12 @@ export default class WEBGLSampler extends Sampler {
|
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
|
|
38
|
+
override toString(): string {
|
|
39
|
+
return `Sampler(${this.id},${JSON.stringify(this.props)})`;
|
|
40
|
+
}
|
|
41
|
+
|
|
37
42
|
/** Set sampler parameters on the sampler */
|
|
38
|
-
private _setSamplerParameters(parameters:
|
|
43
|
+
private _setSamplerParameters(parameters: GLSamplerParameters): void {
|
|
39
44
|
for (const [pname, value] of Object.entries(parameters)) {
|
|
40
45
|
// Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.
|
|
41
46
|
// For now, pick the float version for parameters specified as GLfloat.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// luma.gl, MIT license
|
|
2
|
-
import {log, uid, Shader, ShaderProps} from '@luma.gl/
|
|
3
|
-
import GL from '@luma.gl/constants';
|
|
4
|
-
import {getShaderInfo
|
|
2
|
+
import {log, uid, Shader, ShaderProps, CompilerMessage, formatCompilerLog} from '@luma.gl/core';
|
|
3
|
+
import {GL} from '@luma.gl/constants';
|
|
4
|
+
import {getShaderInfo} from '../helpers/get-shader-info';
|
|
5
5
|
import {parseShaderCompilerLog} from '../helpers/parse-shader-compiler-log';
|
|
6
|
-
import WebGLDevice from '../webgl-device';
|
|
6
|
+
import {WebGLDevice} from '../webgl-device';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* An immutable compiled shader program that execute portions of the GPU Pipeline
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
export class WEBGLShader extends Shader {
|
|
12
12
|
readonly device: WebGLDevice;
|
|
13
13
|
readonly handle: WebGLShader;
|
|
14
14
|
|
|
@@ -28,18 +28,18 @@ import WebGLDevice from '../webgl-device';
|
|
|
28
28
|
this._compile(this.source);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
destroy(): void {
|
|
31
|
+
override destroy(): void {
|
|
32
32
|
if (this.handle) {
|
|
33
33
|
this.removeStats();
|
|
34
34
|
this.device.gl.deleteShader(this.handle);
|
|
35
|
-
//
|
|
36
|
-
this.
|
|
35
|
+
// this.handle = null;
|
|
36
|
+
this.destroyed = true;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
async compilationInfo(): Promise<readonly CompilerMessage[]> {
|
|
41
41
|
const log = this.device.gl.getShaderInfoLog(this.handle);
|
|
42
|
-
return parseShaderCompilerLog(log);
|
|
42
|
+
return log ? parseShaderCompilerLog(log) : [];
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
// PRIVATE METHODS
|
|
@@ -58,7 +58,8 @@ import WebGLDevice from '../webgl-device';
|
|
|
58
58
|
const compileStatus = gl.getShaderParameter(this.handle, GL.COMPILE_STATUS);
|
|
59
59
|
if (!compileStatus) {
|
|
60
60
|
const shaderLog = gl.getShaderInfoLog(this.handle);
|
|
61
|
-
const
|
|
61
|
+
const parsedLog = shaderLog ? parseShaderCompilerLog(shaderLog) : [];
|
|
62
|
+
const messages = parsedLog.filter(message => message.type === 'error');
|
|
62
63
|
const formattedLog = formatCompilerLog(messages, source);
|
|
63
64
|
const shaderName: string = getShaderInfo(source).name;
|
|
64
65
|
const shaderDescription = `${this.stage} shader ${shaderName}`;
|