@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
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
import {isOldIE} from '../webgl-utils/is-old-ie';
|
|
3
|
+
|
|
4
|
+
// Enables feature detection in IE11 due to a bug where gl.getExtension may return true
|
|
5
|
+
// but fail to compile when the extension is enabled in the shader. Specifically,
|
|
6
|
+
// the OES_standard_derivatives extension fails to compile in IE11 even though its included
|
|
7
|
+
// in the list of supported extensions.
|
|
8
|
+
// const compiledGLSLExtensions = {};
|
|
9
|
+
|
|
10
|
+
const compiledGLSLExtensions = {};
|
|
11
|
+
|
|
12
|
+
// Enables feature detection in IE11 due to a bug where gl.getExtension may return true
|
|
13
|
+
// but fail to compile when the extension is enabled in the shader. Specifically,
|
|
14
|
+
// the OES_standard_derivatives and WEBGL_draw_buffers extensions fails to compile in IE11 even though its included
|
|
15
|
+
// in the list of supported extensions.
|
|
16
|
+
// opts allows user agent to be overridden for testing
|
|
17
|
+
/*
|
|
18
|
+
* Inputs :
|
|
19
|
+
* gl : WebGL context
|
|
20
|
+
* cap : Key of WEBGL_FEATURES object identifying the extension
|
|
21
|
+
* opts :
|
|
22
|
+
* behavior : behavior of extension to be tested, by defualt `enable` is used
|
|
23
|
+
* Returns : true, if shader is compiled successfully, false otherwise
|
|
24
|
+
*/
|
|
25
|
+
export function canCompileGLSLExtension(gl: WebGLRenderingContext, extensionName, opts: {behavior?} = {}) {
|
|
26
|
+
if (!isOldIE(opts)) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (extensionName in compiledGLSLExtensions) {
|
|
31
|
+
return compiledGLSLExtensions[extensionName];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const behavior = opts.behavior || 'enable';
|
|
35
|
+
const source = `#extension GL_${extensionName} : ${behavior}\nvoid main(void) {}`;
|
|
36
|
+
|
|
37
|
+
const shader = gl.createShader(gl.VERTEX_SHADER);
|
|
38
|
+
gl.shaderSource(shader, source);
|
|
39
|
+
gl.compileShader(shader);
|
|
40
|
+
const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
|
|
41
|
+
gl.deleteShader(shader);
|
|
42
|
+
compiledGLSLExtensions[extensionName] = canCompile;
|
|
43
|
+
return canCompile;
|
|
44
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
// Feature detection for WebGL
|
|
2
|
+
// Provides a function that enables simple checking of which WebGL features are
|
|
3
|
+
// available in an WebGL1 or WebGL2 environment.
|
|
4
|
+
|
|
5
|
+
import GL from '@luma.gl/constants';
|
|
6
|
+
import {isWebGL2} from '../context/context/webgl-checks';
|
|
7
|
+
import {isOldIE} from '../webgl-utils/is-old-ie';
|
|
8
|
+
|
|
9
|
+
export type DeviceFeature =
|
|
10
|
+
'depth-clamping' |
|
|
11
|
+
'depth24unorm-stencil8' |
|
|
12
|
+
'depth32float-stencil8' |
|
|
13
|
+
'pipeline-statistics-query' |
|
|
14
|
+
'timestamp-query' |
|
|
15
|
+
'texture-compression-bc';
|
|
16
|
+
|
|
17
|
+
// TODO - this should be the default export, test cases need updating
|
|
18
|
+
export type WebGLFeature =
|
|
19
|
+
'webgl2' |
|
|
20
|
+
|
|
21
|
+
// api support (unify with WebGPU timestamp-query?)
|
|
22
|
+
'webgl-timer-query' |
|
|
23
|
+
|
|
24
|
+
// api support
|
|
25
|
+
'webgl-vertex-array-object' |
|
|
26
|
+
'webgl-instanced-rendering' |
|
|
27
|
+
'webgl-multiple-render-targets' |
|
|
28
|
+
|
|
29
|
+
// features
|
|
30
|
+
'webgl-element-index-uint32' |
|
|
31
|
+
|
|
32
|
+
// blending
|
|
33
|
+
'webgl-blend-equation-minmax' |
|
|
34
|
+
'webgl-float-blend' |
|
|
35
|
+
|
|
36
|
+
// textures | renderbuffers
|
|
37
|
+
'webgl-color-encoding-srgb' |
|
|
38
|
+
|
|
39
|
+
// textures
|
|
40
|
+
'webgl-texture-depth' |
|
|
41
|
+
'webgl-texture-float' |
|
|
42
|
+
'webgl-texture-half-float' |
|
|
43
|
+
|
|
44
|
+
'webgl-texture-filter-linear-float' |
|
|
45
|
+
'webgl-texture-filter-linear-half-float' |
|
|
46
|
+
'webgl-texture-filter-anisotropic' |
|
|
47
|
+
|
|
48
|
+
// framebuffers | textures and renderbuffers
|
|
49
|
+
'webgl-color-attachment-rgba32f' |
|
|
50
|
+
'webgl-color-attachment-float' |
|
|
51
|
+
'webgl-color-attachment-half-float' |
|
|
52
|
+
|
|
53
|
+
// glsl extensions
|
|
54
|
+
'glsl-frag-data' |
|
|
55
|
+
'glsl-frag-depth' |
|
|
56
|
+
'glsl-derivatives' |
|
|
57
|
+
'glsl-texture-lod';
|
|
58
|
+
|
|
59
|
+
/** Valid feature strings */
|
|
60
|
+
export type Feature = DeviceFeature | WebGLFeature;
|
|
61
|
+
|
|
62
|
+
/** Get WebGPU style feature strings */
|
|
63
|
+
export function getDeviceFeatures(gl: WebGLRenderingContext): Set<DeviceFeature | WebGLFeature> {
|
|
64
|
+
const features = getWebGLFeatures(gl);
|
|
65
|
+
// features.add('depth-clamping'); // GPUPrimitiveState.clampDepth
|
|
66
|
+
// features.add('depth24unorm-stencil8'); // GPUTextureFormat 'depth24unorm-stencil8'.
|
|
67
|
+
// features.add('depth32float-stencil8'); // GPUTextureFormat 'depth32float-stencil8'.
|
|
68
|
+
// features.add('pipeline-statistics-query'); // GPUQueryType "pipeline-statistics"
|
|
69
|
+
// features.add('timestamp-query'); // GPUQueryType "timestamp-query"
|
|
70
|
+
// TODO
|
|
71
|
+
// features.add('texture-compression-bc'); // GPUQueryType "timestamp"
|
|
72
|
+
// TODO
|
|
73
|
+
return features;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Extract all WebGL features */
|
|
77
|
+
export function getWebGLFeatures(gl: WebGLRenderingContext): Set<WebGLFeature> {
|
|
78
|
+
// Enable EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend
|
|
79
|
+
gl.getExtension('EXT_color_buffer_float');
|
|
80
|
+
gl.getExtension('WEBGL_color_buffer_float');
|
|
81
|
+
gl.getExtension('EXT_float_blend');
|
|
82
|
+
|
|
83
|
+
const features = new Set<WebGLFeature>();
|
|
84
|
+
for (const feature in WEBGL_FEATURES) {
|
|
85
|
+
if (isFeatureSupported(gl, feature as WebGLFeature)) {
|
|
86
|
+
features.add(feature as WebGLFeature );
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return features;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function isFeatureSupported(gl: WebGLRenderingContext, feature: WebGLFeature): boolean {
|
|
93
|
+
const [webgl1Feature, webgl2Feature] = WEBGL_FEATURES[feature];;
|
|
94
|
+
|
|
95
|
+
// Get extension name from table
|
|
96
|
+
const featureDefinition = isWebGL2(gl) ? webgl2Feature : webgl1Feature;
|
|
97
|
+
|
|
98
|
+
// Check if the value is dependent on checking one or more extensions
|
|
99
|
+
if (typeof featureDefinition === 'boolean') {
|
|
100
|
+
return featureDefinition;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
switch (feature) {
|
|
104
|
+
case 'webgl-color-attachment-rgba32f':
|
|
105
|
+
return isWebGL2(gl) ? Boolean(gl.getExtension(featureDefinition)) :
|
|
106
|
+
checkFloat32ColorAttachment(gl);
|
|
107
|
+
case 'glsl-derivatives':
|
|
108
|
+
return canCompileGLSLExtension(gl, featureDefinition); // TODO options
|
|
109
|
+
case 'glsl-frag-data':
|
|
110
|
+
return canCompileGLSLExtension(gl, featureDefinition, {behavior: 'require'}); // TODO options
|
|
111
|
+
case 'glsl-frag-depth':
|
|
112
|
+
return canCompileGLSLExtension(gl, featureDefinition); // TODO options
|
|
113
|
+
default:
|
|
114
|
+
return Boolean(gl.getExtension(featureDefinition));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
// function to test if Float 32 bit format texture can be bound as color attachment
|
|
120
|
+
function checkFloat32ColorAttachment(gl: WebGLRenderingContext): boolean {
|
|
121
|
+
let texture: WebGLTexture;
|
|
122
|
+
let framebuffer: WebGLFramebuffer;
|
|
123
|
+
try {
|
|
124
|
+
const texture = gl.createTexture();
|
|
125
|
+
gl.bindTexture(GL.TEXTURE_2D, texture);
|
|
126
|
+
|
|
127
|
+
const level = 0;
|
|
128
|
+
const internalFormat = gl.RGBA;
|
|
129
|
+
const width = 1;
|
|
130
|
+
const height = 1;
|
|
131
|
+
const border = 0;
|
|
132
|
+
const srcFormat = gl.RGBA;
|
|
133
|
+
const srcType = gl.UNSIGNED_BYTE;
|
|
134
|
+
const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue
|
|
135
|
+
gl.texImage2D(gl.TEXTURE_2D, level, internalFormat,
|
|
136
|
+
width, height, border, srcFormat, srcType,
|
|
137
|
+
pixel);
|
|
138
|
+
|
|
139
|
+
const framebuffer = gl.createFramebuffer();
|
|
140
|
+
gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);
|
|
141
|
+
gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);
|
|
142
|
+
const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) === GL.FRAMEBUFFER_COMPLETE;
|
|
143
|
+
return status;
|
|
144
|
+
} finally {
|
|
145
|
+
gl.deleteTexture(texture);
|
|
146
|
+
gl.deleteFramebuffer(framebuffer);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const compiledGLSLExtensions = {};
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* Enables feature detection in IE11 due to a bug where gl.getExtension may return true
|
|
154
|
+
* but fail to compile when the extension is enabled in the shader. Specifically,
|
|
155
|
+
* the OES_standard_derivatives and WEBGL_draw_buffers extensions fails to compile in IE11 even though its included
|
|
156
|
+
* in the list of supported extensions.
|
|
157
|
+
* opts allows user agent to be overridden for testing
|
|
158
|
+
* Inputs :
|
|
159
|
+
* gl : WebGL context
|
|
160
|
+
* cap : Key of WEBGL_FEATURES object identifying the extension
|
|
161
|
+
* opts :
|
|
162
|
+
* behavior : behavior of extension to be tested, by defualt `enable` is used
|
|
163
|
+
* Returns : true, if shader is compiled successfully, false otherwise
|
|
164
|
+
*/
|
|
165
|
+
export function canCompileGLSLExtension(gl: WebGLRenderingContext, extensionName, opts: {behavior?} = {}) {
|
|
166
|
+
if (!isOldIE(opts)) {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (extensionName in compiledGLSLExtensions) {
|
|
171
|
+
return compiledGLSLExtensions[extensionName];
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const behavior = opts.behavior || 'enable';
|
|
175
|
+
const source = `#extension GL_${extensionName} : ${behavior}\nvoid main(void) {}`;
|
|
176
|
+
|
|
177
|
+
const shader = gl.createShader(gl.VERTEX_SHADER);
|
|
178
|
+
gl.shaderSource(shader, source);
|
|
179
|
+
gl.compileShader(shader);
|
|
180
|
+
const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
|
|
181
|
+
gl.deleteShader(shader);
|
|
182
|
+
compiledGLSLExtensions[extensionName] = canCompile;
|
|
183
|
+
return canCompile;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** Defines luma.gl "feature" names and semantics
|
|
187
|
+
* Format: 'feature-name: [WebGL1 support, WebGL2 support] / [WebGL1 and WebGL2 support]', when support is 'string' it is the name of the extension
|
|
188
|
+
*/
|
|
189
|
+
const WEBGL_FEATURES: Record<WebGLFeature, [boolean | string, boolean | string]> = {
|
|
190
|
+
'webgl2': [false, true],
|
|
191
|
+
|
|
192
|
+
// API SUPPORT
|
|
193
|
+
'webgl-vertex-array-object': ['OES_vertex_array_object', true],
|
|
194
|
+
'webgl-timer-query': ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],
|
|
195
|
+
'webgl-instanced-rendering': ['ANGLE_instanced_arrays', true],
|
|
196
|
+
'webgl-multiple-render-targets': ['WEBGL_draw_buffers', true],
|
|
197
|
+
|
|
198
|
+
// FEATURES
|
|
199
|
+
'webgl-element-index-uint32': ['OES_element_index_uint', true],
|
|
200
|
+
|
|
201
|
+
// BLENDING
|
|
202
|
+
'webgl-blend-equation-minmax': ['EXT_blend_minmax', true],
|
|
203
|
+
'webgl-float-blend': ['EXT_float_blend', 'EXT_float_blend'],
|
|
204
|
+
|
|
205
|
+
// TEXTURES, RENDERBUFFERS
|
|
206
|
+
'webgl-color-encoding-srgb': ['EXT_sRGB', true],
|
|
207
|
+
|
|
208
|
+
// TEXTURES
|
|
209
|
+
'webgl-texture-depth': ['WEBGL_depth_texture', true],
|
|
210
|
+
'webgl-texture-float': ['OES_texture_float', true],
|
|
211
|
+
'webgl-texture-half-float': ['OES_texture_half_float', true],
|
|
212
|
+
|
|
213
|
+
'webgl-texture-filter-linear-float': ['OES_texture_float_linear', 'OES_texture_float_linear'],
|
|
214
|
+
'webgl-texture-filter-linear-half-float': ['OES_texture_half_float_linear', 'OES_texture_half_float_linear'],
|
|
215
|
+
'webgl-texture-filter-anisotropic': ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic'],
|
|
216
|
+
|
|
217
|
+
// FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS
|
|
218
|
+
'webgl-color-attachment-rgba32f': [false, 'EXT_color_buffer_float'], // Note override check
|
|
219
|
+
'webgl-color-attachment-float': [false, 'EXT_color_buffer_float'],
|
|
220
|
+
'webgl-color-attachment-half-float': ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float'],
|
|
221
|
+
|
|
222
|
+
// GLSL extensions
|
|
223
|
+
'glsl-frag-data': ['WEBGL_draw_buffers', true],
|
|
224
|
+
'glsl-frag-depth': ['EXT_frag_depth', true],
|
|
225
|
+
'glsl-derivatives': ['OES_standard_derivatives', true],
|
|
226
|
+
'glsl-texture-lod': ['EXT_shader_texture_lod', true]
|
|
227
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
import type {DeviceLimits} from '@luma.gl/api';
|
|
3
|
+
import GL from '@luma.gl/constants';
|
|
4
|
+
import {getWebGL2Context} from '../context/context/webgl-checks';
|
|
5
|
+
|
|
6
|
+
/** Populate a WebGPU style device limits */
|
|
7
|
+
export function getDeviceLimits(gl: WebGLRenderingContext): DeviceLimits {
|
|
8
|
+
const gl2: WebGL2RenderingContext = getWebGL2Context(gl);
|
|
9
|
+
return {
|
|
10
|
+
maxTextureDimension1D: 0, // WebGL does not support 1D textures
|
|
11
|
+
maxTextureDimension2D: gl.getParameter(GL.MAX_TEXTURE_SIZE),
|
|
12
|
+
maxTextureDimension3D: gl2 ? gl2.getParameter(GL.MAX_3D_TEXTURE_SIZE) : 0,
|
|
13
|
+
maxTextureArrayLayers: gl2 ? gl2.getParameter(GL.MAX_ARRAY_TEXTURE_LAYERS) : 0,
|
|
14
|
+
maxBindGroups: 1, // TBD
|
|
15
|
+
maxDynamicUniformBuffersPerPipelineLayout: 0, // TBD
|
|
16
|
+
maxDynamicStorageBuffersPerPipelineLayout: 0, // TBD
|
|
17
|
+
maxSampledTexturesPerShaderStage: gl.getParameter(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS), // TBD
|
|
18
|
+
maxSamplersPerShaderStage: gl.getParameter(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS),
|
|
19
|
+
maxStorageBuffersPerShaderStage: 0, // TBD
|
|
20
|
+
maxStorageTexturesPerShaderStage: 0, // TBD
|
|
21
|
+
maxUniformBuffersPerShaderStage: gl2 ? gl2.getParameter(GL.MAX_UNIFORM_BUFFER_BINDINGS) : 0,
|
|
22
|
+
maxUniformBufferBindingSize: gl2 ? gl2.getParameter(GL.MAX_UNIFORM_BLOCK_SIZE) : 0,
|
|
23
|
+
maxStorageBufferBindingSize: 0,
|
|
24
|
+
minUniformBufferOffsetAlignment: gl2 ? gl2.getParameter(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT) : 0,
|
|
25
|
+
minStorageBufferOffsetAlignment: 0, // TBD
|
|
26
|
+
maxVertexBuffers: 0,
|
|
27
|
+
maxVertexAttributes: gl.getParameter(GL.MAX_VERTEX_ATTRIBS),
|
|
28
|
+
maxVertexBufferArrayStride: 2048, // TBD, this is just the default value from WebGPU
|
|
29
|
+
maxInterStageShaderComponents: gl2 ? gl2.getParameter(GL.MAX_VARYING_COMPONENTS) : 0,
|
|
30
|
+
maxComputeWorkgroupStorageSize: 0, // WebGL does not support compute shaders
|
|
31
|
+
maxComputeInvocationsPerWorkgroup: 0, // WebGL does not support compute shaders
|
|
32
|
+
maxComputeWorkgroupSizeX: 0, // WebGL does not support compute shaders
|
|
33
|
+
maxComputeWorkgroupSizeY: 0, // WebGL does not support compute shaders
|
|
34
|
+
maxComputeWorkgroupSizeZ: 0, // WebGL does not support compute shaders
|
|
35
|
+
maxComputeWorkgroupsPerDimension: 0, // WebGL does not support compute shaders
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** WebGL context limits */
|
|
40
|
+
export type WebGLLimits = {
|
|
41
|
+
[GL.ALIASED_LINE_WIDTH_RANGE]: [number, number];
|
|
42
|
+
[GL.ALIASED_POINT_SIZE_RANGE]: [number, number];
|
|
43
|
+
[GL.MAX_TEXTURE_SIZE]: number;
|
|
44
|
+
[GL.MAX_CUBE_MAP_TEXTURE_SIZE]: number;
|
|
45
|
+
[GL.MAX_TEXTURE_IMAGE_UNITS]: number;
|
|
46
|
+
[GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS]: number;
|
|
47
|
+
[GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS]: number;
|
|
48
|
+
[GL.MAX_RENDERBUFFER_SIZE]: number;
|
|
49
|
+
[GL.MAX_VARYING_VECTORS]: number;
|
|
50
|
+
[GL.MAX_VERTEX_ATTRIBS]: number;
|
|
51
|
+
[GL.MAX_VERTEX_UNIFORM_VECTORS]: number;
|
|
52
|
+
[GL.MAX_FRAGMENT_UNIFORM_VECTORS]: number;
|
|
53
|
+
[GL.MAX_VIEWPORT_DIMS]: [number, number];
|
|
54
|
+
|
|
55
|
+
// Extensions
|
|
56
|
+
// [GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT]: number;
|
|
57
|
+
|
|
58
|
+
// WebGL2 Limits
|
|
59
|
+
[GL.MAX_3D_TEXTURE_SIZE]: number;
|
|
60
|
+
[GL.MAX_ARRAY_TEXTURE_LAYERS]: number;
|
|
61
|
+
[GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: number;
|
|
62
|
+
[GL.MAX_COLOR_ATTACHMENTS]: number;
|
|
63
|
+
[GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: number;
|
|
64
|
+
[GL.MAX_COMBINED_UNIFORM_BLOCKS]: number;
|
|
65
|
+
[GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: number;
|
|
66
|
+
[GL.MAX_DRAW_BUFFERS]: number;
|
|
67
|
+
[GL.MAX_ELEMENT_INDEX]: number;
|
|
68
|
+
[GL.MAX_ELEMENTS_INDICES]: number;
|
|
69
|
+
[GL.MAX_ELEMENTS_VERTICES]: number;
|
|
70
|
+
[GL.MAX_FRAGMENT_INPUT_COMPONENTS]: number;
|
|
71
|
+
[GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: number;
|
|
72
|
+
[GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: number;
|
|
73
|
+
[GL.MAX_SAMPLES]: number;
|
|
74
|
+
[GL.MAX_SERVER_WAIT_TIMEOUT]: number;
|
|
75
|
+
[GL.MAX_TEXTURE_LOD_BIAS]: number;
|
|
76
|
+
[GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: number;
|
|
77
|
+
[GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: number;
|
|
78
|
+
[GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: number;
|
|
79
|
+
[GL.MAX_UNIFORM_BLOCK_SIZE]: number;
|
|
80
|
+
[GL.MAX_UNIFORM_BUFFER_BINDINGS]: number;
|
|
81
|
+
[GL.MAX_VARYING_COMPONENTS]: number;
|
|
82
|
+
[GL.MAX_VERTEX_OUTPUT_COMPONENTS]: number;
|
|
83
|
+
[GL.MAX_VERTEX_UNIFORM_BLOCKS]: number;
|
|
84
|
+
[GL.MAX_VERTEX_UNIFORM_COMPONENTS]: number;
|
|
85
|
+
[GL.MIN_PROGRAM_TEXEL_OFFSET]: number;
|
|
86
|
+
[GL.MAX_PROGRAM_TEXEL_OFFSET]: number;
|
|
87
|
+
[GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: number;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
export function getWebGLLimits(gl: WebGLRenderingContext): WebGLLimits {
|
|
92
|
+
const gl2 = getWebGL2Context(gl);
|
|
93
|
+
function get<T = number>(pname: number): T {
|
|
94
|
+
return gl.getParameter(pname) as T;
|
|
95
|
+
}
|
|
96
|
+
function get2(pname: number, defaultValue?: number): number;
|
|
97
|
+
function get2<T>(pname: number, defaultValue: T): T;
|
|
98
|
+
function get2<T>(pname: number, defaultValue: T): T {
|
|
99
|
+
return gl2 ? gl2.getParameter(pname) as T : (defaultValue || 0) as T;
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
[GL.ALIASED_LINE_WIDTH_RANGE]: get(GL.ALIASED_LINE_WIDTH_RANGE),
|
|
103
|
+
[GL.ALIASED_POINT_SIZE_RANGE]: get(GL.ALIASED_POINT_SIZE_RANGE),
|
|
104
|
+
[GL.MAX_TEXTURE_SIZE]: get(GL.MAX_TEXTURE_SIZE),
|
|
105
|
+
[GL.MAX_CUBE_MAP_TEXTURE_SIZE]: get(GL.MAX_CUBE_MAP_TEXTURE_SIZE), // GLint
|
|
106
|
+
[GL.MAX_TEXTURE_IMAGE_UNITS]: get(GL.MAX_TEXTURE_IMAGE_UNITS), // GLint
|
|
107
|
+
[GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS]: get(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS), // GLint
|
|
108
|
+
[GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS]: get(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS), // GLint
|
|
109
|
+
[GL.MAX_RENDERBUFFER_SIZE]: get(GL.MAX_RENDERBUFFER_SIZE), // GLint
|
|
110
|
+
[GL.MAX_VARYING_VECTORS]: get(GL.MAX_VARYING_VECTORS), // GLint
|
|
111
|
+
[GL.MAX_VERTEX_ATTRIBS]: get(GL.MAX_VERTEX_ATTRIBS), // GLint
|
|
112
|
+
[GL.MAX_VERTEX_UNIFORM_VECTORS]: get(GL.MAX_VERTEX_UNIFORM_VECTORS), // GLint
|
|
113
|
+
[GL.MAX_FRAGMENT_UNIFORM_VECTORS]: get(GL.MAX_FRAGMENT_UNIFORM_VECTORS), // GLint
|
|
114
|
+
[GL.MAX_VIEWPORT_DIMS]: get(GL.MAX_VIEWPORT_DIMS),
|
|
115
|
+
|
|
116
|
+
// Extensions
|
|
117
|
+
// [GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT]: {gl1: 1.0, extension: 'EXT_texture_filter_anisotropic'},
|
|
118
|
+
|
|
119
|
+
// WebGL2 Limits
|
|
120
|
+
[GL.MAX_3D_TEXTURE_SIZE]: get2(GL.MAX_3D_TEXTURE_SIZE), // GLint
|
|
121
|
+
[GL.MAX_ARRAY_TEXTURE_LAYERS]: get2(GL.MAX_ARRAY_TEXTURE_LAYERS), // GLint
|
|
122
|
+
[GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: get2(GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL), // GLint64
|
|
123
|
+
[GL.MAX_COLOR_ATTACHMENTS]: get2(GL.MAX_COLOR_ATTACHMENTS), // GLint
|
|
124
|
+
[GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: get2(GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS), // GLint64
|
|
125
|
+
[GL.MAX_COMBINED_UNIFORM_BLOCKS]: get2(GL.MAX_COMBINED_UNIFORM_BLOCKS), // GLint
|
|
126
|
+
[GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: get2(GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS), // GLint64
|
|
127
|
+
[GL.MAX_DRAW_BUFFERS]: get2(GL.MAX_DRAW_BUFFERS), // GLint
|
|
128
|
+
[GL.MAX_ELEMENT_INDEX]: get2(GL.MAX_ELEMENT_INDEX), // GLint64
|
|
129
|
+
[GL.MAX_ELEMENTS_INDICES]: get2(GL.MAX_ELEMENTS_INDICES), // GLint
|
|
130
|
+
[GL.MAX_ELEMENTS_VERTICES]: get2(GL.MAX_ELEMENTS_VERTICES), // GLint
|
|
131
|
+
[GL.MAX_FRAGMENT_INPUT_COMPONENTS]: get2(GL.MAX_FRAGMENT_INPUT_COMPONENTS), // GLint
|
|
132
|
+
[GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: get2(GL.MAX_FRAGMENT_UNIFORM_BLOCKS), // GLint
|
|
133
|
+
[GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: get2(GL.MAX_FRAGMENT_UNIFORM_COMPONENTS), // GLint
|
|
134
|
+
[GL.MAX_SAMPLES]: get2(GL.MAX_SAMPLES), // GLint
|
|
135
|
+
[GL.MAX_SERVER_WAIT_TIMEOUT]: get2(GL.MAX_SERVER_WAIT_TIMEOUT), // GLint64
|
|
136
|
+
[GL.MAX_TEXTURE_LOD_BIAS]: get2(GL.MAX_TEXTURE_LOD_BIAS), // GLfloat
|
|
137
|
+
[GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: get2(GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS), // GLint
|
|
138
|
+
[GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: get2(GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS), // GLint
|
|
139
|
+
[GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: get2(GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS), // GLint
|
|
140
|
+
[GL.MAX_UNIFORM_BLOCK_SIZE]: get2(GL.MAX_UNIFORM_BLOCK_SIZE), // GLint64
|
|
141
|
+
[GL.MAX_UNIFORM_BUFFER_BINDINGS]: get2(GL.MAX_UNIFORM_BUFFER_BINDINGS), // GLint
|
|
142
|
+
[GL.MAX_VARYING_COMPONENTS]: get2(GL.MAX_VARYING_COMPONENTS), // GLint
|
|
143
|
+
[GL.MAX_VERTEX_OUTPUT_COMPONENTS]: get2(GL.MAX_VERTEX_OUTPUT_COMPONENTS), // GLint
|
|
144
|
+
[GL.MAX_VERTEX_UNIFORM_BLOCKS]: get2(GL.MAX_VERTEX_UNIFORM_BLOCKS), // GLint
|
|
145
|
+
[GL.MAX_VERTEX_UNIFORM_COMPONENTS]: get2(GL.MAX_VERTEX_UNIFORM_COMPONENTS), // GLint
|
|
146
|
+
[GL.MIN_PROGRAM_TEXEL_OFFSET]: get2(GL.MIN_PROGRAM_TEXEL_OFFSET), // GLint
|
|
147
|
+
[GL.MAX_PROGRAM_TEXEL_OFFSET]: get2(GL.MAX_PROGRAM_TEXEL_OFFSET), // GLint
|
|
148
|
+
[GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: get2(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT) // GLint
|
|
149
|
+
};
|
|
150
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {DeviceInfo} from '@luma.gl/api';
|
|
2
|
+
import GL from '@luma.gl/constants';
|
|
3
|
+
import {isWebGL2} from '../context/context/webgl-checks';
|
|
4
|
+
|
|
5
|
+
/** @returns strings identifying the GPU vendor and driver. */
|
|
6
|
+
export function getDeviceInfo(gl: WebGLRenderingContext): DeviceInfo {
|
|
7
|
+
const vendorMasked = gl.getParameter(GL.VENDOR);
|
|
8
|
+
const rendererMasked = gl.getParameter(GL.RENDERER);
|
|
9
|
+
// Get unmasked strings if available
|
|
10
|
+
// https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/
|
|
11
|
+
const ext = gl.getExtension('WEBGL_debug_renderer_info');
|
|
12
|
+
const vendorUnmasked = gl.getParameter(ext ? ext.UNMASKED_VENDOR_WEBGL : GL.VENDOR);
|
|
13
|
+
const rendererUnmasked = gl.getParameter(ext ? ext.UNMASKED_RENDERER_WEBGL : GL.RENDERER);
|
|
14
|
+
const vendor = vendorUnmasked || vendorMasked;
|
|
15
|
+
const renderer = rendererUnmasked || rendererMasked;
|
|
16
|
+
const gpuVendor = identifyGPUVendor(vendor, renderer);
|
|
17
|
+
return {
|
|
18
|
+
type: isWebGL2(gl) ? 'webgl2' : 'webgl',
|
|
19
|
+
gpuVendor,
|
|
20
|
+
vendor: vendorUnmasked || vendorMasked,
|
|
21
|
+
renderer: rendererUnmasked || rendererMasked,
|
|
22
|
+
version: gl.getParameter(GL.VERSION),
|
|
23
|
+
shadingLanguages: ['glsl'],
|
|
24
|
+
shadingLanguageVersions: {
|
|
25
|
+
'glsl': gl.getParameter(GL.SHADING_LANGUAGE_VERSION) as string
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function identifyGPUVendor(vendor: string, renderer: string): 'NVIDIA' | 'INTEL' | 'APPLE' | 'AMD' | 'UNKNOWN' {
|
|
31
|
+
if (vendor.match(/NVIDIA/i) || renderer.match(/NVIDIA/i)) {
|
|
32
|
+
return 'NVIDIA';
|
|
33
|
+
}
|
|
34
|
+
if (vendor.match(/INTEL/i) || renderer.match(/INTEL/i)) {
|
|
35
|
+
return 'INTEL';
|
|
36
|
+
}
|
|
37
|
+
if (vendor.match(/Apple/i) || renderer.match(/Apple/i)) {
|
|
38
|
+
return 'APPLE';
|
|
39
|
+
}
|
|
40
|
+
if (
|
|
41
|
+
vendor.match(/AMD/i) ||
|
|
42
|
+
renderer.match(/AMD/i) ||
|
|
43
|
+
vendor.match(/ATI/i) ||
|
|
44
|
+
renderer.match(/ATI/i)
|
|
45
|
+
) {
|
|
46
|
+
return 'AMD';
|
|
47
|
+
}
|
|
48
|
+
return 'UNKNOWN';
|
|
49
|
+
}
|