@luma.gl/webgl 8.6.0-alpha.1 → 8.6.0-alpha.2
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/dist/api/device2.d.ts +52 -0
- package/dist/api/device2.d.ts.map +1 -0
- package/dist/api/device2.js +23 -0
- package/dist/api/device2.js.map +1 -0
- package/dist/classes/accessor.js +2 -2
- package/dist/classes/accessor.js.map +1 -1
- package/dist/classes/accessor.ts.disabled +1 -1
- package/dist/classes/clear.d.ts +3 -2
- package/dist/classes/clear.d.ts.map +1 -1
- package/dist/classes/clear.js +7 -4
- package/dist/classes/clear.js.map +1 -1
- package/dist/classes/copy-and-blit.d.ts +18 -1
- package/dist/classes/copy-and-blit.d.ts.map +1 -1
- package/dist/classes/copy-and-blit.js +30 -25
- package/dist/classes/copy-and-blit.js.map +1 -1
- package/dist/classes/framebuffer.d.ts +10 -1
- package/dist/classes/framebuffer.d.ts.map +1 -1
- package/dist/classes/framebuffer.js +15 -15
- package/dist/classes/framebuffer.js.map +1 -1
- package/dist/classes/program-configuration.d.ts +2 -2
- package/dist/classes/program-configuration.d.ts.map +1 -1
- package/dist/classes/program-configuration.js +1 -1
- package/dist/classes/program-configuration.js.map +1 -1
- package/dist/classes/program.d.ts +6 -6
- package/dist/classes/program.d.ts.map +1 -1
- package/dist/classes/program.js +11 -9
- package/dist/classes/program.js.map +1 -1
- package/dist/classes/query.d.ts.map +1 -1
- package/dist/classes/query.js +6 -5
- package/dist/classes/query.js.map +1 -1
- package/dist/classes/renderbuffer-formats.js +1 -1
- package/dist/classes/renderbuffer-formats.js.map +1 -1
- package/dist/classes/renderbuffer.d.ts.map +1 -1
- package/dist/classes/renderbuffer.js +4 -3
- package/dist/classes/renderbuffer.js.map +1 -1
- package/dist/classes/texture-2d.d.ts +4 -3
- package/dist/classes/texture-2d.d.ts.map +1 -1
- package/dist/classes/texture-2d.js +5 -8
- package/dist/classes/texture-2d.js.map +1 -1
- package/dist/classes/texture-3d.d.ts +3 -2
- package/dist/classes/texture-3d.d.ts.map +1 -1
- package/dist/classes/texture-3d.js +15 -6
- package/dist/classes/texture-3d.js.map +1 -1
- package/dist/classes/texture-cube.d.ts +2 -1
- package/dist/classes/texture-cube.d.ts.map +1 -1
- package/dist/classes/texture-cube.js +3 -4
- package/dist/classes/texture-cube.js.map +1 -1
- package/dist/classes/texture-formats.js +1 -1
- package/dist/classes/texture-formats.js.map +1 -1
- package/dist/classes/texture.d.ts +14 -9
- package/dist/classes/texture.d.ts.map +1 -1
- package/dist/classes/texture.js +19 -18
- package/dist/classes/texture.js.map +1 -1
- package/dist/classes/transform-feedback.d.ts.map +1 -1
- package/dist/classes/transform-feedback.js +5 -4
- package/dist/classes/transform-feedback.js.map +1 -1
- package/dist/classes/uniform-buffer-layout.js +1 -1
- package/dist/classes/uniform-buffer-layout.js.map +1 -1
- package/dist/classes/uniforms.d.ts +0 -1
- package/dist/classes/uniforms.d.ts.map +1 -1
- package/dist/classes/uniforms.js +1 -2
- package/dist/classes/uniforms.js.map +1 -1
- package/dist/classes/vertex-array-object.d.ts +1 -1
- package/dist/classes/vertex-array-object.d.ts.map +1 -1
- package/dist/classes/vertex-array-object.js +8 -9
- package/dist/classes/vertex-array-object.js.map +1 -1
- package/dist/classes/vertex-array.d.ts +1 -1
- package/dist/classes/vertex-array.d.ts.map +1 -1
- package/dist/classes/vertex-array.js +1 -2
- package/dist/classes/vertex-array.js.map +1 -1
- package/dist/classes/webgl-buffer.d.ts +2 -0
- package/dist/classes/webgl-buffer.d.ts.map +1 -1
- package/dist/classes/webgl-buffer.js +8 -5
- package/dist/classes/webgl-buffer.js.map +1 -1
- package/dist/classes/webgl-resource.d.ts +6 -4
- package/dist/classes/webgl-resource.d.ts.map +1 -1
- package/dist/classes/webgl-resource.js +12 -8
- package/dist/classes/webgl-resource.js.map +1 -1
- package/dist/classes/webgl-shader.d.ts +3 -1
- package/dist/classes/webgl-shader.d.ts.map +1 -1
- package/dist/classes/webgl-shader.js +7 -4
- package/dist/classes/webgl-shader.js.map +1 -1
- package/dist/context/context/context-state.d.ts +18 -0
- package/dist/context/context/context-state.d.ts.map +1 -0
- package/dist/context/context/context-state.js +26 -0
- package/dist/context/context/context-state.js.map +1 -0
- package/dist/context/context/create-context.d.ts +40 -0
- package/dist/context/context/create-context.d.ts.map +1 -0
- package/dist/context/context/create-context.js +37 -0
- package/dist/context/context/create-context.js.map +1 -0
- package/dist/context/context/device-pixels.d.ts +25 -0
- package/dist/context/context/device-pixels.d.ts.map +1 -0
- package/dist/context/context/device-pixels.js +98 -0
- package/dist/context/context/device-pixels.js.map +1 -0
- package/dist/context/context/get-canvas.d.ts +13 -0
- package/dist/context/context/get-canvas.d.ts.map +1 -0
- package/dist/context/context/get-canvas.js +31 -0
- package/dist/context/context/get-canvas.js.map +1 -0
- package/dist/context/context/resize-context.d.ts +20 -0
- package/dist/context/context/resize-context.d.ts.map +1 -0
- package/dist/context/context/resize-context.js +15 -0
- package/dist/context/context/resize-context.js.map +1 -0
- package/dist/context/context/webgl-checks.d.ts +13 -0
- package/dist/context/context/webgl-checks.d.ts.map +1 -0
- package/dist/context/context/webgl-checks.js +34 -0
- package/dist/context/context/webgl-checks.js.map +1 -0
- package/dist/context/parameters/unified-parameter-api.d.ts +30 -0
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -0
- package/dist/context/parameters/unified-parameter-api.js +65 -0
- package/dist/context/parameters/unified-parameter-api.js.map +1 -0
- package/dist/context/parameters/webgl-parameter-tables.d.ts +169 -0
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -0
- package/dist/context/parameters/webgl-parameter-tables.js +445 -0
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -0
- package/dist/context/parameters/webgl-parameters.d.ts +144 -0
- package/dist/context/parameters/webgl-parameters.d.ts.map +1 -0
- package/dist/context/parameters/webgl-parameters.js +2 -0
- package/dist/context/parameters/webgl-parameters.js.map +1 -0
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +2 -0
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -0
- package/dist/context/polyfill/get-parameter-polyfill.js +91 -0
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -0
- package/dist/context/polyfill/polyfill-context.d.ts +5 -0
- package/dist/context/polyfill/polyfill-context.d.ts.map +1 -0
- package/dist/context/polyfill/polyfill-context.js +91 -0
- package/dist/context/polyfill/polyfill-context.js.map +1 -0
- package/dist/context/polyfill/polyfill-table.d.ts +48 -0
- package/dist/context/polyfill/polyfill-table.d.ts.map +1 -0
- package/dist/context/polyfill/polyfill-table.js +160 -0
- package/dist/context/polyfill/polyfill-table.js.map +1 -0
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +2 -0
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -0
- package/dist/context/polyfill/polyfill-vertex-array-object.js +335 -0
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
- package/dist/context/state-tracker/deep-array-equal.d.ts +3 -0
- package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -0
- package/dist/context/state-tracker/deep-array-equal.js +21 -0
- package/dist/context/state-tracker/deep-array-equal.js.map +1 -0
- package/dist/context/state-tracker/track-context-state.d.ts +22 -0
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -0
- package/dist/context/state-tracker/track-context-state.js +169 -0
- package/dist/context/state-tracker/track-context-state.js.map +1 -0
- package/dist/context/state-tracker/with-parameters.d.ts +13 -0
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -0
- package/dist/context/state-tracker/with-parameters.js +36 -0
- package/dist/context/state-tracker/with-parameters.js.map +1 -0
- package/dist/debug/debug-uniforms.js +1 -1
- package/dist/debug/debug-uniforms.js.map +1 -1
- package/dist/debug/debug-vertex-array.js +2 -2
- package/dist/debug/debug-vertex-array.js.map +1 -1
- package/dist/device/check-glsl-extension.d.ts +4 -0
- package/dist/device/check-glsl-extension.d.ts.map +1 -0
- package/dist/device/check-glsl-extension.js +22 -0
- package/dist/device/check-glsl-extension.js.map +1 -0
- package/dist/device/device-features.d.ts +12 -0
- package/dist/device/device-features.d.ts.map +1 -0
- package/dist/device/device-features.js +123 -0
- package/dist/device/device-features.js.map +1 -0
- package/dist/device/device-limits.d.ts +51 -0
- package/dist/device/device-limits.d.ts.map +1 -0
- package/dist/device/device-limits.js +90 -0
- package/dist/device/device-limits.js.map +1 -0
- package/dist/device/get-device-info.d.ts +4 -0
- package/dist/device/get-device-info.d.ts.map +1 -0
- package/dist/device/get-device-info.js +44 -0
- package/dist/device/get-device-info.js.map +1 -0
- package/dist/device/webgl-device.d.ts +111 -0
- package/dist/device/webgl-device.d.ts.map +1 -0
- package/dist/device/webgl-device.js +208 -0
- package/dist/device/webgl-device.js.map +1 -0
- package/dist/es5/api/device2.js +42 -0
- package/dist/es5/api/device2.js.map +1 -0
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/classes/accessor.js +104 -74
- package/dist/es5/classes/accessor.js.map +1 -1
- package/dist/es5/classes/accessor.ts.disabled +1 -1
- package/dist/es5/classes/clear.js +55 -34
- package/dist/es5/classes/clear.js.map +1 -1
- package/dist/es5/classes/copy-and-blit.js +175 -156
- package/dist/es5/classes/copy-and-blit.js.map +1 -1
- package/dist/es5/classes/framebuffer.js +647 -518
- package/dist/es5/classes/framebuffer.js.map +1 -1
- package/dist/es5/classes/program-configuration.js +138 -121
- package/dist/es5/classes/program-configuration.js.map +1 -1
- package/dist/es5/classes/program.js +368 -292
- package/dist/es5/classes/program.js.map +1 -1
- package/dist/es5/classes/query.js +172 -107
- package/dist/es5/classes/query.js.map +1 -1
- package/dist/es5/classes/renderbuffer-formats.js +126 -164
- package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
- package/dist/es5/classes/renderbuffer.js +151 -98
- package/dist/es5/classes/renderbuffer.js.map +1 -1
- package/dist/es5/classes/texture-2d.js +44 -17
- package/dist/es5/classes/texture-2d.js.map +1 -1
- package/dist/es5/classes/texture-3d.js +107 -48
- package/dist/es5/classes/texture-3d.js.map +1 -1
- package/dist/es5/classes/texture-cube.js +169 -110
- package/dist/es5/classes/texture-cube.js.map +1 -1
- package/dist/es5/classes/texture-formats.js +42 -71
- package/dist/es5/classes/texture-formats.js.map +1 -1
- package/dist/es5/classes/texture.js +780 -665
- package/dist/es5/classes/texture.js.map +1 -1
- package/dist/es5/classes/transform-feedback.js +206 -150
- package/dist/es5/classes/transform-feedback.js.map +1 -1
- package/dist/es5/classes/uniform-buffer-layout.js +103 -89
- package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
- package/dist/es5/classes/uniforms.js +39 -80
- package/dist/es5/classes/uniforms.js.map +1 -1
- package/dist/es5/classes/vertex-array-object.js +268 -209
- package/dist/es5/classes/vertex-array-object.js.map +1 -1
- package/dist/es5/classes/vertex-array.js +348 -303
- package/dist/es5/classes/vertex-array.js.map +1 -1
- package/dist/es5/classes/webgl-buffer.js +374 -303
- package/dist/es5/classes/webgl-buffer.js.map +1 -1
- package/dist/es5/classes/webgl-resource.js +231 -161
- package/dist/es5/classes/webgl-resource.js.map +1 -1
- package/dist/es5/classes/webgl-shader.js +230 -134
- package/dist/es5/classes/webgl-shader.js.map +1 -1
- package/dist/es5/context/context/context-state.js +31 -0
- package/dist/es5/context/context/context-state.js.map +1 -0
- package/dist/es5/context/context/create-context.js +57 -0
- package/dist/es5/context/context/create-context.js.map +1 -0
- package/dist/es5/context/context/device-pixels.js +115 -0
- package/dist/es5/context/context/device-pixels.js.map +1 -0
- package/dist/es5/context/context/get-canvas.js +40 -0
- package/dist/es5/context/context/get-canvas.js.map +1 -0
- package/dist/es5/context/context/resize-context.js +23 -0
- package/dist/es5/context/context/resize-context.js.map +1 -0
- package/dist/es5/context/context/webgl-checks.js +54 -0
- package/dist/es5/context/context/webgl-checks.js.map +1 -0
- package/dist/es5/context/parameters/unified-parameter-api.js +95 -0
- package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -0
- package/dist/es5/context/parameters/webgl-parameter-tables.js +392 -0
- package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -0
- package/dist/es5/context/parameters/webgl-parameters.js +6 -0
- package/dist/es5/context/parameters/webgl-parameters.js.map +1 -0
- package/dist/es5/context/polyfill/get-parameter-polyfill.js +81 -0
- package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -0
- package/dist/es5/context/polyfill/polyfill-context.js +134 -0
- package/dist/es5/context/polyfill/polyfill-context.js.map +1 -0
- package/dist/es5/context/polyfill/polyfill-table.js +166 -0
- package/dist/es5/context/polyfill/polyfill-table.js.map +1 -0
- package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +341 -0
- package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
- package/dist/es5/context/state-tracker/deep-array-equal.js +28 -0
- package/dist/es5/context/state-tracker/deep-array-equal.js.map +1 -0
- package/dist/es5/context/state-tracker/track-context-state.js +196 -0
- package/dist/es5/context/state-tracker/track-context-state.js.map +1 -0
- package/dist/es5/context/state-tracker/with-parameters.js +44 -0
- package/dist/es5/context/state-tracker/with-parameters.js.map +1 -0
- package/dist/es5/debug/debug-program-configuration.js +48 -20
- package/dist/es5/debug/debug-program-configuration.js.map +1 -1
- package/dist/es5/debug/debug-uniforms.js +110 -70
- package/dist/es5/debug/debug-uniforms.js.map +1 -1
- package/dist/es5/debug/debug-vertex-array.js +49 -54
- package/dist/es5/debug/debug-vertex-array.js.map +1 -1
- package/dist/es5/device/check-glsl-extension.js +33 -0
- package/dist/es5/device/check-glsl-extension.js.map +1 -0
- package/dist/es5/device/device-features.js +152 -0
- package/dist/es5/device/device-features.js.map +1 -0
- package/dist/es5/device/device-limits.js +64 -0
- package/dist/es5/device/device-limits.js.map +1 -0
- package/dist/es5/device/get-device-info.js +55 -0
- package/dist/es5/device/get-device-info.js.map +1 -0
- package/dist/es5/device/webgl-device.js +279 -0
- package/dist/es5/device/webgl-device.js.map +1 -0
- package/dist/es5/index.js +179 -189
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/init.js +18 -14
- package/dist/es5/init.js.map +1 -1
- package/dist/es5/webgl-utils/attribute-utils.js +74 -87
- package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/es5/webgl-utils/constants-to-keys.js +7 -7
- package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/es5/webgl-utils/format-utils.js +4 -4
- package/dist/es5/webgl-utils/format-utils.js.map +1 -1
- package/dist/es5/webgl-utils/get-error.js +18 -18
- package/dist/es5/webgl-utils/get-error.js.map +1 -1
- package/dist/es5/webgl-utils/index.js +10 -10
- package/dist/es5/webgl-utils/is-old-ie.js +16 -0
- package/dist/es5/webgl-utils/is-old-ie.js.map +1 -0
- package/dist/es5/webgl-utils/parse-shader-compiler-log.js +53 -25
- package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +1 -1
- package/dist/es5/webgl-utils/texture-utils.js +32 -36
- package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
- package/dist/es5/webgl-utils/typed-array-utils.js +33 -32
- package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
- package/dist/es5/webgl-utils/webgl-info.ts.disabled +135 -0
- package/dist/esm/api/device2.js +23 -0
- package/dist/esm/api/device2.js.map +1 -0
- package/dist/esm/classes/accessor.js +2 -2
- package/dist/esm/classes/accessor.js.map +1 -1
- package/dist/esm/classes/accessor.ts.disabled +1 -1
- package/dist/esm/classes/clear.js +7 -4
- package/dist/esm/classes/clear.js.map +1 -1
- package/dist/esm/classes/copy-and-blit.js +30 -25
- package/dist/esm/classes/copy-and-blit.js.map +1 -1
- package/dist/esm/classes/framebuffer.js +15 -15
- package/dist/esm/classes/framebuffer.js.map +1 -1
- package/dist/esm/classes/program-configuration.js +1 -1
- package/dist/esm/classes/program-configuration.js.map +1 -1
- package/dist/esm/classes/program.js +11 -9
- package/dist/esm/classes/program.js.map +1 -1
- package/dist/esm/classes/query.js +6 -5
- package/dist/esm/classes/query.js.map +1 -1
- package/dist/esm/classes/renderbuffer-formats.js +1 -1
- package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
- package/dist/esm/classes/renderbuffer.js +4 -3
- package/dist/esm/classes/renderbuffer.js.map +1 -1
- package/dist/esm/classes/texture-2d.js +5 -8
- package/dist/esm/classes/texture-2d.js.map +1 -1
- package/dist/esm/classes/texture-3d.js +15 -6
- package/dist/esm/classes/texture-3d.js.map +1 -1
- package/dist/esm/classes/texture-cube.js +3 -4
- package/dist/esm/classes/texture-cube.js.map +1 -1
- package/dist/esm/classes/texture-formats.js +1 -1
- package/dist/esm/classes/texture-formats.js.map +1 -1
- package/dist/esm/classes/texture.js +19 -18
- package/dist/esm/classes/texture.js.map +1 -1
- package/dist/esm/classes/transform-feedback.js +5 -4
- package/dist/esm/classes/transform-feedback.js.map +1 -1
- package/dist/esm/classes/uniform-buffer-layout.js +1 -1
- package/dist/esm/classes/uniform-buffer-layout.js.map +1 -1
- package/dist/esm/classes/uniforms.js +1 -2
- package/dist/esm/classes/uniforms.js.map +1 -1
- package/dist/esm/classes/vertex-array-object.js +8 -9
- package/dist/esm/classes/vertex-array-object.js.map +1 -1
- package/dist/esm/classes/vertex-array.js +1 -2
- package/dist/esm/classes/vertex-array.js.map +1 -1
- package/dist/esm/classes/webgl-buffer.js +8 -5
- package/dist/esm/classes/webgl-buffer.js.map +1 -1
- package/dist/esm/classes/webgl-resource.js +12 -8
- package/dist/esm/classes/webgl-resource.js.map +1 -1
- package/dist/esm/classes/webgl-shader.js +7 -4
- package/dist/esm/classes/webgl-shader.js.map +1 -1
- package/dist/esm/context/context/context-state.js +26 -0
- package/dist/esm/context/context/context-state.js.map +1 -0
- package/dist/esm/context/context/create-context.js +37 -0
- package/dist/esm/context/context/create-context.js.map +1 -0
- package/dist/esm/context/context/device-pixels.js +98 -0
- package/dist/esm/context/context/device-pixels.js.map +1 -0
- package/dist/esm/context/context/get-canvas.js +31 -0
- package/dist/esm/context/context/get-canvas.js.map +1 -0
- package/dist/esm/context/context/resize-context.js +15 -0
- package/dist/esm/context/context/resize-context.js.map +1 -0
- package/dist/esm/context/context/webgl-checks.js +34 -0
- package/dist/esm/context/context/webgl-checks.js.map +1 -0
- package/dist/esm/context/parameters/unified-parameter-api.js +65 -0
- package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -0
- package/dist/esm/context/parameters/webgl-parameter-tables.js +445 -0
- package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -0
- package/dist/esm/context/parameters/webgl-parameters.js +2 -0
- package/dist/esm/context/parameters/webgl-parameters.js.map +1 -0
- package/dist/esm/context/polyfill/get-parameter-polyfill.js +91 -0
- package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -0
- package/dist/esm/context/polyfill/polyfill-context.js +91 -0
- package/dist/esm/context/polyfill/polyfill-context.js.map +1 -0
- package/dist/esm/context/polyfill/polyfill-table.js +160 -0
- package/dist/esm/context/polyfill/polyfill-table.js.map +1 -0
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +335 -0
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
- package/dist/esm/context/state-tracker/deep-array-equal.js +21 -0
- package/dist/esm/context/state-tracker/deep-array-equal.js.map +1 -0
- package/dist/esm/context/state-tracker/track-context-state.js +169 -0
- package/dist/esm/context/state-tracker/track-context-state.js.map +1 -0
- package/dist/esm/context/state-tracker/with-parameters.js +36 -0
- package/dist/esm/context/state-tracker/with-parameters.js.map +1 -0
- package/dist/esm/debug/debug-uniforms.js +1 -1
- package/dist/esm/debug/debug-uniforms.js.map +1 -1
- package/dist/esm/debug/debug-vertex-array.js +2 -2
- package/dist/esm/debug/debug-vertex-array.js.map +1 -1
- package/dist/esm/device/check-glsl-extension.js +22 -0
- package/dist/esm/device/check-glsl-extension.js.map +1 -0
- package/dist/esm/device/device-features.js +123 -0
- package/dist/esm/device/device-features.js.map +1 -0
- package/dist/esm/device/device-limits.js +90 -0
- package/dist/esm/device/device-limits.js.map +1 -0
- package/dist/esm/device/get-device-info.js +44 -0
- package/dist/esm/device/get-device-info.js.map +1 -0
- package/dist/esm/device/webgl-device.js +208 -0
- package/dist/esm/device/webgl-device.js.map +1 -0
- package/dist/esm/index.js +22 -20
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/init.js +11 -8
- package/dist/esm/init.js.map +1 -1
- package/dist/esm/webgl-utils/attribute-utils.js +1 -1
- package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/esm/webgl-utils/constants-to-keys.js +1 -1
- package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/esm/webgl-utils/format-utils.js +1 -1
- package/dist/esm/webgl-utils/format-utils.js.map +1 -1
- package/dist/esm/{features/check-old-ie.js → webgl-utils/is-old-ie.js} +3 -3
- package/dist/esm/webgl-utils/is-old-ie.js.map +1 -0
- package/dist/esm/webgl-utils/texture-utils.js +2 -2
- package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
- package/dist/esm/webgl-utils/typed-array-utils.js +22 -18
- package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
- package/dist/esm/webgl-utils/webgl-info.ts.disabled +135 -0
- package/dist/index.d.ts +36 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -20
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +11 -8
- package/dist/init.js.map +1 -1
- package/dist/webgl-utils/attribute-utils.d.ts +1 -1
- package/dist/webgl-utils/attribute-utils.js +1 -1
- package/dist/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/webgl-utils/constants-to-keys.js +1 -1
- package/dist/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/webgl-utils/format-utils.d.ts +2 -2
- package/dist/webgl-utils/format-utils.js +1 -1
- package/dist/webgl-utils/format-utils.js.map +1 -1
- package/dist/webgl-utils/is-old-ie.d.ts +2 -0
- package/dist/webgl-utils/is-old-ie.d.ts.map +1 -0
- package/dist/{features/check-old-ie.js → webgl-utils/is-old-ie.js} +3 -3
- package/dist/webgl-utils/is-old-ie.js.map +1 -0
- package/dist/webgl-utils/texture-utils.d.ts +12 -8
- package/dist/webgl-utils/texture-utils.d.ts.map +1 -1
- package/dist/webgl-utils/texture-utils.js +2 -2
- package/dist/webgl-utils/texture-utils.js.map +1 -1
- package/dist/webgl-utils/typed-array-utils.d.ts +39 -32
- package/dist/webgl-utils/typed-array-utils.d.ts.map +1 -1
- package/dist/webgl-utils/typed-array-utils.js +22 -18
- package/dist/webgl-utils/typed-array-utils.js.map +1 -1
- package/dist/webgl-utils/webgl-info.ts.disabled +135 -0
- package/package.json +5 -6
- package/src/.DS_Store +0 -0
- package/src/api/device2.ts +71 -0
- package/src/classes/accessor.js +2 -2
- package/src/classes/accessor.ts.disabled +1 -1
- package/src/classes/clear.ts +9 -4
- package/src/classes/copy-and-blit.ts +49 -52
- package/src/classes/framebuffer.ts +38 -35
- package/src/classes/program-configuration.ts +6 -6
- package/src/classes/program.ts +21 -15
- package/src/classes/query.ts +6 -6
- package/src/classes/renderbuffer-formats.ts +1 -1
- package/src/classes/renderbuffer.ts +5 -4
- package/src/classes/texture-2d.ts +6 -11
- package/src/classes/texture-3d.ts +16 -11
- package/src/classes/texture-cube.ts +7 -7
- package/src/classes/texture-formats.ts +1 -1
- package/src/classes/texture.ts +39 -40
- package/src/classes/transform-feedback.ts +14 -13
- package/src/classes/uniform-buffer-layout.ts +1 -1
- package/src/classes/uniforms.ts +4 -10
- package/src/classes/vertex-array-object.ts +10 -14
- package/src/classes/vertex-array.ts +2 -3
- package/src/classes/webgl-buffer.ts +7 -5
- package/src/classes/webgl-resource.ts +20 -18
- package/src/classes/webgl-shader.ts +6 -4
- package/src/context/context/context-state.ts +39 -0
- package/src/context/context/create-context.ts +83 -0
- package/src/context/context/device-pixels.ts +147 -0
- package/src/context/context/get-canvas.ts +37 -0
- package/src/context/context/resize-context.ts +37 -0
- package/src/context/context/webgl-checks.ts +49 -0
- package/src/context/parameters/unified-parameter-api.ts +127 -0
- package/src/context/parameters/webgl-parameter-tables.ts +625 -0
- package/src/context/parameters/webgl-parameters.ts +197 -0
- package/src/context/polyfill/get-parameter-polyfill.ts +118 -0
- package/src/context/polyfill/polyfill-context.ts +98 -0
- package/src/context/polyfill/polyfill-table.ts +162 -0
- package/src/context/polyfill/polyfill-vertex-array-object.ts +360 -0
- package/src/context/state-tracker/deep-array-equal.ts +20 -0
- package/src/context/state-tracker/track-context-state.ts +250 -0
- package/src/context/state-tracker/with-parameters.ts +50 -0
- package/src/debug/debug-uniforms.ts +1 -1
- package/src/debug/debug-vertex-array.ts +2 -4
- package/src/device/check-glsl-extension.ts +44 -0
- package/src/device/device-features.ts +227 -0
- package/src/device/device-limits.ts +150 -0
- package/src/device/get-device-info.ts +49 -0
- package/src/device/webgl-device.ts +406 -0
- package/src/index.ts +76 -22
- package/src/init.ts +12 -9
- package/src/types.ts +1 -1
- package/src/webgl-utils/attribute-utils.ts +1 -1
- package/src/webgl-utils/constants-to-keys.ts +1 -1
- package/src/webgl-utils/format-utils.ts +1 -1
- package/src/{features/check-old-ie.ts → webgl-utils/is-old-ie.ts} +3 -3
- package/src/webgl-utils/{texture-utils.js → texture-utils.ts} +13 -10
- package/src/webgl-utils/{typed-array-utils.js → typed-array-utils.ts} +59 -16
- package/src/webgl-utils/webgl-info.ts.disabled +135 -0
- package/dist/context/gl-context.d.ts +0 -15
- package/dist/context/gl-context.d.ts.map +0 -1
- package/dist/context/gl-context.js +0 -32
- package/dist/context/gl-context.js.map +0 -1
- package/dist/context/luma-context-data.d.ts +0 -31
- package/dist/context/luma-context-data.d.ts.map +0 -1
- package/dist/context/luma-context-data.js +0 -5
- package/dist/context/luma-context-data.js.map +0 -1
- package/dist/es5/context/gl-context.js +0 -46
- package/dist/es5/context/gl-context.js.map +0 -1
- package/dist/es5/context/luma-context-data.js +0 -12
- package/dist/es5/context/luma-context-data.js.map +0 -1
- package/dist/es5/features/check-glsl-extension.js +0 -40
- package/dist/es5/features/check-glsl-extension.js.map +0 -1
- package/dist/es5/features/check-old-ie.js +0 -15
- package/dist/es5/features/check-old-ie.js.map +0 -1
- package/dist/es5/features/features.js +0 -85
- package/dist/es5/features/features.js.map +0 -1
- package/dist/es5/features/index.js +0 -64
- package/dist/es5/features/index.js.map +0 -1
- package/dist/es5/features/limits.js +0 -72
- package/dist/es5/features/limits.js.map +0 -1
- package/dist/es5/features/webgl-features-table.js +0 -84
- package/dist/es5/features/webgl-features-table.js.map +0 -1
- package/dist/es5/features/webgl-limits-table.js +0 -172
- package/dist/es5/features/webgl-limits-table.js.map +0 -1
- package/dist/es5/utils/array-utils-flat.js +0 -50
- package/dist/es5/utils/array-utils-flat.js.map +0 -1
- package/dist/es5/utils/assert.js +0 -13
- package/dist/es5/utils/assert.js.map +0 -1
- package/dist/es5/utils/check-props.js +0 -50
- package/dist/es5/utils/check-props.js.map +0 -1
- package/dist/es5/utils/format-value.js +0 -57
- package/dist/es5/utils/format-value.js.map +0 -1
- package/dist/es5/utils/index.js +0 -68
- package/dist/es5/utils/index.js.map +0 -1
- package/dist/es5/utils/is-old-ie.js +0 -13
- package/dist/es5/utils/is-old-ie.js.map +0 -1
- package/dist/es5/utils/load-file.js +0 -43
- package/dist/es5/utils/load-file.js.map +0 -1
- package/dist/es5/utils/stub-methods.js +0 -25
- package/dist/es5/utils/stub-methods.js.map +0 -1
- package/dist/es5/utils/utils.js +0 -31
- package/dist/es5/utils/utils.js.map +0 -1
- package/dist/es5/webgl-utils/texture-utils.d.ts +0 -11
- package/dist/es5/webgl-utils/typed-array-utils.d.ts +0 -36
- package/dist/esm/context/gl-context.js +0 -32
- package/dist/esm/context/gl-context.js.map +0 -1
- package/dist/esm/context/luma-context-data.js +0 -5
- package/dist/esm/context/luma-context-data.js.map +0 -1
- package/dist/esm/features/check-glsl-extension.js +0 -27
- package/dist/esm/features/check-glsl-extension.js.map +0 -1
- package/dist/esm/features/check-old-ie.js.map +0 -1
- package/dist/esm/features/features.js +0 -67
- package/dist/esm/features/features.js.map +0 -1
- package/dist/esm/features/index.js +0 -5
- package/dist/esm/features/index.js.map +0 -1
- package/dist/esm/features/limits.js +0 -55
- package/dist/esm/features/limits.js.map +0 -1
- package/dist/esm/features/webgl-features-table.js +0 -71
- package/dist/esm/features/webgl-features-table.js.map +0 -1
- package/dist/esm/features/webgl-limits-table.js +0 -161
- package/dist/esm/features/webgl-limits-table.js.map +0 -1
- package/dist/esm/utils/array-utils-flat.js +0 -39
- package/dist/esm/utils/array-utils-flat.js.map +0 -1
- package/dist/esm/utils/assert.js +0 -6
- package/dist/esm/utils/assert.js.map +0 -1
- package/dist/esm/utils/check-props.js +0 -38
- package/dist/esm/utils/check-props.js.map +0 -1
- package/dist/esm/utils/format-value.js +0 -50
- package/dist/esm/utils/format-value.js.map +0 -1
- package/dist/esm/utils/index.js +0 -7
- package/dist/esm/utils/index.js.map +0 -1
- package/dist/esm/utils/is-old-ie.js +0 -5
- package/dist/esm/utils/is-old-ie.js.map +0 -1
- package/dist/esm/utils/load-file.js +0 -30
- package/dist/esm/utils/load-file.js.map +0 -1
- package/dist/esm/utils/stub-methods.js +0 -16
- package/dist/esm/utils/stub-methods.js.map +0 -1
- package/dist/esm/utils/utils.js +0 -20
- package/dist/esm/utils/utils.js.map +0 -1
- package/dist/esm/webgl-utils/texture-utils.d.ts +0 -11
- package/dist/esm/webgl-utils/typed-array-utils.d.ts +0 -36
- package/dist/features/check-glsl-extension.d.ts +0 -2
- package/dist/features/check-glsl-extension.d.ts.map +0 -1
- package/dist/features/check-glsl-extension.js +0 -27
- package/dist/features/check-glsl-extension.js.map +0 -1
- package/dist/features/check-old-ie.d.ts +0 -2
- package/dist/features/check-old-ie.d.ts.map +0 -1
- package/dist/features/check-old-ie.js.map +0 -1
- package/dist/features/features.d.ts +0 -6
- package/dist/features/features.d.ts.map +0 -1
- package/dist/features/features.js +0 -67
- package/dist/features/features.js.map +0 -1
- package/dist/features/index.d.ts +0 -5
- package/dist/features/index.d.ts.map +0 -1
- package/dist/features/index.js +0 -5
- package/dist/features/index.js.map +0 -1
- package/dist/features/limits.d.ts +0 -28
- package/dist/features/limits.d.ts.map +0 -1
- package/dist/features/limits.js +0 -55
- package/dist/features/limits.js.map +0 -1
- package/dist/features/webgl-features-table.d.ts +0 -30
- package/dist/features/webgl-features-table.d.ts.map +0 -1
- package/dist/features/webgl-features-table.js +0 -71
- package/dist/features/webgl-features-table.js.map +0 -1
- package/dist/features/webgl-limits-table.d.ts +0 -161
- package/dist/features/webgl-limits-table.d.ts.map +0 -1
- package/dist/features/webgl-limits-table.js +0 -161
- package/dist/features/webgl-limits-table.js.map +0 -1
- package/dist/utils/array-utils-flat.d.ts +0 -9
- package/dist/utils/array-utils-flat.d.ts.map +0 -1
- package/dist/utils/array-utils-flat.js +0 -39
- package/dist/utils/array-utils-flat.js.map +0 -1
- package/dist/utils/assert.d.ts +0 -2
- package/dist/utils/assert.d.ts.map +0 -1
- package/dist/utils/assert.js +0 -6
- package/dist/utils/assert.js.map +0 -1
- package/dist/utils/check-props.d.ts +0 -2
- package/dist/utils/check-props.d.ts.map +0 -1
- package/dist/utils/check-props.js +0 -38
- package/dist/utils/check-props.js.map +0 -1
- package/dist/utils/format-value.d.ts +0 -5
- package/dist/utils/format-value.d.ts.map +0 -1
- package/dist/utils/format-value.js +0 -50
- package/dist/utils/format-value.js.map +0 -1
- package/dist/utils/index.d.ts +0 -7
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -7
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/is-old-ie.d.ts +0 -4
- package/dist/utils/is-old-ie.d.ts.map +0 -1
- package/dist/utils/is-old-ie.js +0 -5
- package/dist/utils/is-old-ie.js.map +0 -1
- package/dist/utils/load-file.d.ts +0 -4
- package/dist/utils/load-file.d.ts.map +0 -1
- package/dist/utils/load-file.js +0 -30
- package/dist/utils/load-file.js.map +0 -1
- package/dist/utils/stub-methods.d.ts +0 -2
- package/dist/utils/stub-methods.d.ts.map +0 -1
- package/dist/utils/stub-methods.js +0 -16
- package/dist/utils/stub-methods.js.map +0 -1
- package/dist/utils/utils.d.ts +0 -15
- package/dist/utils/utils.d.ts.map +0 -1
- package/dist/utils/utils.js +0 -20
- package/dist/utils/utils.js.map +0 -1
- package/src/context/gl-context.ts +0 -31
- package/src/context/luma-context-data.ts +0 -27
- package/src/features/check-glsl-extension.ts +0 -34
- package/src/features/features.ts +0 -80
- package/src/features/index.ts +0 -5
- package/src/features/limits.ts +0 -66
- package/src/features/webgl-features-table.ts +0 -104
- package/src/features/webgl-limits-table.ts +0 -51
- package/src/utils/array-utils-flat.ts +0 -56
- package/src/utils/assert.ts +0 -7
- package/src/utils/check-props.ts +0 -68
- package/src/utils/format-value.ts +0 -37
- package/src/utils/index.ts +0 -6
- package/src/utils/is-old-ie.ts +0 -6
- package/src/utils/load-file.ts +0 -40
- package/src/utils/stub-methods.ts +0 -20
- package/src/utils/utils.ts +0 -35
- package/src/webgl-utils/texture-utils.d.ts +0 -11
- package/src/webgl-utils/typed-array-utils.d.ts +0 -36
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/classes/transform-feedback.ts"],"names":["GL","isWebGL2","assertWebGL2Context","log","WebGLResource","Buffer","isObjectEmpty","TransformFeedback","isSupported","gl","constructor","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","buffer","byteSize","byteOffset","_getBufferParams","warn","id","_bindBuffer","begin","primitiveMode","POINTS","bindTransformFeedback","TRANSFORM_FEEDBACK","handle","_bindBuffers","beginTransformFeedback","end","endTransformFeedback","undefined","byteLength","_getVaryingInfo","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","TRANSFORM_FEEDBACK_BUFFER","bindBufferRange","_createHandle","createTransformFeedback","_deleteHandle","deleteTransformFeedback","_bindHandle"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport Buffer from './webgl-buffer';\nimport {isObjectEmpty} from '../utils';\n\nexport type TransformFeedbackProps = ResourceProps & {\n [key: string]: any;\n};\n\nexport default class TransformFeedback extends WebGLResource<TransformFeedbackProps> {\n buffers = {};\n unused = {};\n configuration = null;\n // NOTE: The `bindOnUse` flag is a major workaround:\n // See https://github.com/KhronosGroup/WebGL/issues/2346\n bindOnUse = true;\n\n static isSupported(gl: WebGLRenderingContext): boolean {\n return isWebGL2(gl);\n }\n\n constructor(gl: WebGLRenderingContext, props: TransformFeedbackProps = {}) {\n super(gl, props, {} as any);\n assertWebGL2Context(gl);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props?: TransformFeedbackProps): this {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props: TransformFeedbackProps) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(() => `${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-ignore\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-ignore\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize?) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-ignore\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-ignore\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-ignore\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-ignore\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n"],"file":"transform-feedback.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/classes/transform-feedback.ts"],"names":["log","isObjectEmpty","GL","WebGLDevice","isWebGL2","assertWebGL2Context","WebGLResource","Buffer","TransformFeedback","isSupported","gl","constructor","props","attach","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","buffer","byteSize","byteOffset","_getBufferParams","warn","id","_bindBuffer","begin","primitiveMode","POINTS","bindTransformFeedback","TRANSFORM_FEEDBACK","handle","_bindBuffers","beginTransformFeedback","end","endTransformFeedback","undefined","byteLength","_getVaryingInfo","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","TRANSFORM_FEEDBACK_BUFFER","bindBufferRange","_createHandle","createTransformFeedback","_deleteHandle","deleteTransformFeedback","_bindHandle"],"mappings":"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","sourcesContent":["import {log, isObjectEmpty} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../device/webgl-device';\nimport {isWebGL2, assertWebGL2Context} from '../context/context/webgl-checks';\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport Buffer from './webgl-buffer';\n\nexport type TransformFeedbackProps = ResourceProps & {\n [key: string]: any;\n};\n\nexport default class TransformFeedback extends WebGLResource<TransformFeedbackProps> {\n buffers = {};\n unused = {};\n configuration = null;\n // NOTE: The `bindOnUse` flag is a major workaround:\n // See https://github.com/KhronosGroup/WebGL/issues/2346\n bindOnUse = true;\n\n static isSupported(gl: WebGLRenderingContext): boolean {\n return isWebGL2(gl);\n }\n\n constructor(gl: WebGLRenderingContext, props: TransformFeedbackProps = {}) {\n super(WebGLDevice.attach(gl), props, {} as any);\n assertWebGL2Context(gl);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props?: TransformFeedbackProps): this {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props: TransformFeedbackProps) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(`${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-expect-error\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-expect-error\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-expect-error\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-expect-error\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize?) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-expect-error\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-expect-error\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-expect-error\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-expect-error\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-expect-error\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n"],"file":"transform-feedback.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/classes/uniform-buffer-layout.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../src/classes/uniform-buffer-layout.ts"],"names":["assert","decomposeCompositeGLType","ERR_ARGUMENT","GL_FLOAT","GL_INT","GL_UNSIGNED_INT","UniformBufferLayout","constructor","layout","size","key","_addUniform","data","Float32Array","typedArray","Int32Array","buffer","Uint32Array","getBytes","getData","getSubData","index","offset","undefined","begin","offsets","end","sizes","subarray","setUniforms","values","_setValue","value","type","set","uniformType","typeAndComponents","components","count","_alignTo"],"mappings":"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","sourcesContent":["// @ts-nocheck\n\nimport {assert} from '@luma.gl/api';\nimport {decomposeCompositeGLType} from '../webgl-utils/attribute-utils';\n\nconst ERR_ARGUMENT = 'UniformBufferLayout illegal argument';\n\n// Local constants - these will \"collapse\" during minification\nconst GL_FLOAT = 0x1406;\nconst GL_INT = 0x1404;\nconst GL_UNSIGNED_INT = 0x1405;\n\n/**\n * Std140 layout for uniforms\n */\n export default class UniformBufferLayout {\n constructor(layout) {\n this.layout = {};\n this.size = 0;\n\n // Add layout (type, size and offset) definitions for each uniform in the layout\n for (const key in layout) {\n this._addUniform(key, layout[key]);\n }\n\n this.size += (4 - (this.size % 4)) % 4;\n\n // Allocate three typed arrays pointing at same memory\n const data = new Float32Array(this.size);\n this.typedArray = {\n [GL_FLOAT]: data,\n [GL_INT]: new Int32Array(data.buffer),\n [GL_UNSIGNED_INT]: new Uint32Array(data.buffer)\n };\n }\n\n // Get number of bytes needed for buffer allocation\n getBytes(): number {\n return this.size * 4;\n }\n\n // Get the current data as Float32Array, for bufferSubData\n getData() {\n return this.typedArray[GL_FLOAT];\n }\n\n // Get offset and data for one object (for bufferSubData)\n getSubData(index): {\n data: any;\n offset: any;\n } {\n let data;\n let offset;\n if (index === undefined) {\n data = this.data;\n offset = 0;\n } else {\n const begin = this.offsets[index];\n const end = begin + this.sizes[index];\n data = this.data.subarray(begin, end);\n offset = begin * 4;\n }\n return {data, offset};\n }\n\n // Set a map of values\n setUniforms(values) {\n for (const key in values) {\n this._setValue(key, values[key]);\n }\n return this;\n }\n\n _setValue(key, value) {\n const layout = this.layout[key];\n assert(layout, 'UniformLayoutStd140 illegal argument');\n const typedArray = this.typedArray[layout.type];\n if (layout.size === 1) {\n // single value -> just set it\n typedArray[layout.offset] = value;\n } else {\n // vector/matrix -> copy the supplied (typed) array, starting from offset\n typedArray.set(value, layout.offset);\n }\n }\n\n _addUniform(key, uniformType) {\n const typeAndComponents = decomposeCompositeGLType(uniformType);\n assert(typeAndComponents, ERR_ARGUMENT);\n const {type, components: count} = typeAndComponents;\n\n // First, align (bump) current offset to an even multiple of current object (1, 2, 4)\n this.size = this._alignTo(this.size, count);\n // Use the aligned size as the offset of the current uniform.\n const offset = this.size;\n // Then, add our object's padded size ((1, 2, multiple of 4) to the current offset\n this.size += count;\n\n this.layout[key] = {type, size: count, offset};\n }\n\n // Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes)\n _alignTo(size, count) {\n switch (count) {\n case 1:\n return size; // Pad upwards to even multiple of 2\n case 2:\n return size + (size % 2); // Pad upwards to even multiple of 2\n default:\n return size + ((4 - (size % 4)) % 4); // Pad upwards to even multiple of 4\n }\n }\n}\n"],"file":"uniform-buffer-layout.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniforms.d.ts","sourceRoot":"","sources":["../../src/classes/uniforms.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uniforms.d.ts","sourceRoot":"","sources":["../../src/classes/uniforms.ts"],"names":[],"mappings":"AAQA,aAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,aAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,aAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CAClB,CAAA;AAED,aAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,aAAK,WAAW,GAAG,iBAAiB,GAClC,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,CAAA;AAiJnB,qCAAqC;AACrC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,GAAG,CASpG;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAsB/F;AAMD;;;GAGG;AACF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAanG;AAEA;;GAEG;AACJ,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAe3E"}
|
package/dist/classes/uniforms.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
import { log, assert } from '@luma.gl/api';
|
|
1
2
|
import GL from '@luma.gl/constants';
|
|
2
|
-
import { log } from '@luma.gl/gltools';
|
|
3
3
|
import Framebuffer from './framebuffer';
|
|
4
4
|
import Renderbuffer from './renderbuffer';
|
|
5
5
|
import Texture from './texture';
|
|
6
|
-
import { assert } from '../utils';
|
|
7
6
|
const UNIFORM_SETTERS = {
|
|
8
7
|
[GL.FLOAT]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),
|
|
9
8
|
[GL.FLOAT_VEC2]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/classes/uniforms.ts"],"names":["GL","log","Framebuffer","Renderbuffer","Texture","assert","UNIFORM_SETTERS","FLOAT","getArraySetter","bind","toFloatArray","setVectorUniform","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","toIntArray","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","setMatrixUniform","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D","getSamplerSetter","SAMPLER_CUBE","UNSIGNED_INT","toUIntArray","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","FLOAT_ARRAY","INT_ARRAY","UINT_ARRAY","array1","getUniformSetter","gl","location","info","setter","type","Error","parseUniformName","name","length","isArray","UNIFORM_NAME_REGEXP","matches","match","Number","Boolean","checkUniformValues","uniforms","source","uniformMap","uniformName","value","shouldCheck","checkUniformValue","console","error","copyUniform","key","Array","ArrayBuffer","isView","dest","i","len","slice","checkUniformArray","isFinite","texture","checkLength","Math","min","cache","update","uniform1i","functionName","toArray","size","uniformSetter","cacheLength","arrayValue","Float32Array","set","toTypedArray","uniformLength","Type","warn","result","Int32Array","Uint32Array"],"mappings":"AAEA,OAAOA,EAAP,MAAe,oBAAf;AACA,SAAQC,GAAR,QAAkB,kBAAlB;AAGA,OAAOC,WAAP,MAAwB,eAAxB;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AACA,OAAOC,OAAP,MAAoB,WAApB;AACA,SAAQC,MAAR,QAAqB,UAArB;AA4CA,MAAMC,eAAe,GAAG;AAItB,GAACN,EAAE,CAACO,KAAJ,GAAYC,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCC,YAAxC,EAAsD,CAAtD,EAAyDC,gBAAzD,CAJU;AAKtB,GAACX,EAAE,CAACY,UAAJ,GAAiBJ,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCC,YAAxC,EAAsD,CAAtD,EAAyDC,gBAAzD,CALK;AAMtB,GAACX,EAAE,CAACa,UAAJ,GAAiBL,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCC,YAAxC,EAAsD,CAAtD,EAAyDC,gBAAzD,CANK;AAOtB,GAACX,EAAE,CAACc,UAAJ,GAAiBN,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCC,YAAxC,EAAsD,CAAtD,EAAyDC,gBAAzD,CAPK;AAStB,GAACX,EAAE,CAACe,GAAJ,GAAUP,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCO,UAAxC,EAAoD,CAApD,EAAuDL,gBAAvD,CATY;AAUtB,GAACX,EAAE,CAACiB,QAAJ,GAAeT,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCO,UAAxC,EAAoD,CAApD,EAAuDL,gBAAvD,CAVO;AAWtB,GAACX,EAAE,CAACkB,QAAJ,GAAeV,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCO,UAAxC,EAAoD,CAApD,EAAuDL,gBAAvD,CAXO;AAYtB,GAACX,EAAE,CAACmB,QAAJ,GAAeX,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCO,UAAxC,EAAoD,CAApD,EAAuDL,gBAAvD,CAZO;AActB,GAACX,EAAE,CAACoB,IAAJ,GAAWZ,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCO,UAAxC,EAAoD,CAApD,EAAuDL,gBAAvD,CAdW;AAetB,GAACX,EAAE,CAACqB,SAAJ,GAAgBb,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCO,UAAxC,EAAoD,CAApD,EAAuDL,gBAAvD,CAfM;AAgBtB,GAACX,EAAE,CAACsB,SAAJ,GAAgBd,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCO,UAAxC,EAAoD,CAApD,EAAuDL,gBAAvD,CAhBM;AAiBtB,GAACX,EAAE,CAACuB,SAAJ,GAAgBf,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,YAA1B,EAAwCO,UAAxC,EAAoD,CAApD,EAAuDL,gBAAvD,CAjBM;AAoBtB,GAACX,EAAE,CAACwB,UAAJ,GAAiBhB,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,kBAA1B,EAA8CC,YAA9C,EAA4D,CAA5D,EAA+De,gBAA/D,CApBK;AAqBtB,GAACzB,EAAE,CAAC0B,UAAJ,GAAiBlB,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,kBAA1B,EAA8CC,YAA9C,EAA4D,CAA5D,EAA+De,gBAA/D,CArBK;AAsBtB,GAACzB,EAAE,CAAC2B,UAAJ,GAAiBnB,cAAc,CAACC,IAAf,CACf,IADe,EAEf,kBAFe,EAGfC,YAHe,EAIf,EAJe,EAKfe,gBALe,CAtBK;AA8BtB,GAACzB,EAAE,CAAC4B,UAAJ,GAAiBC,gBA9BK;AA+BtB,GAAC7B,EAAE,CAAC8B,YAAJ,GAAmBD,gBA/BG;AAmCtB,GAAC7B,EAAE,CAAC+B,YAAJ,GAAmBvB,cAAc,CAACC,IAAf,CAAoB,IAApB,EAA0B,aAA1B,EAAyCuB,WAAzC,EAAsD,CAAtD,EAAyDrB,gBAAzD,CAnCG;AAoCtB,GAACX,EAAE,CAACiC,iBAAJ,GAAwBzB,cAAc,CAACC,IAAf,CACtB,IADsB,EAEtB,aAFsB,EAGtBuB,WAHsB,EAItB,CAJsB,EAKtBrB,gBALsB,CApCF;AA2CtB,GAACX,EAAE,CAACkC,iBAAJ,GAAwB1B,cAAc,CAACC,IAAf,CACtB,IADsB,EAEtB,aAFsB,EAGtBuB,WAHsB,EAItB,CAJsB,EAKtBrB,gBALsB,CA3CF;AAkDtB,GAACX,EAAE,CAACmC,iBAAJ,GAAwB3B,cAAc,CAACC,IAAf,CACtB,IADsB,EAEtB,aAFsB,EAGtBuB,WAHsB,EAItB,CAJsB,EAKtBrB,gBALsB,CAlDF;AA2DtB,GAACX,EAAE,CAACoC,YAAJ,GAAmB5B,cAAc,CAACC,IAAf,CACjB,IADiB,EAEjB,oBAFiB,EAGjBC,YAHiB,EAIjB,CAJiB,EAKjBe,gBALiB,CA3DG;AAkEtB,GAACzB,EAAE,CAACqC,YAAJ,GAAmB7B,cAAc,CAACC,IAAf,CACjB,IADiB,EAEjB,oBAFiB,EAGjBC,YAHiB,EAIjB,CAJiB,EAKjBe,gBALiB,CAlEG;AAyEtB,GAACzB,EAAE,CAACsC,YAAJ,GAAmB9B,cAAc,CAACC,IAAf,CACjB,IADiB,EAEjB,oBAFiB,EAGjBC,YAHiB,EAIjB,CAJiB,EAKjBe,gBALiB,CAzEG;AAgFtB,GAACzB,EAAE,CAACuC,YAAJ,GAAmB/B,cAAc,CAACC,IAAf,CACjB,IADiB,EAEjB,oBAFiB,EAGjBC,YAHiB,EAIjB,EAJiB,EAKjBe,gBALiB,CAhFG;AAuFtB,GAACzB,EAAE,CAACwC,YAAJ,GAAmBhC,cAAc,CAACC,IAAf,CACjB,IADiB,EAEjB,oBAFiB,EAGjBC,YAHiB,EAIjB,CAJiB,EAKjBe,gBALiB,CAvFG;AA8FtB,GAACzB,EAAE,CAACyC,YAAJ,GAAmBjC,cAAc,CAACC,IAAf,CACjB,IADiB,EAEjB,oBAFiB,EAGjBC,YAHiB,EAIjB,EAJiB,EAKjBe,gBALiB,CA9FG;AAsGtB,GAACzB,EAAE,CAAC4B,UAAJ,GAAiBC,gBAtGK;AAuGtB,GAAC7B,EAAE,CAAC8B,YAAJ,GAAmBD,gBAvGG;AAyGtB,GAAC7B,EAAE,CAAC0C,UAAJ,GAAiBb,gBAzGK;AA0GtB,GAAC7B,EAAE,CAAC2C,iBAAJ,GAAwBd,gBA1GF;AA2GtB,GAAC7B,EAAE,CAAC4C,gBAAJ,GAAuBf,gBA3GD;AA4GtB,GAAC7B,EAAE,CAAC6C,uBAAJ,GAA8BhB,gBA5GR;AA6GtB,GAAC7B,EAAE,CAAC8C,mBAAJ,GAA0BjB,gBA7GJ;AA8GtB,GAAC7B,EAAE,CAAC+C,cAAJ,GAAqBlB,gBA9GC;AA+GtB,GAAC7B,EAAE,CAACgD,cAAJ,GAAqBnB,gBA/GC;AAgHtB,GAAC7B,EAAE,CAACiD,gBAAJ,GAAuBpB,gBAhHD;AAiHtB,GAAC7B,EAAE,CAACkD,oBAAJ,GAA2BrB,gBAjHL;AAkHtB,GAAC7B,EAAE,CAACmD,uBAAJ,GAA8BtB,gBAlHR;AAmHtB,GAAC7B,EAAE,CAACoD,uBAAJ,GAA8BvB,gBAnHR;AAoHtB,GAAC7B,EAAE,CAACqD,yBAAJ,GAAgCxB,gBApHV;AAqHtB,GAAC7B,EAAE,CAACsD,6BAAJ,GAAoCzB;AArHd,CAAxB;AA0HA,MAAM0B,WAAW,GAAG,EAApB;AACA,MAAMC,SAAS,GAAG,EAAlB;AACA,MAAMC,UAAU,GAAG,EAAnB;AAEA,MAAMC,MAAM,GAAG,CAAC,CAAD,CAAf;AAKA,OAAO,SAASC,gBAAT,CAA0BC,EAA1B,EAAqDC,QAArD,EAAuEC,IAAvE,EAA+F;AACpG,QAAMC,MAAM,GAAGzD,eAAe,CAACwD,IAAI,CAACE,IAAN,CAA9B;;AACA,MAAI,CAACD,MAAL,EAAa;AACX,UAAM,IAAIE,KAAJ,qCAAuCH,IAAI,CAACE,IAA5C,EAAN;AACD;;AAID,SAAOD,MAAM,GAAGtD,IAAT,CAAc,IAAd,EAAoBmD,EAApB,EAAwBC,QAAxB,CAAP;AACD;AAED,OAAO,SAASK,gBAAT,CAA0BC,IAA1B,EAA0F;AAE/F,MAAIA,IAAI,CAACA,IAAI,CAACC,MAAL,GAAc,CAAf,CAAJ,KAA0B,GAA9B,EAAmC;AACjC,WAAO;AACLD,MAAAA,IADK;AAELC,MAAAA,MAAM,EAAE,CAFH;AAGLC,MAAAA,OAAO,EAAE;AAHJ,KAAP;AAKD;;AAGD,QAAMC,mBAAmB,GAAG,sBAA5B;AACA,QAAMC,OAAO,GAAGJ,IAAI,CAACK,KAAL,CAAWF,mBAAX,CAAhB;;AACA,MAAI,CAACC,OAAD,IAAYA,OAAO,CAACH,MAAR,GAAiB,CAAjC,EAAoC;AAClC,UAAM,IAAIH,KAAJ,6CAA+CE,IAA/C,EAAN;AACD;;AAED,SAAO;AACLA,IAAAA,IAAI,EAAEI,OAAO,CAAC,CAAD,CADR;AAELH,IAAAA,MAAM,EAAEK,MAAM,CAACF,OAAO,CAAC,CAAD,CAAR,CAAN,IAAsB,CAFzB;AAGLF,IAAAA,OAAO,EAAEK,OAAO,CAACH,OAAO,CAAC,CAAD,CAAR;AAHX,GAAP;AAKD;AAUA,OAAO,SAASI,kBAAT,CAA4BC,QAA5B,EAA8CC,MAA9C,EAA+DC,UAA/D,EAA6F;AACnG,OAAK,MAAMC,WAAX,IAA0BH,QAA1B,EAAoC;AAClC,UAAMI,KAAK,GAAGJ,QAAQ,CAACG,WAAD,CAAtB;AACA,UAAME,WAAW,GAAG,CAACH,UAAD,IAAeJ,OAAO,CAACI,UAAU,CAACC,WAAD,CAAX,CAA1C;;AACA,QAAIE,WAAW,IAAI,CAACC,iBAAiB,CAACF,KAAD,CAArC,EAA8C;AAE5CH,MAAAA,MAAM,GAAGA,MAAM,aAAMA,MAAN,SAAkB,EAAjC;AAEAM,MAAAA,OAAO,CAACC,KAAR,WAAiBP,MAAjB,0BAAuCE,WAAvC,GAAsDC,KAAtD;AAEA,YAAM,IAAIf,KAAJ,WAAaY,MAAb,0BAAmCE,WAAnC,EAAN;AACD;AACF;;AACD,SAAO,IAAP;AACD;AAKD,OAAO,SAASM,WAAT,CAAqBT,QAArB,EAAuCU,GAAvC,EAAoDN,KAApD,EAAsE;AAC3E,MAAIO,KAAK,CAAClB,OAAN,CAAcW,KAAd,KAAwBQ,WAAW,CAACC,MAAZ,CAAmBT,KAAnB,CAA5B,EAAuD;AACrD,QAAIJ,QAAQ,CAACU,GAAD,CAAZ,EAAmB;AACjB,YAAMI,IAAI,GAAGd,QAAQ,CAACU,GAAD,CAArB;;AAEA,WAAK,IAAIK,CAAC,GAAG,CAAR,EAAWC,GAAG,GAAGZ,KAAK,CAACZ,MAA5B,EAAoCuB,CAAC,GAAGC,GAAxC,EAA6C,EAAED,CAA/C,EAAkD;AAChDD,QAAAA,IAAI,CAACC,CAAD,CAAJ,GAAUX,KAAK,CAACW,CAAD,CAAf;AACD;AACF,KAND,MAMO;AAELf,MAAAA,QAAQ,CAACU,GAAD,CAAR,GAAgBN,KAAK,CAACa,KAAN,EAAhB;AACD;AACF,GAXD,MAWO;AACLjB,IAAAA,QAAQ,CAACU,GAAD,CAAR,GAAgBN,KAAhB;AACD;AACF;;AAKD,SAASE,iBAAT,CAA2BF,KAA3B,EAAkC;AAChC,MAAIO,KAAK,CAAClB,OAAN,CAAcW,KAAd,KAAwBQ,WAAW,CAACC,MAAZ,CAAmBT,KAAnB,CAA5B,EAAuD;AACrD,WAAOc,iBAAiB,CAACd,KAAD,CAAxB;AACD;;AAGD,MAAIe,QAAQ,CAACf,KAAD,CAAZ,EAAqB;AACnB,WAAO,IAAP;AACD,GAFD,MAEO,IAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,KAAhC,EAAuC;AAC5C,WAAO,IAAP;AACD,GAFM,MAEA,IAAIA,KAAK,YAAY5E,OAArB,EAA8B;AACnC,WAAO,IAAP;AACD,GAFM,MAEA,IAAI4E,KAAK,YAAY7E,YAArB,EAAmC;AACxC,WAAO,IAAP;AACD,GAFM,MAEA,IAAI6E,KAAK,YAAY9E,WAArB,EAAkC;AACvC,WAAOwE,OAAO,CAACM,KAAK,CAACgB,OAAP,CAAd;AACD;;AACD,SAAO,KAAP;AACD;;AAGD,SAASF,iBAAT,CAA2Bd,KAA3B,EAAkC;AAEhC,MAAIA,KAAK,CAACZ,MAAN,KAAiB,CAArB,EAAwB;AACtB,WAAO,KAAP;AACD;;AAED,QAAM6B,WAAW,GAAGC,IAAI,CAACC,GAAL,CAASnB,KAAK,CAACZ,MAAf,EAAuB,EAAvB,CAApB;;AAEA,OAAK,IAAIuB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGM,WAApB,EAAiC,EAAEN,CAAnC,EAAsC;AACpC,QAAI,CAAClB,MAAM,CAACsB,QAAP,CAAgBf,KAAK,CAACW,CAAD,CAArB,CAAL,EAAgC;AAC9B,aAAO,KAAP;AACD;AACF;;AAED,SAAO,IAAP;AACD;;AAKD,SAAS9D,gBAAT,GAA4B;AAC1B,MAAIuE,KAAK,GAAG,IAAZ;AACA,SAAO,CAACxC,EAAD,EAAKC,QAAL,EAAemB,KAAf,KAAyB;AAC9B,UAAMqB,MAAM,GAAGD,KAAK,KAAKpB,KAAzB;;AACA,QAAIqB,MAAJ,EAAY;AACVzC,MAAAA,EAAE,CAAC0C,SAAH,CAAazC,QAAb,EAAuBmB,KAAvB;AACAoB,MAAAA,KAAK,GAAGpB,KAAR;AACD;;AAED,WAAOqB,MAAP;AACD,GARD;AASD;;AAED,SAAS7F,cAAT,CAAwB+F,YAAxB,EAAsCC,OAAtC,EAA+CC,IAA/C,EAAqDC,aAArD,EAAoE;AAClE,MAAIN,KAAK,GAAG,IAAZ;AACA,MAAIO,WAAW,GAAG,IAAlB;AACA,SAAO,CAAC/C,EAAD,EAAKC,QAAL,EAAemB,KAAf,KAAyB;AAC9B,UAAM4B,UAAU,GAAGJ,OAAO,CAACxB,KAAD,EAAQyB,IAAR,CAA1B;AACA,UAAMrC,MAAM,GAAGwC,UAAU,CAACxC,MAA1B;AACA,QAAIiC,MAAM,GAAG,KAAb;;AACA,QAAID,KAAK,KAAK,IAAd,EAAoB;AAClBA,MAAAA,KAAK,GAAG,IAAIS,YAAJ,CAAiBzC,MAAjB,CAAR;AACAuC,MAAAA,WAAW,GAAGvC,MAAd;AACAiC,MAAAA,MAAM,GAAG,IAAT;AACD,KAJD,MAIO;AACLhG,MAAAA,MAAM,CAACsG,WAAW,KAAKvC,MAAjB,EAAyB,+BAAzB,CAAN;;AACA,WAAK,IAAIuB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvB,MAApB,EAA4B,EAAEuB,CAA9B,EAAiC;AAC/B,YAAIiB,UAAU,CAACjB,CAAD,CAAV,KAAkBS,KAAK,CAACT,CAAD,CAA3B,EAAgC;AAC9BU,UAAAA,MAAM,GAAG,IAAT;AACA;AACD;AACF;AACF;;AACD,QAAIA,MAAJ,EAAY;AACVK,MAAAA,aAAa,CAAC9C,EAAD,EAAK2C,YAAL,EAAmB1C,QAAnB,EAA6B+C,UAA7B,CAAb;AACAR,MAAAA,KAAK,CAACU,GAAN,CAAUF,UAAV;AACD;;AAED,WAAOP,MAAP;AACD,GAvBD;AAwBD;;AAED,SAAS1F,gBAAT,CAA0BiD,EAA1B,EAA8B2C,YAA9B,EAA4C1C,QAA5C,EAAsDmB,KAAtD,EAA6D;AAC3DpB,EAAAA,EAAE,CAAC2C,YAAD,CAAF,CAAiB1C,QAAjB,EAA2BmB,KAA3B;AACD;;AAED,SAASvD,gBAAT,CAA0BmC,EAA1B,EAA8B2C,YAA9B,EAA4C1C,QAA5C,EAAsDmB,KAAtD,EAA6D;AAC3DpB,EAAAA,EAAE,CAAC2C,YAAD,CAAF,CAAiB1C,QAAjB,EAA2B,KAA3B,EAAkCmB,KAAlC;AACD;;AAMD,SAAS+B,YAAT,CAAsB/B,KAAtB,EAA6BgC,aAA7B,EAA4CC,IAA5C,EAAkDb,KAAlD,EAAyD;AAEvD,MAAIY,aAAa,KAAK,CAAlB,IAAuB,OAAOhC,KAAP,KAAiB,SAA5C,EAAuD;AACrDA,IAAAA,KAAK,GAAGA,KAAK,GAAG,CAAH,GAAO,CAApB;AACD;;AACD,MAAIP,MAAM,CAACsB,QAAP,CAAgBf,KAAhB,CAAJ,EAA4B;AAC1BtB,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAYsB,KAAZ;AACAA,IAAAA,KAAK,GAAGtB,MAAR;AACD;;AACD,QAAMU,MAAM,GAAGY,KAAK,CAACZ,MAArB;;AACA,MAAIA,MAAM,GAAG4C,aAAb,EAA4B;AAC1B/G,IAAAA,GAAG,CAACiH,IAAJ,+CAAgDF,aAAhD,GAAiEhC,KAAjE;AACD;;AAED,MAAIA,KAAK,YAAYiC,IAArB,EAA2B;AACzB,WAAOjC,KAAP;AACD;;AACD,MAAImC,MAAM,GAAGf,KAAK,CAAChC,MAAD,CAAlB;;AACA,MAAI,CAAC+C,MAAL,EAAa;AACXA,IAAAA,MAAM,GAAG,IAAIF,IAAJ,CAAS7C,MAAT,CAAT;AACAgC,IAAAA,KAAK,CAAChC,MAAD,CAAL,GAAgB+C,MAAhB;AACD;;AACD,OAAK,IAAIxB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvB,MAApB,EAA4BuB,CAAC,EAA7B,EAAiC;AAC/BwB,IAAAA,MAAM,CAACxB,CAAD,CAAN,GAAYX,KAAK,CAACW,CAAD,CAAjB;AACD;;AACD,SAAOwB,MAAP;AACD;;AAED,SAASzG,YAAT,CAAsBsE,KAAtB,EAA6BgC,aAA7B,EAA4C;AAC1C,SAAOD,YAAY,CAAC/B,KAAD,EAAQgC,aAAR,EAAuBH,YAAvB,EAAqCtD,WAArC,CAAnB;AACD;;AAED,SAASvC,UAAT,CAAoBgE,KAApB,EAA2BgC,aAA3B,EAA0C;AACxC,SAAOD,YAAY,CAAC/B,KAAD,EAAQgC,aAAR,EAAuBI,UAAvB,EAAmC5D,SAAnC,CAAnB;AACD;;AAED,SAASxB,WAAT,CAAqBgD,KAArB,EAA4BgC,aAA5B,EAA2C;AACzC,SAAOD,YAAY,CAAC/B,KAAD,EAAQgC,aAAR,EAAuBK,WAAvB,EAAoC5D,UAApC,CAAnB;AACD","sourcesContent":["/** @typedef {import('./uniforms')} types */\n\nimport GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\nimport {Matrix4} from '@math.gl/core';\n\nimport Framebuffer from './framebuffer';\nimport Renderbuffer from './renderbuffer';\nimport Texture from './texture';\nimport {assert} from '../utils';\n\ntype NumberUniformInfo = {\n type: 'number'\n value: number\n min: number\n max: number\n}\n\ntype BooleanUniformInfo = {\n type: 'boolean'\n value: boolean\n}\n\ntype ArrayUniformInfo = {\n type: 'array'\n value: Array<any>\n}\n\ntype ObjectUniformInfo = {\n type: 'object'\n value: Object\n}\n\ntype UniformInfo = NumberUniformInfo |\n BooleanUniformInfo |\n ArrayUniformInfo |\n ObjectUniformInfo\n\n// https://luma.gl/docs/developer-guide/shader-modules#getuniforms\ntype UniformsOptions = {\n [uniformName: string]: UniformInfo\n}\n\ntype Uniform = UniformInfo |\n Buffer | (() => Buffer) | Framebuffer |\n Texture |\n Matrix4 | // TODO: which other math.gl classes?\n number | [number, number] | [number, number, number] | [number, number, number, number]\n\ntype Uniforms = {\n [uniformName: string]: Uniform\n}\n\nconst UNIFORM_SETTERS = {\n // WEBGL1\n\n /* eslint-disable max-len */\n [GL.FLOAT]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n [GL.FLOAT_VEC2]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n [GL.FLOAT_VEC3]: getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n [GL.FLOAT_VEC4]: getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n\n [GL.INT]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.INT_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.INT_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.INT_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n [GL.BOOL]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.BOOL_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.BOOL_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.BOOL_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2]: getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n [GL.FLOAT_MAT3]: getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n [GL.FLOAT_MAT4]: getArraySetter.bind(\n null,\n 'uniformMatrix4fv',\n toFloatArray,\n 16,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n // WEBGL2 - unsigned integers, irregular matrices, additional texture samplers\n\n [GL.UNSIGNED_INT]: getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n [GL.UNSIGNED_INT_VEC2]: getArraySetter.bind(\n null,\n 'uniform2uiv',\n toUIntArray,\n 2,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC3]: getArraySetter.bind(\n null,\n 'uniform3uiv',\n toUIntArray,\n 3,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC4]: getArraySetter.bind(\n null,\n 'uniform4uiv',\n toUIntArray,\n 4,\n setVectorUniform\n ),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2x3]: getArraySetter.bind(\n null,\n 'uniformMatrix2x3fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT2x4]: getArraySetter.bind(\n null,\n 'uniformMatrix2x4fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x2]: getArraySetter.bind(\n null,\n 'uniformMatrix3x2fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x4]: getArraySetter.bind(\n null,\n 'uniformMatrix3x4fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x2]: getArraySetter.bind(\n null,\n 'uniformMatrix4x2fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x3]: getArraySetter.bind(\n null,\n 'uniformMatrix4x3fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n [GL.SAMPLER_3D]: getSamplerSetter,\n [GL.SAMPLER_2D_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_CUBE_SHADOW]: getSamplerSetter,\n [GL.INT_SAMPLER_2D]: getSamplerSetter,\n [GL.INT_SAMPLER_3D]: getSamplerSetter,\n [GL.INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.INT_SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_3D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: getSamplerSetter\n /* eslint-enable max-len */\n};\n\n// Pre-allocated typed arrays for temporary conversion\nconst FLOAT_ARRAY = {};\nconst INT_ARRAY = {};\nconst UINT_ARRAY = {};\n\nconst array1 = [0];\n\n// PUBLIC API\n\n/** Returns a Magic Uniform Setter */\nexport function getUniformSetter(gl: WebGLRenderingContext, location: number, info: UniformInfo): any {\n const setter = UNIFORM_SETTERS[info.type];\n if (!setter) {\n throw new Error(`Unknown GLSL uniform type ${info.type}`);\n }\n\n // NOTE(Tarek): This construction is the ensure\n // separate caches for all setters.\n return setter().bind(null, gl, location);\n}\n\nexport function parseUniformName(name: string): {name: string; isArray: boolean, length: number} {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: Number(matches[2]) || 1,\n isArray: Boolean(matches[2])\n };\n}\n\n// To facilitate early detection of e.g. undefined values in JavaScript\n\n// Basic checks of uniform values (with or without knowledge of program)\n\n/**\n * Basic checks of uniform values (with or without knowledge of program)\n * To facilitate early detection of e.g. undefined values in JavaScript\n */\n export function checkUniformValues(uniforms: object, source?: string, uniformMap?: object): boolean {\n for (const uniformName in uniforms) {\n const value = uniforms[uniformName];\n const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);\n if (shouldCheck && !checkUniformValue(value)) {\n // Add space to source\n source = source ? `${source} ` : '';\n // Value could be unprintable so write the object on console\n console.error(`${source} Bad uniform ${uniformName}`, value); // eslint-disable-line\n /* eslint-enable no-console */\n throw new Error(`${source} Bad uniform ${uniformName}`);\n }\n }\n return true;\n}\n\n /**\n * Creates a copy of the uniform\n */\nexport function copyUniform(uniforms: object, key: string, value: any): void {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n if (uniforms[key]) {\n const dest = uniforms[key];\n // @ts-ignore\n for (let i = 0, len = value.length; i < len; ++i) {\n dest[i] = value[i];\n }\n } else {\n // @ts-ignore\n uniforms[key] = value.slice();\n }\n } else {\n uniforms[key] = value;\n }\n}\n\n// HELPERS\n\n// TODO use type information during validation\nfunction checkUniformValue(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return checkUniformArray(value);\n }\n\n // Check if single value is a number\n if (isFinite(value)) {\n return true;\n } else if (value === true || value === false) {\n return true;\n } else if (value instanceof Texture) {\n return true;\n } else if (value instanceof Renderbuffer) {\n return true;\n } else if (value instanceof Framebuffer) {\n return Boolean(value.texture);\n }\n return false;\n}\n\n\nfunction checkUniformArray(value) {\n // Check that every element in array is a number, and at least 1 element\n if (value.length === 0) {\n return false;\n }\n\n const checkLength = Math.min(value.length, 16);\n\n for (let i = 0; i < checkLength; ++i) {\n if (!Number.isFinite(value[i])) {\n return false;\n }\n }\n\n return true;\n}\n\n// NOTE(Tarek): Setters maintain a cache\n// of the previously set value, and\n// avoid resetting it if it's the same.\nfunction getSamplerSetter() {\n let cache = null;\n return (gl, location, value) => {\n const update = cache !== value;\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n\n return update;\n };\n}\n\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n let cache = null;\n let cacheLength = null;\n return (gl, location, value) => {\n const arrayValue = toArray(value, size);\n const length = arrayValue.length;\n let update = false;\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n } else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n for (let i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n\n return update;\n };\n}\n\nfunction setVectorUniform(gl, functionName, location, value) {\n gl[functionName](location, value);\n}\n\nfunction setMatrixUniform(gl, functionName, location, value) {\n gl[functionName](location, false, value);\n}\n\n// Functions to ensure the type of uniform values\n// This is done because uniform*v functions\n// are extremely slow when consuming JS arrays directly.\n\nfunction toTypedArray(value, uniformLength, Type, cache) {\n // convert boolean uniforms to Number\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n const length = value.length;\n if (length % uniformLength) {\n log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();\n }\n\n if (value instanceof Type) {\n return value;\n }\n let result = cache[length];\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n for (let i = 0; i < length; i++) {\n result[i] = value[i];\n }\n return result;\n}\n\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\n\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\n\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n}\n"],"file":"uniforms.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/classes/uniforms.ts"],"names":["log","assert","GL","Framebuffer","Renderbuffer","Texture","UNIFORM_SETTERS","FLOAT","getArraySetter","bind","toFloatArray","setVectorUniform","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT","toIntArray","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","setMatrixUniform","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D","getSamplerSetter","SAMPLER_CUBE","UNSIGNED_INT","toUIntArray","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","FLOAT_ARRAY","INT_ARRAY","UINT_ARRAY","array1","getUniformSetter","gl","location","info","setter","type","Error","parseUniformName","name","length","isArray","UNIFORM_NAME_REGEXP","matches","match","Number","Boolean","checkUniformValues","uniforms","source","uniformMap","uniformName","value","shouldCheck","checkUniformValue","console","error","copyUniform","key","Array","ArrayBuffer","isView","dest","i","len","slice","checkUniformArray","isFinite","texture","checkLength","Math","min","cache","update","uniform1i","functionName","toArray","size","uniformSetter","cacheLength","arrayValue","Float32Array","set","toTypedArray","uniformLength","Type","warn","result","Int32Array","Uint32Array"],"mappings":"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","sourcesContent":["import {log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {Matrix4} from '@math.gl/core';\n\nimport Framebuffer from './framebuffer';\nimport Renderbuffer from './renderbuffer';\nimport Texture from './texture';\n\ntype NumberUniformInfo = {\n type: 'number'\n value: number\n min: number\n max: number\n}\n\ntype BooleanUniformInfo = {\n type: 'boolean'\n value: boolean\n}\n\ntype ArrayUniformInfo = {\n type: 'array'\n value: Array<any>\n}\n\ntype ObjectUniformInfo = {\n type: 'object'\n value: Object\n}\n\ntype UniformInfo = NumberUniformInfo |\n BooleanUniformInfo |\n ArrayUniformInfo |\n ObjectUniformInfo\n\n// https://luma.gl/docs/developer-guide/shader-modules#getuniforms\ntype UniformsOptions = {\n [uniformName: string]: UniformInfo\n}\n\ntype Uniform = UniformInfo |\n Buffer | (() => Buffer) | Framebuffer |\n Texture |\n Matrix4 | // TODO: which other math.gl classes?\n number | [number, number] | [number, number, number] | [number, number, number, number]\n\ntype Uniforms = {\n [uniformName: string]: Uniform\n}\n\nconst UNIFORM_SETTERS = {\n // WEBGL1\n\n [GL.FLOAT]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n [GL.FLOAT_VEC2]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n [GL.FLOAT_VEC3]: getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n [GL.FLOAT_VEC4]: getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n\n [GL.INT]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.INT_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.INT_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.INT_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n [GL.BOOL]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.BOOL_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.BOOL_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.BOOL_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2]: getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n [GL.FLOAT_MAT3]: getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n [GL.FLOAT_MAT4]: getArraySetter.bind(\n null,\n 'uniformMatrix4fv',\n toFloatArray,\n 16,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n // WEBGL2 - unsigned integers, irregular matrices, additional texture samplers\n\n [GL.UNSIGNED_INT]: getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n [GL.UNSIGNED_INT_VEC2]: getArraySetter.bind(\n null,\n 'uniform2uiv',\n toUIntArray,\n 2,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC3]: getArraySetter.bind(\n null,\n 'uniform3uiv',\n toUIntArray,\n 3,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC4]: getArraySetter.bind(\n null,\n 'uniform4uiv',\n toUIntArray,\n 4,\n setVectorUniform\n ),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2x3]: getArraySetter.bind(\n null,\n 'uniformMatrix2x3fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT2x4]: getArraySetter.bind(\n null,\n 'uniformMatrix2x4fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x2]: getArraySetter.bind(\n null,\n 'uniformMatrix3x2fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x4]: getArraySetter.bind(\n null,\n 'uniformMatrix3x4fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x2]: getArraySetter.bind(\n null,\n 'uniformMatrix4x2fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x3]: getArraySetter.bind(\n null,\n 'uniformMatrix4x3fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n [GL.SAMPLER_3D]: getSamplerSetter,\n [GL.SAMPLER_2D_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_CUBE_SHADOW]: getSamplerSetter,\n [GL.INT_SAMPLER_2D]: getSamplerSetter,\n [GL.INT_SAMPLER_3D]: getSamplerSetter,\n [GL.INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.INT_SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_3D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: getSamplerSetter\n};\n\n// Pre-allocated typed arrays for temporary conversion\nconst FLOAT_ARRAY = {};\nconst INT_ARRAY = {};\nconst UINT_ARRAY = {};\n\nconst array1 = [0];\n\n// PUBLIC API\n\n/** Returns a Magic Uniform Setter */\nexport function getUniformSetter(gl: WebGLRenderingContext, location: number, info: UniformInfo): any {\n const setter = UNIFORM_SETTERS[info.type];\n if (!setter) {\n throw new Error(`Unknown GLSL uniform type ${info.type}`);\n }\n\n // NOTE(Tarek): This construction is the ensure\n // separate caches for all setters.\n return setter().bind(null, gl, location);\n}\n\nexport function parseUniformName(name: string): {name: string; isArray: boolean, length: number} {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: Number(matches[2]) || 1,\n isArray: Boolean(matches[2])\n };\n}\n\n// To facilitate early detection of e.g. undefined values in JavaScript\n\n// Basic checks of uniform values (with or without knowledge of program)\n\n/**\n * Basic checks of uniform values (with or without knowledge of program)\n * To facilitate early detection of e.g. undefined values in JavaScript\n */\n export function checkUniformValues(uniforms: object, source?: string, uniformMap?: object): boolean {\n for (const uniformName in uniforms) {\n const value = uniforms[uniformName];\n const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);\n if (shouldCheck && !checkUniformValue(value)) {\n // Add space to source\n source = source ? `${source} ` : '';\n // Value could be unprintable so write the object on console\n console.error(`${source} Bad uniform ${uniformName}`, value); // eslint-disable-line no-console\n throw new Error(`${source} Bad uniform ${uniformName}`);\n }\n }\n return true;\n}\n\n /**\n * Creates a copy of the uniform\n */\nexport function copyUniform(uniforms: object, key: string, value: any): void {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n if (uniforms[key]) {\n const dest = uniforms[key];\n // @ts-expect-error\n for (let i = 0, len = value.length; i < len; ++i) {\n dest[i] = value[i];\n }\n } else {\n // @ts-expect-error\n uniforms[key] = value.slice();\n }\n } else {\n uniforms[key] = value;\n }\n}\n\n// HELPERS\n\n// TODO use type information during validation\nfunction checkUniformValue(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return checkUniformArray(value);\n }\n\n // Check if single value is a number\n if (isFinite(value)) {\n return true;\n } else if (value === true || value === false) {\n return true;\n } else if (value instanceof Texture) {\n return true;\n } else if (value instanceof Renderbuffer) {\n return true;\n } else if (value instanceof Framebuffer) {\n return Boolean(value.texture);\n }\n return false;\n}\n\n\nfunction checkUniformArray(value) {\n // Check that every element in array is a number, and at least 1 element\n if (value.length === 0) {\n return false;\n }\n\n const checkLength = Math.min(value.length, 16);\n\n for (let i = 0; i < checkLength; ++i) {\n if (!Number.isFinite(value[i])) {\n return false;\n }\n }\n\n return true;\n}\n\n// NOTE(Tarek): Setters maintain a cache\n// of the previously set value, and\n// avoid resetting it if it's the same.\nfunction getSamplerSetter() {\n let cache = null;\n return (gl, location, value) => {\n const update = cache !== value;\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n\n return update;\n };\n}\n\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n let cache = null;\n let cacheLength = null;\n return (gl, location, value) => {\n const arrayValue = toArray(value, size);\n const length = arrayValue.length;\n let update = false;\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n } else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n for (let i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n\n return update;\n };\n}\n\nfunction setVectorUniform(gl, functionName, location, value) {\n gl[functionName](location, value);\n}\n\nfunction setMatrixUniform(gl, functionName, location, value) {\n gl[functionName](location, false, value);\n}\n\n// Functions to ensure the type of uniform values\n// This is done because uniform*v functions\n// are extremely slow when consuming JS arrays directly.\n\nfunction toTypedArray(value, uniformLength, Type, cache) {\n // convert boolean uniforms to Number\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n const length = value.length;\n if (length % uniformLength) {\n log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();\n }\n\n if (value instanceof Type) {\n return value;\n }\n let result = cache[length];\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n for (let i = 0; i < length; i++) {\n result[i] = value[i];\n }\n return result;\n}\n\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\n\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\n\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n}\n"],"file":"uniforms.js"}
|
|
@@ -13,7 +13,7 @@ export declare type VertexArrayObjectProps = ResourceProps & {
|
|
|
13
13
|
};
|
|
14
14
|
export default class VertexArrayObject extends WebGLResource<VertexArrayObjectProps> {
|
|
15
15
|
private static MAX_ATTRIBUTES;
|
|
16
|
-
static isSupported(gl: WebGLRenderingContext, options?: VertexArrayObjectProps): boolean;
|
|
16
|
+
static isSupported(gl: WebGLRenderingContext | WebGL2RenderingContext, options?: VertexArrayObjectProps): boolean;
|
|
17
17
|
/**
|
|
18
18
|
* Returns the global (null) vertex array object. Exists even when no extension available.
|
|
19
19
|
* @todo (Tarek): VAOs are now polyfilled. Deprecate this in 9.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-array-object.d.ts","sourceRoot":"","sources":["../../src/classes/vertex-array-object.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vertex-array-object.d.ts","sourceRoot":"","sources":["../../src/classes/vertex-array-object.ts"],"names":[],"mappings":"AAKA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,aAAa,EAAE,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC9D,OAAO,MAAM,MAAM,gBAAgB,CAAC;AAIpC;;;;GAIG;AACH,oBAAY,sBAAsB,GAAG,aAAa,GAAG;IACnD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,aAAa,CAAC,sBAAsB,CAAC;IAClF,OAAO,CAAC,MAAM,CAAC,cAAc,CAAS;IAEtC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,qBAAqB,GAAG,sBAAsB,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO;IASjH;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,qBAAqB,GAAG,iBAAiB;IAOpE,yDAAyD;IACzD,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM;IAO1D;;;;;;;;;;OAUG;IACH,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAgB9E,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAkB;gBAG5B,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,sBAAsB;IAWpE,MAAM,IAAI,IAAI;IAQd,IAAI,cAAc,IAAI,MAAM,CAE3B;IAID,gBAAgB,CAAC,aAAa,MAAO,EAAE,IAAI,KAAK;IAWhD,gGAAgG;IAChG,SAAS,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,EAAE,QAAQ,KAAA,GAAG,IAAI;IAgC3C;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,KAAA,EAAE,MAAM,UAAO,GAAG,IAAI;IAkBrC;;;;;OAKG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,KAAA,GAAG,MAAM;IA8BtD,8CAA8C;IAC9C,UAAU,CAAC,KAAK,CAAC,EAAE,sBAAsB,GAAG,IAAI;IAIhD,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAS7C,4BAA4B,CAAC,UAAU,KAAA;IAOvC,2BAA2B,CAAC,EAAE,KAAA,EAAE,EAAE,KAAA,GAAG,OAAO;IAY5C,MAAM,CAAC,sBAAsB,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,KAAA,EAAE,KAAK,KAAA,GAAG,IAAI;IAmB/E,MAAM,CAAC,oBAAoB,CAAC,EAAE,EAAE,sBAAsB,EAAE,QAAQ,KAAA,EAAE,KAAK,KAAA;IAoBvE,MAAM,CAAC,qBAAqB,CAAC,EAAE,EAAE,sBAAsB,EAAE,QAAQ,KAAA,EAAE,KAAK,KAAA;IAuBxE,aAAa;IAIb,aAAa,IAAI,IAAI;IAOrB,WAAW,CAAC,MAAM,KAAA,GAAG,IAAI;IAKzB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAC,QAAQ,EAAC;;KAAA;CAWxC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { assert, getScratchArray, fillArray } from '@luma.gl/api';
|
|
2
3
|
import GL from '@luma.gl/constants';
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
4
|
+
import { getBrowser } from '@probe.gl/env';
|
|
5
|
+
import WebGLDevice from '../device/webgl-device';
|
|
6
|
+
import { assertWebGL2Context, isWebGL2 } from '../context/context/webgl-checks';
|
|
5
7
|
import WebGLResource from './webgl-resource';
|
|
6
8
|
import Buffer from './webgl-buffer';
|
|
7
|
-
import { getScratchArray, fillArray } from '../utils/array-utils-flat';
|
|
8
|
-
import { assert } from '../utils';
|
|
9
|
-
import { getLumaContextData } from '../context/luma-context-data';
|
|
10
9
|
const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
|
|
11
10
|
export default class VertexArrayObject extends WebGLResource {
|
|
12
11
|
static isSupported(gl, options) {
|
|
@@ -18,12 +17,12 @@ export default class VertexArrayObject extends WebGLResource {
|
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
static getDefaultArray(gl) {
|
|
21
|
-
const
|
|
22
|
-
|
|
20
|
+
const webglDevice = WebGLDevice.fromContext(gl);
|
|
21
|
+
webglDevice.defaultVertexArray = webglDevice.defaultVertexArray || new VertexArrayObject(gl, {
|
|
23
22
|
handle: null,
|
|
24
23
|
isDefaultArray: true
|
|
25
24
|
});
|
|
26
|
-
return
|
|
25
|
+
return webglDevice.defaultVertexArray;
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
static getMaxAttributes(gl) {
|
|
@@ -54,7 +53,7 @@ export default class VertexArrayObject extends WebGLResource {
|
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
constructor(gl, opts) {
|
|
57
|
-
super(gl, { ...opts,
|
|
56
|
+
super(WebGLDevice.attach(gl), { ...opts,
|
|
58
57
|
id: (opts === null || opts === void 0 ? void 0 : opts.id) || (opts === null || opts === void 0 ? void 0 : opts.program) && (opts === null || opts === void 0 ? void 0 : opts.program.id)
|
|
59
58
|
}, {});
|
|
60
59
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/classes/vertex-array-object.ts"],"names":["GL","assertWebGL2Context","isWebGL2","getBrowser","WebGLResource","Buffer","getScratchArray","fillArray","assert","getLumaContextData","ERR_ELEMENTS","VertexArrayObject","isSupported","gl","options","constantAttributeZero","getDefaultArray","lumaContextData","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","MAX_VERTEX_ATTRIBS","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","buffer","bufferValue","Object","seal","delete","setElementBuffer","elementBuffer","target","ELEMENT_ARRAY_BUFFER","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","gl2","Number","ARRAY_BUFFER","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","initialize","props","setProps","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI4iv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","VERTEX_ATTRIB_ARRAY_POINTER","getVertexAttribOffset","getVertexAttrib"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {assertWebGL2Context, isWebGL2} from '@luma.gl/gltools';\nimport {getBrowser} from 'probe.gl';\nimport Program from './program';\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport Buffer from './webgl-buffer';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils';\nimport {getLumaContextData} from '../context/luma-context-data';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\n/**\n * VertexArrayObject properties\n * @param constantAttributeZero Attribute 0 can not be disable on most desktop OpenGL based browsers\n * and on iOS Safari browser.\n */\nexport type VertexArrayObjectProps = ResourceProps & {\n constantAttributeZero?: boolean;\n program?: Program;\n isDefaultArray?: boolean;\n};\n\nexport default class VertexArrayObject extends WebGLResource<VertexArrayObjectProps> {\n private static MAX_ATTRIBUTES: number;\n\n static isSupported(gl: WebGLRenderingContext, options?: VertexArrayObjectProps): boolean {\n if (options?.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n /**\n * Returns the global (null) vertex array object. Exists even when no extension available.\n * @todo (Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n */\n static getDefaultArray(gl: WebGLRenderingContext): VertexArrayObject {\n const lumaContextData = getLumaContextData(gl);\n lumaContextData.defaultVertexArray = lumaContextData.defaultVertexArray || \n new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n return lumaContextData.defaultVertexArray;\n }\n\n /** Get maximum number of attributes in a vertex array */\n static getMaxAttributes(gl: WebGLRenderingContext): number {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n /**\n * Set an attribute to a constant value\n * @param gl \n * @param location \n * @param array \n * \n * @note Constants are stored globally on the WebGL context, not the VAO\n * so they need to be updated before every render\n * @todo - use known type (in configuration or passed in) to allow non-typed arrays?\n * @todo - remember/cache values to avoid setting them unnecessarily?\n */\n static setConstant(gl: WebGLRenderingContext, location: any, array: any): void {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(assertWebGL2Context(gl), location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(assertWebGL2Context(gl), location, array);\n break;\n default:\n assert(false);\n }\n }\n\n private buffer: Buffer | null = null;\n private bufferValue = null;\n private isDefaultArray: boolean = false;\n\n // Create a VertexArray\n constructor(gl: WebGLRenderingContext, opts?: VertexArrayObjectProps) {\n // Use program's id if program but no id is supplied\n super(gl, {...opts, id: opts?.id || (opts?.program && opts?.program.id)}, {} as any);\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts?.isDefaultArray || false;\n\n Object.seal(this);\n }\n\n delete(): this {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES(): number {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location, buffer, accessor): this {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n /**\n * Enabling an attribute location makes it reference the currently bound buffer\n * Disabling an attribute location makes it reference the global constant value\n * TODO - handle single values for size 1 attributes?\n * TODO - convert classic arrays based on known type?\n */ \n enable(location, enable = true): this {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(() =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n /**\n * Provide a means to create a buffer that is equivalent to a constant.\n * NOTE: Desktop OpenGL cannot disable attribute 0.\n * https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n * this-has-significant-performance-penalty\n */ \n getConstantBuffer(elementCount: number, value): Buffer {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // DEPRECATED\n\n /** @deprecated this function has no effect */\n initialize(props?: VertexArrayObjectProps): this {\n return this.setProps(props);\n }\n\n /** @deprecated this function is not implemented */\n setProps(props: VertexArrayObjectProps): this {\n // TODO: decide which props should be supported\n return this;\n } \n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2): boolean {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl: WebGLRenderingContext, location, array): void {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl: WebGL2RenderingContext, location, array) {\n assert(isWebGL2(gl));\n gl.vertexAttribI4iv(location, array);\n // switch (array.length) {\n // case 1:\n // gl.vertexAttribI1iv(location, array);\n // break;\n // case 2:\n // gl.vertexAttribI2iv(location, array);\n // break;\n // case 3:\n // gl.vertexAttribI3iv(location, array);\n // break;\n // case 4:\n // break;\n // default:\n // assert(false);\n // }\n }\n\n static _setConstantUintArray(gl: WebGL2RenderingContext, location, array) {\n assert(isWebGL2(gl));\n gl.vertexAttribI4uiv(location, array);\n // switch (array.length) {\n // case 1:\n // gl.vertexAttribI1uiv(location, array);\n // break;\n // case 2:\n // gl.vertexAttribI2uiv(location, array);\n // break;\n // case 3:\n // gl.vertexAttribI3uiv(location, array);\n // break;\n // case 4:\n // gl.vertexAttribI4uiv(location, array);\n // break;\n // default:\n // assert(false);\n // }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n return this.gl2.createVertexArray();\n }\n\n _deleteHandle(): void {\n this.gl2.deleteVertexArray(this.handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle): void {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname: number, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/classes/vertex-array-object.ts"],"names":["assert","getScratchArray","fillArray","GL","getBrowser","WebGLDevice","assertWebGL2Context","isWebGL2","WebGLResource","Buffer","ERR_ELEMENTS","VertexArrayObject","isSupported","gl","options","constantAttributeZero","getDefaultArray","webglDevice","fromContext","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","MAX_VERTEX_ATTRIBS","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","attach","id","program","buffer","bufferValue","Object","seal","delete","setElementBuffer","elementBuffer","target","ELEMENT_ARRAY_BUFFER","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","gl2","Number","ARRAY_BUFFER","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","initialize","props","setProps","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI4iv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","VERTEX_ATTRIB_ARRAY_POINTER","getVertexAttribOffset","getVertexAttrib"],"mappings":"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","sourcesContent":["import {assert, getScratchArray, fillArray} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getBrowser} from '@probe.gl/env';\nimport WebGLDevice from '../device/webgl-device';\nimport {assertWebGL2Context, isWebGL2} from '../context/context/webgl-checks';\nimport Program from './program';\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport Buffer from './webgl-buffer';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\n/**\n * VertexArrayObject properties\n * @param constantAttributeZero Attribute 0 can not be disable on most desktop OpenGL based browsers\n * and on iOS Safari browser.\n */\nexport type VertexArrayObjectProps = ResourceProps & {\n constantAttributeZero?: boolean;\n program?: Program;\n isDefaultArray?: boolean;\n};\n\nexport default class VertexArrayObject extends WebGLResource<VertexArrayObjectProps> {\n private static MAX_ATTRIBUTES: number;\n\n static isSupported(gl: WebGLRenderingContext | WebGL2RenderingContext, options?: VertexArrayObjectProps): boolean {\n if (options?.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n /**\n * Returns the global (null) vertex array object. Exists even when no extension available.\n * @todo (Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n */\n static getDefaultArray(gl: WebGLRenderingContext): VertexArrayObject {\n const webglDevice = WebGLDevice.fromContext(gl);\n webglDevice.defaultVertexArray = webglDevice.defaultVertexArray || \n new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n return webglDevice.defaultVertexArray;\n }\n\n /** Get maximum number of attributes in a vertex array */\n static getMaxAttributes(gl: WebGLRenderingContext): number {\n // TODO - should be cached per context\n VertexArrayObject.MAX_ATTRIBUTES =\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n /**\n * Set an attribute to a constant value\n * @param gl \n * @param location \n * @param array \n * \n * @note Constants are stored globally on the WebGL context, not the VAO\n * so they need to be updated before every render\n * @todo - use known type (in configuration or passed in) to allow non-typed arrays?\n * @todo - remember/cache values to avoid setting them unnecessarily?\n */\n static setConstant(gl: WebGLRenderingContext, location: any, array: any): void {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(assertWebGL2Context(gl), location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(assertWebGL2Context(gl), location, array);\n break;\n default:\n assert(false);\n }\n }\n\n private buffer: Buffer | null = null;\n private bufferValue = null;\n private isDefaultArray: boolean = false;\n\n // Create a VertexArray\n constructor(gl: WebGLRenderingContext, opts?: VertexArrayObjectProps) {\n // Use program's id if program but no id is supplied\n super(WebGLDevice.attach(gl), {...opts, id: opts?.id || (opts?.program && opts?.program.id)}, {} as any);\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts?.isDefaultArray || false;\n\n Object.seal(this);\n }\n\n delete(): this {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES(): number {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location, buffer, accessor): this {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n /**\n * Enabling an attribute location makes it reference the currently bound buffer\n * Disabling an attribute location makes it reference the global constant value\n * TODO - handle single values for size 1 attributes?\n * TODO - convert classic arrays based on known type?\n */ \n enable(location, enable = true): this {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(() =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n /**\n * Provide a means to create a buffer that is equivalent to a constant.\n * NOTE: Desktop OpenGL cannot disable attribute 0.\n * https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n * this-has-significant-performance-penalty\n */ \n getConstantBuffer(elementCount: number, value): Buffer {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // DEPRECATED\n\n /** @deprecated this function has no effect */\n initialize(props?: VertexArrayObjectProps): this {\n return this.setProps(props);\n }\n\n /** @deprecated this function is not implemented */\n setProps(props: VertexArrayObjectProps): this {\n // TODO: decide which props should be supported\n return this;\n } \n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2): boolean {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl: WebGLRenderingContext, location, array): void {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl: WebGL2RenderingContext, location, array) {\n assert(isWebGL2(gl));\n gl.vertexAttribI4iv(location, array);\n // switch (array.length) {\n // case 1:\n // gl.vertexAttribI1iv(location, array);\n // break;\n // case 2:\n // gl.vertexAttribI2iv(location, array);\n // break;\n // case 3:\n // gl.vertexAttribI3iv(location, array);\n // break;\n // case 4:\n // break;\n // default:\n // assert(false);\n // }\n }\n\n static _setConstantUintArray(gl: WebGL2RenderingContext, location, array) {\n assert(isWebGL2(gl));\n gl.vertexAttribI4uiv(location, array);\n // switch (array.length) {\n // case 1:\n // gl.vertexAttribI1uiv(location, array);\n // break;\n // case 2:\n // gl.vertexAttribI2uiv(location, array);\n // break;\n // case 3:\n // gl.vertexAttribI3uiv(location, array);\n // break;\n // case 4:\n // gl.vertexAttribI4uiv(location, array);\n // break;\n // default:\n // assert(false);\n // }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n return this.gl2.createVertexArray();\n }\n\n _deleteHandle(): void {\n this.gl2.deleteVertexArray(this.handle);\n // @ts-expect-error\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle): void {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname: number, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-array.d.ts","sourceRoot":"","sources":["../../src/classes/vertex-array.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAC3D,OAAO,iBAA2C,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"vertex-array.d.ts","sourceRoot":"","sources":["../../src/classes/vertex-array.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { log, assert } from '@luma.gl/api';
|
|
2
3
|
import GL from '@luma.gl/constants';
|
|
3
|
-
import { log } from '@luma.gl/gltools';
|
|
4
4
|
import Accessor from './accessor';
|
|
5
5
|
import Buffer from './webgl-buffer';
|
|
6
6
|
import VertexArrayObject from './vertex-array-object';
|
|
7
|
-
import { assert } from '../utils';
|
|
8
7
|
const ERR_ATTRIBUTE_TYPE = 'VertexArray: attributes must be Buffers or constants (i.e. typed array)';
|
|
9
8
|
const MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;
|
|
10
9
|
export default class VertexArray {
|