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