@luma.gl/webgl 8.5.9 → 8.6.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -1
- package/dist/adapter/converters/set-device-parameters.d.ts +5 -0
- package/dist/adapter/converters/set-device-parameters.d.ts.map +1 -0
- package/dist/adapter/converters/set-device-parameters.js +124 -0
- package/dist/adapter/converters/set-device-parameters.js.map +1 -0
- package/dist/adapter/converters/webgpu-texture-formats.d.ts +281 -0
- package/dist/adapter/converters/webgpu-texture-formats.d.ts.map +1 -0
- package/dist/adapter/converters/webgpu-texture-formats.js +285 -0
- package/dist/adapter/converters/webgpu-texture-formats.js.map +1 -0
- package/dist/adapter/device-helpers/device-features.d.ts +12 -0
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -0
- package/dist/adapter/device-helpers/device-features.js +123 -0
- package/dist/adapter/device-helpers/device-features.js.map +1 -0
- package/dist/adapter/device-helpers/device-limits.d.ts +51 -0
- package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -0
- package/dist/adapter/device-helpers/device-limits.js +90 -0
- package/dist/adapter/device-helpers/device-limits.js.map +1 -0
- package/dist/adapter/device-helpers/get-device-info.d.ts +4 -0
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -0
- package/dist/adapter/device-helpers/get-device-info.js +44 -0
- package/dist/adapter/device-helpers/get-device-info.js.map +1 -0
- package/dist/adapter/device-helpers/is-old-ie.d.ts +2 -0
- package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -0
- package/dist/{esm/features/check-old-ie.js → adapter/device-helpers/is-old-ie.js} +3 -3
- package/dist/adapter/device-helpers/is-old-ie.js.map +1 -0
- package/dist/adapter/webgl-device.d.ts +111 -0
- package/dist/adapter/webgl-device.d.ts.map +1 -0
- package/dist/adapter/webgl-device.js +208 -0
- package/dist/adapter/webgl-device.js.map +1 -0
- package/dist/adapter/webgl-shader.d.ts +18 -0
- package/dist/adapter/webgl-shader.d.ts.map +1 -0
- package/dist/adapter/webgl-shader.js +82 -0
- package/dist/adapter/webgl-shader.js.map +1 -0
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +5 -0
- package/dist/bundle.js.map +1 -0
- package/dist/classes/accessor.d.ts +28 -0
- package/dist/classes/accessor.d.ts.map +1 -0
- package/dist/classes/accessor.js +112 -0
- package/dist/classes/accessor.js.map +1 -0
- package/dist/classes/accessor.ts.disabled +159 -0
- package/dist/classes/clear.d.ts +17 -0
- package/dist/classes/clear.d.ts.map +1 -0
- package/{src → dist}/classes/clear.js +29 -23
- package/dist/classes/clear.js.map +1 -0
- package/dist/classes/copy-and-blit.d.ts +86 -0
- package/dist/classes/copy-and-blit.d.ts.map +1 -0
- package/dist/classes/copy-and-blit.js +338 -0
- package/dist/classes/copy-and-blit.js.map +1 -0
- package/dist/classes/framebuffer.d.ts +139 -0
- package/dist/classes/framebuffer.d.ts.map +1 -0
- package/dist/classes/framebuffer.js +656 -0
- package/dist/classes/framebuffer.js.map +1 -0
- package/dist/classes/program-configuration.d.ts +24 -0
- package/dist/classes/program-configuration.d.ts.map +1 -0
- package/dist/classes/program-configuration.js +73 -0
- package/dist/classes/program-configuration.js.map +1 -0
- package/dist/classes/program.d.ts +66 -0
- package/dist/classes/program.d.ts.map +1 -0
- package/dist/classes/program.js +379 -0
- package/dist/classes/program.js.map +1 -0
- package/dist/classes/query.d.ts +27 -0
- package/dist/classes/query.d.ts.map +1 -0
- package/dist/classes/query.js +145 -0
- package/dist/classes/query.js.map +1 -0
- package/dist/classes/renderbuffer-formats.d.ts +16 -0
- package/dist/classes/renderbuffer-formats.d.ts.map +1 -0
- package/dist/classes/renderbuffer-formats.js +185 -0
- package/dist/classes/renderbuffer-formats.js.map +1 -0
- package/dist/classes/renderbuffer.d.ts +60 -0
- package/dist/classes/renderbuffer.d.ts.map +1 -0
- package/dist/classes/renderbuffer.js +128 -0
- package/dist/classes/renderbuffer.js.map +1 -0
- package/dist/classes/shader.d.ts +42 -0
- package/dist/classes/shader.d.ts.map +1 -0
- package/dist/classes/shader.js +118 -0
- package/dist/classes/shader.js.map +1 -0
- package/dist/classes/texture-2d.d.ts +9 -0
- package/dist/classes/texture-2d.d.ts.map +1 -0
- package/dist/classes/texture-2d.js +36 -0
- package/dist/classes/texture-2d.js.map +1 -0
- package/dist/classes/texture-3d.d.ts +29 -0
- package/dist/classes/texture-3d.d.ts.map +1 -0
- package/dist/classes/texture-3d.js +76 -0
- package/dist/classes/texture-3d.js.map +1 -0
- package/dist/classes/texture-cube.d.ts +28 -0
- package/dist/classes/texture-cube.d.ts.map +1 -0
- package/dist/classes/texture-cube.js +130 -0
- package/dist/classes/texture-cube.js.map +1 -0
- package/dist/classes/texture-formats.d.ts +37 -0
- package/dist/classes/texture-formats.d.ts.map +1 -0
- package/dist/classes/texture-formats.js +98 -0
- package/dist/classes/texture-formats.js.map +1 -0
- package/dist/classes/texture.d.ts +123 -0
- package/dist/classes/texture.d.ts.map +1 -0
- package/dist/classes/texture.js +786 -0
- package/dist/classes/texture.js.map +1 -0
- package/dist/classes/transform-feedback.d.ts +33 -0
- package/dist/classes/transform-feedback.d.ts.map +1 -0
- package/dist/classes/transform-feedback.js +198 -0
- package/dist/classes/transform-feedback.js.map +1 -0
- package/dist/classes/uniform-buffer-layout.d.ts +17 -0
- package/dist/classes/uniform-buffer-layout.d.ts.map +1 -0
- package/dist/classes/uniform-buffer-layout.js +104 -0
- package/dist/classes/uniform-buffer-layout.js.map +1 -0
- package/dist/classes/uniforms.d.ts +37 -0
- package/dist/classes/uniforms.d.ts.map +1 -0
- package/dist/classes/uniforms.js +250 -0
- package/dist/classes/uniforms.js.map +1 -0
- package/dist/classes/vertex-array-object.d.ts +76 -0
- package/dist/classes/vertex-array-object.d.ts.map +1 -0
- package/dist/classes/vertex-array-object.js +261 -0
- package/dist/classes/vertex-array-object.js.map +1 -0
- package/dist/classes/vertex-array.d.ts +75 -0
- package/dist/classes/vertex-array.d.ts.map +1 -0
- package/dist/classes/vertex-array.js +408 -0
- package/dist/classes/vertex-array.js.map +1 -0
- package/dist/classes/webgl-buffer.d.ts +100 -0
- package/dist/classes/webgl-buffer.d.ts.map +1 -0
- package/dist/{esm/classes/buffer.js → classes/webgl-buffer.js} +100 -73
- package/dist/classes/webgl-buffer.js.map +1 -0
- package/dist/classes/webgl-resource.d.ts +56 -0
- package/dist/classes/webgl-resource.d.ts.map +1 -0
- package/dist/{esm/classes/resource.js → classes/webgl-resource.js} +35 -52
- package/dist/classes/webgl-resource.js.map +1 -0
- 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 +31 -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-program-configuration.d.ts +2 -0
- package/dist/debug/debug-program-configuration.d.ts.map +1 -0
- package/dist/debug/debug-program-configuration.js +40 -0
- package/dist/debug/debug-program-configuration.js.map +1 -0
- package/dist/debug/debug-uniforms.d.ts +12 -0
- package/dist/debug/debug-uniforms.d.ts.map +1 -0
- package/dist/debug/debug-uniforms.js +108 -0
- package/dist/debug/debug-uniforms.js.map +1 -0
- package/dist/debug/debug-vertex-array.d.ts +5 -0
- package/dist/debug/debug-vertex-array.d.ts.map +1 -0
- package/dist/debug/debug-vertex-array.js +118 -0
- package/dist/debug/debug-vertex-array.js.map +1 -0
- package/dist/es5/adapter/converters/set-device-parameters.js +138 -0
- package/dist/es5/adapter/converters/set-device-parameters.js.map +1 -0
- package/dist/es5/adapter/converters/webgpu-texture-formats.js +296 -0
- package/dist/es5/adapter/converters/webgpu-texture-formats.js.map +1 -0
- package/dist/es5/adapter/device-helpers/device-features.js +152 -0
- package/dist/es5/adapter/device-helpers/device-features.js.map +1 -0
- package/dist/es5/adapter/device-helpers/device-limits.js +64 -0
- package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -0
- package/dist/es5/adapter/device-helpers/get-device-info.js +55 -0
- package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -0
- package/dist/es5/{features/check-old-ie.js → adapter/device-helpers/is-old-ie.js} +3 -3
- package/dist/es5/adapter/device-helpers/is-old-ie.js.map +1 -0
- package/dist/es5/adapter/webgl-device.js +279 -0
- package/dist/es5/adapter/webgl-device.js.map +1 -0
- package/dist/es5/adapter/webgl-shader.js +155 -0
- package/dist/es5/adapter/webgl-shader.js.map +1 -0
- package/dist/es5/bundle.js +2 -4
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/classes/accessor.js +36 -38
- package/dist/es5/classes/accessor.js.map +1 -1
- package/dist/es5/classes/accessor.ts.disabled +159 -0
- package/dist/es5/classes/clear.js +17 -11
- package/dist/es5/classes/clear.js.map +1 -1
- package/dist/es5/classes/copy-and-blit.js +121 -117
- package/dist/es5/classes/copy-and-blit.js.map +1 -1
- package/dist/es5/classes/framebuffer.js +435 -423
- package/dist/es5/classes/framebuffer.js.map +1 -1
- package/dist/es5/classes/program-configuration.js +44 -108
- package/dist/es5/classes/program-configuration.js.map +1 -1
- package/dist/es5/classes/program.js +108 -85
- package/dist/es5/classes/program.js.map +1 -1
- package/dist/es5/classes/query.js +58 -59
- package/dist/es5/classes/query.js.map +1 -1
- package/dist/es5/classes/renderbuffer-formats.js +79 -52
- package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
- package/dist/es5/classes/renderbuffer.js +129 -100
- package/dist/es5/classes/renderbuffer.js.map +1 -1
- package/dist/es5/classes/shader.js +70 -96
- package/dist/es5/classes/shader.js.map +1 -1
- package/dist/es5/classes/texture-2d.js +25 -21
- package/dist/es5/classes/texture-2d.js.map +1 -1
- package/dist/es5/classes/texture-3d.js +49 -29
- package/dist/es5/classes/texture-3d.js.map +1 -1
- package/dist/es5/classes/texture-cube.js +45 -36
- package/dist/es5/classes/texture-cube.js.map +1 -1
- package/dist/es5/classes/texture-formats.js +35 -33
- package/dist/es5/classes/texture-formats.js.map +1 -1
- package/dist/es5/classes/texture.js +213 -101
- package/dist/es5/classes/texture.js.map +1 -1
- package/dist/es5/classes/transform-feedback.js +37 -34
- package/dist/es5/classes/transform-feedback.js.map +1 -1
- package/dist/es5/classes/uniform-buffer-layout.js +4 -4
- package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
- package/dist/es5/classes/uniforms.js +73 -73
- package/dist/es5/classes/uniforms.js.map +1 -1
- package/dist/es5/classes/vertex-array-object.js +106 -149
- package/dist/es5/classes/vertex-array-object.js.map +1 -1
- package/dist/es5/classes/vertex-array.js +52 -43
- package/dist/es5/classes/vertex-array.js.map +1 -1
- package/dist/es5/classes/{buffer.js → webgl-buffer.js} +120 -111
- package/dist/es5/classes/webgl-buffer.js.map +1 -0
- package/dist/es5/classes/{resource.js → webgl-resource.js} +78 -99
- package/dist/es5/classes/webgl-resource.js.map +1 -0
- 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 +1 -1
- package/dist/es5/debug/debug-program-configuration.js.map +1 -1
- package/dist/es5/debug/debug-uniforms.js +18 -20
- package/dist/es5/debug/debug-uniforms.js.map +1 -1
- package/dist/es5/debug/debug-vertex-array.js +16 -16
- package/dist/es5/debug/debug-vertex-array.js.map +1 -1
- package/dist/es5/helpers/get-program-bindings.js +274 -0
- package/dist/es5/helpers/get-program-bindings.js.map +1 -0
- package/dist/es5/helpers/program-bindings.js +2 -0
- package/dist/es5/helpers/program-bindings.js.map +1 -0
- package/dist/es5/index.js +159 -99
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/init.js +21 -41
- package/dist/es5/init.js.map +1 -1
- package/dist/es5/types/accessor.d.ts +29 -0
- package/dist/es5/types.js +2 -0
- package/dist/es5/types.js.map +1 -0
- package/dist/es5/webgl-utils/attribute-utils.js +4 -4
- package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/es5/webgl-utils/constants-to-keys.js +3 -3
- package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/es5/webgl-utils/format-utils.js +21 -17
- package/dist/es5/webgl-utils/format-utils.js.map +1 -1
- package/dist/es5/webgl-utils/get-error.js.map +1 -1
- package/dist/es5/webgl-utils/index.js +74 -0
- package/dist/es5/webgl-utils/index.js.map +1 -0
- package/dist/es5/webgl-utils/parse-shader-compiler-log.js +72 -0
- package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +1 -0
- package/dist/es5/webgl-utils/request-animation-frame.js.map +1 -1
- package/dist/es5/webgl-utils/texture-utils.js +6 -4
- package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
- package/dist/es5/webgl-utils/typed-array-utils.js +39 -34
- package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
- package/dist/esm/adapter/converters/set-device-parameters.js +124 -0
- package/dist/esm/adapter/converters/set-device-parameters.js.map +1 -0
- package/dist/esm/adapter/converters/webgpu-texture-formats.js +285 -0
- package/dist/esm/adapter/converters/webgpu-texture-formats.js.map +1 -0
- package/dist/esm/adapter/device-helpers/device-features.js +123 -0
- package/dist/esm/adapter/device-helpers/device-features.js.map +1 -0
- package/dist/esm/adapter/device-helpers/device-limits.js +90 -0
- package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -0
- package/dist/esm/adapter/device-helpers/get-device-info.js +44 -0
- package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -0
- package/dist/esm/adapter/device-helpers/is-old-ie.js +8 -0
- package/dist/esm/adapter/device-helpers/is-old-ie.js.map +1 -0
- package/dist/esm/adapter/webgl-device.js +208 -0
- package/dist/esm/adapter/webgl-device.js.map +1 -0
- package/dist/esm/adapter/webgl-shader.js +82 -0
- package/dist/esm/adapter/webgl-shader.js.map +1 -0
- package/dist/esm/bundle.js +2 -4
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/classes/accessor.js +6 -6
- package/dist/esm/classes/accessor.js.map +1 -1
- package/dist/esm/classes/accessor.ts.disabled +159 -0
- package/dist/esm/classes/clear.js +19 -14
- package/dist/esm/classes/clear.js.map +1 -1
- package/dist/esm/classes/copy-and-blit.js +67 -64
- package/dist/esm/classes/copy-and-blit.js.map +1 -1
- package/dist/esm/classes/framebuffer.js +341 -313
- package/dist/esm/classes/framebuffer.js.map +1 -1
- package/dist/esm/classes/program-configuration.js +25 -104
- package/dist/esm/classes/program-configuration.js.map +1 -1
- package/dist/esm/classes/program.js +98 -62
- package/dist/esm/classes/program.js.map +1 -1
- package/dist/esm/classes/query.js +20 -16
- package/dist/esm/classes/query.js.map +1 -1
- package/dist/esm/classes/renderbuffer-formats.js +72 -49
- package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
- package/dist/esm/classes/renderbuffer.js +86 -73
- package/dist/esm/classes/renderbuffer.js.map +1 -1
- package/dist/esm/classes/shader.js +47 -67
- package/dist/esm/classes/shader.js.map +1 -1
- package/dist/esm/classes/texture-2d.js +13 -9
- package/dist/esm/classes/texture-2d.js.map +1 -1
- package/dist/esm/classes/texture-3d.js +28 -16
- package/dist/esm/classes/texture-3d.js.map +1 -1
- package/dist/esm/classes/texture-cube.js +45 -31
- package/dist/esm/classes/texture-cube.js.map +1 -1
- package/dist/esm/classes/texture-formats.js +52 -51
- package/dist/esm/classes/texture-formats.js.map +1 -1
- package/dist/esm/classes/texture.js +174 -58
- package/dist/esm/classes/texture.js.map +1 -1
- package/dist/esm/classes/transform-feedback.js +26 -14
- 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 +111 -113
- package/dist/esm/classes/uniforms.js.map +1 -1
- package/dist/esm/classes/vertex-array-object.js +52 -89
- package/dist/esm/classes/vertex-array-object.js.map +1 -1
- package/dist/esm/classes/vertex-array.js +52 -31
- package/dist/esm/classes/vertex-array.js.map +1 -1
- package/dist/esm/classes/webgl-buffer.js +382 -0
- package/dist/esm/classes/webgl-buffer.js.map +1 -0
- package/dist/esm/classes/webgl-resource.js +212 -0
- package/dist/esm/classes/webgl-resource.js.map +1 -0
- 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-program-configuration.js +4 -4
- package/dist/esm/debug/debug-program-configuration.js.map +1 -1
- package/dist/esm/debug/debug-uniforms.js +9 -9
- package/dist/esm/debug/debug-uniforms.js.map +1 -1
- package/dist/esm/debug/debug-vertex-array.js +18 -16
- package/dist/esm/debug/debug-vertex-array.js.map +1 -1
- package/dist/esm/helpers/get-program-bindings.js +228 -0
- package/dist/esm/helpers/get-program-bindings.js.map +1 -0
- package/dist/esm/helpers/program-bindings.js +2 -0
- package/dist/esm/helpers/program-bindings.js.map +1 -0
- package/dist/esm/index.js +17 -15
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/init.js +12 -28
- package/dist/esm/init.js.map +1 -1
- package/dist/esm/types/accessor.d.ts +29 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- 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 +4 -4
- package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/esm/webgl-utils/format-utils.js +16 -15
- package/dist/esm/webgl-utils/format-utils.js.map +1 -1
- package/dist/esm/webgl-utils/get-error.js +1 -1
- package/dist/esm/webgl-utils/get-error.js.map +1 -1
- package/dist/esm/webgl-utils/index.js +5 -0
- package/dist/esm/webgl-utils/index.js.map +1 -0
- package/dist/esm/webgl-utils/parse-shader-compiler-log.js +37 -0
- package/dist/esm/webgl-utils/parse-shader-compiler-log.js.map +1 -0
- package/dist/esm/webgl-utils/request-animation-frame.js.map +1 -1
- package/dist/esm/webgl-utils/texture-utils.js +4 -3
- package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
- package/dist/esm/webgl-utils/typed-array-utils.js +41 -36
- package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
- package/dist/helpers/get-program-bindings.d.ts +8 -0
- package/dist/helpers/get-program-bindings.d.ts.map +1 -0
- package/dist/helpers/get-program-bindings.js +228 -0
- package/dist/helpers/get-program-bindings.js.map +1 -0
- package/dist/helpers/program-bindings.d.ts +41 -0
- package/dist/helpers/program-bindings.d.ts.map +1 -0
- package/dist/helpers/program-bindings.js +2 -0
- package/dist/helpers/program-bindings.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +5 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +33 -0
- package/dist/init.js.map +1 -0
- package/dist/types/accessor.d.ts +29 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/webgl-utils/attribute-utils.d.ts +18 -0
- package/dist/webgl-utils/attribute-utils.d.ts.map +1 -0
- package/dist/webgl-utils/attribute-utils.js +182 -0
- package/dist/webgl-utils/attribute-utils.js.map +1 -0
- package/dist/webgl-utils/constants-to-keys.d.ts +4 -0
- package/dist/webgl-utils/constants-to-keys.d.ts.map +1 -0
- package/dist/webgl-utils/constants-to-keys.js +41 -0
- package/dist/webgl-utils/constants-to-keys.js.map +1 -0
- package/dist/webgl-utils/format-utils.d.ts +3 -0
- package/dist/webgl-utils/format-utils.d.ts.map +1 -0
- package/dist/webgl-utils/format-utils.js +45 -0
- package/dist/webgl-utils/format-utils.js.map +1 -0
- package/dist/webgl-utils/get-error.d.ts +3 -0
- package/dist/webgl-utils/get-error.d.ts.map +1 -0
- package/dist/webgl-utils/get-error.js +41 -0
- package/dist/webgl-utils/get-error.js.map +1 -0
- package/dist/webgl-utils/index.d.ts +5 -0
- package/dist/webgl-utils/index.d.ts.map +1 -0
- package/dist/webgl-utils/index.js +5 -0
- package/dist/webgl-utils/index.js.map +1 -0
- package/dist/webgl-utils/parse-shader-compiler-log.d.ts +8 -0
- package/dist/webgl-utils/parse-shader-compiler-log.d.ts.map +1 -0
- package/dist/webgl-utils/parse-shader-compiler-log.js +37 -0
- package/dist/webgl-utils/parse-shader-compiler-log.js.map +1 -0
- package/dist/webgl-utils/request-animation-frame.d.ts +4 -0
- package/dist/webgl-utils/request-animation-frame.d.ts.map +1 -0
- package/dist/webgl-utils/request-animation-frame.js +7 -0
- package/dist/webgl-utils/request-animation-frame.js.map +1 -0
- package/dist/webgl-utils/texture-utils.d.ts +15 -0
- package/dist/webgl-utils/texture-utils.d.ts.map +1 -0
- package/dist/webgl-utils/texture-utils.js +48 -0
- package/dist/webgl-utils/texture-utils.js.map +1 -0
- package/dist/webgl-utils/typed-array-utils.d.ts +43 -0
- package/dist/webgl-utils/typed-array-utils.d.ts.map +1 -0
- package/{src → dist}/webgl-utils/typed-array-utils.js +45 -27
- package/dist/webgl-utils/typed-array-utils.js.map +1 -0
- package/package.json +9 -9
- package/src/.DS_Store +0 -0
- package/src/adapter/converters/set-device-parameters.ts +182 -0
- package/src/adapter/converters/webgpu-texture-formats.ts +167 -0
- package/src/adapter/device-helpers/device-features.ts +227 -0
- package/src/adapter/device-helpers/device-limits.ts +150 -0
- package/src/adapter/device-helpers/get-device-info.ts +49 -0
- package/src/{features/check-old-ie.js → adapter/device-helpers/is-old-ie.ts} +3 -3
- package/src/adapter/webgl-device.ts +406 -0
- package/src/adapter/webgl-shader.ts +84 -0
- package/src/bundle.ts +4 -0
- package/src/classes/accessor.js +2 -3
- package/src/classes/accessor.ts.disabled +159 -0
- package/src/classes/clear.ts +108 -0
- package/src/classes/{copy-and-blit.js → copy-and-blit.ts} +143 -55
- package/src/classes/{framebuffer.js → framebuffer.ts} +381 -321
- package/src/classes/program-configuration.ts +77 -0
- package/src/classes/{program.js → program.ts} +111 -77
- package/src/classes/{query.js → query.ts} +31 -25
- package/src/classes/{renderbuffer-formats.js → renderbuffer-formats.ts} +42 -14
- package/src/classes/renderbuffer.ts +154 -0
- package/src/classes/shader.ts +129 -0
- package/src/classes/texture-2d.ts +35 -0
- package/src/classes/{texture-3d.js → texture-3d.ts} +48 -18
- package/src/classes/{texture-cube.js → texture-cube.ts} +52 -34
- package/src/classes/{texture-formats.js → texture-formats.ts} +10 -2
- package/src/classes/{texture.js → texture.ts} +223 -57
- package/src/classes/{transform-feedback.js → transform-feedback.ts} +34 -25
- package/src/classes/{uniform-buffer-layout.js → uniform-buffer-layout.ts} +10 -6
- package/src/classes/{uniforms.js → uniforms.ts} +123 -77
- package/src/classes/{vertex-array-object.js → vertex-array-object.ts} +136 -114
- package/src/classes/{vertex-array.js → vertex-array.ts} +84 -59
- package/src/classes/{buffer.js → webgl-buffer.ts} +126 -50
- package/src/classes/{resource.js → webgl-resource.ts} +55 -46
- 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 +128 -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-program-configuration.js → debug-program-configuration.ts} +0 -0
- package/src/debug/{debug-uniforms.js → debug-uniforms.ts} +18 -8
- package/src/debug/{debug-vertex-array.js → debug-vertex-array.ts} +6 -5
- package/src/helpers/get-program-bindings.ts +244 -0
- package/src/helpers/program-bindings.ts +46 -0
- package/src/index.ts +133 -0
- package/src/{init.js → init.ts} +11 -25
- package/src/types/accessor.d.ts +29 -0
- package/src/{types.d.ts → types.ts} +1 -1
- package/src/webgl-utils/{attribute-utils.js → attribute-utils.ts} +1 -2
- package/src/webgl-utils/{constants-to-keys.js → constants-to-keys.ts} +1 -1
- package/src/webgl-utils/{format-utils.js → format-utils.ts} +1 -1
- package/src/webgl-utils/{get-error.js → get-error.ts} +0 -0
- package/src/webgl-utils/index.ts +12 -0
- package/src/webgl-utils/parse-shader-compiler-log.ts +48 -0
- package/src/webgl-utils/{request-animation-frame.js → request-animation-frame.ts} +3 -2
- package/src/webgl-utils/{texture-utils.js → texture-utils.ts} +14 -10
- package/src/webgl-utils/typed-array-utils.ts +137 -0
- package/dist/dist.js +0 -13555
- package/dist/dist.min.js +0 -1
- package/dist/es5/classes/buffer.d.ts +0 -84
- package/dist/es5/classes/buffer.js.map +0 -1
- package/dist/es5/classes/clear.d.ts +0 -11
- package/dist/es5/classes/copy-and-blit.d.ts +0 -101
- package/dist/es5/classes/framebuffer.d.ts +0 -96
- package/dist/es5/classes/program-configuration.d.ts +0 -15
- package/dist/es5/classes/program.d.ts +0 -44
- package/dist/es5/classes/query.d.ts +0 -21
- package/dist/es5/classes/renderbuffer.d.ts +0 -34
- package/dist/es5/classes/resource.d.ts +0 -47
- package/dist/es5/classes/resource.js.map +0 -1
- package/dist/es5/classes/shader.d.ts +0 -29
- package/dist/es5/classes/texture-2d.d.ts +0 -11
- package/dist/es5/classes/texture-3d.d.ts +0 -29
- package/dist/es5/classes/texture-cube.d.ts +0 -23
- package/dist/es5/classes/texture.d.ts +0 -80
- package/dist/es5/classes/transform-feedback.d.ts +0 -16
- package/dist/es5/classes/uniform-buffer-layout.d.ts +0 -18
- package/dist/es5/classes/uniforms.d.ts +0 -63
- package/dist/es5/classes/vertex-array-object.d.ts +0 -25
- package/dist/es5/classes/vertex-array.d.ts +0 -37
- package/dist/es5/debug/debug-program-configuration.d.ts +0 -1
- package/dist/es5/debug/debug-uniforms.d.ts +0 -11
- package/dist/es5/debug/debug-vertex-array.d.ts +0 -1
- package/dist/es5/features/check-glsl-extension.js +0 -41
- package/dist/es5/features/check-glsl-extension.js.map +0 -1
- package/dist/es5/features/check-old-ie.js.map +0 -1
- package/dist/es5/features/features.js +0 -99
- 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 -64
- package/dist/es5/features/limits.js.map +0 -1
- package/dist/es5/features/webgl-features-table.js +0 -64
- package/dist/es5/features/webgl-features-table.js.map +0 -1
- package/dist/es5/features/webgl-limits-table.js +0 -132
- package/dist/es5/features/webgl-limits-table.js.map +0 -1
- package/dist/es5/glsl-utils/format-glsl-error.d.ts +0 -16
- package/dist/es5/glsl-utils/format-glsl-error.js +0 -108
- package/dist/es5/glsl-utils/format-glsl-error.js.map +0 -1
- package/dist/es5/glsl-utils/get-shader-name.js +0 -14
- package/dist/es5/glsl-utils/get-shader-name.js.map +0 -1
- package/dist/es5/glsl-utils/get-shader-type-name.js +0 -22
- package/dist/es5/glsl-utils/get-shader-type-name.js.map +0 -1
- package/dist/es5/glsl-utils/get-shader-version.js +0 -22
- package/dist/es5/glsl-utils/get-shader-version.js.map +0 -1
- package/dist/es5/glsl-utils/index.js +0 -48
- package/dist/es5/glsl-utils/index.js.map +0 -1
- package/dist/es5/index.d.ts +0 -71
- package/dist/es5/init.d.ts +0 -12
- package/dist/es5/types.d.ts +0 -8
- package/dist/es5/utils/array-utils-flat.js +0 -51
- package/dist/es5/utils/array-utils-flat.js.map +0 -1
- package/dist/es5/utils/assert.d.ts +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 -51
- 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/is-old-ie.d.ts +0 -1
- package/dist/es5/utils/is-old-ie.js +0 -14
- package/dist/es5/utils/is-old-ie.js.map +0 -1
- package/dist/es5/utils/load-file.js +0 -50
- 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.d.ts +0 -13
- package/dist/es5/utils/utils.js +0 -36
- package/dist/es5/utils/utils.js.map +0 -1
- package/dist/es5/webgl-utils/request-animation-frame.d.ts +0 -3
- 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/classes/buffer.d.ts +0 -84
- package/dist/esm/classes/buffer.js.map +0 -1
- package/dist/esm/classes/clear.d.ts +0 -11
- package/dist/esm/classes/copy-and-blit.d.ts +0 -101
- package/dist/esm/classes/framebuffer.d.ts +0 -96
- package/dist/esm/classes/program-configuration.d.ts +0 -15
- package/dist/esm/classes/program.d.ts +0 -44
- package/dist/esm/classes/query.d.ts +0 -21
- package/dist/esm/classes/renderbuffer.d.ts +0 -34
- package/dist/esm/classes/resource.d.ts +0 -47
- package/dist/esm/classes/resource.js.map +0 -1
- package/dist/esm/classes/shader.d.ts +0 -29
- package/dist/esm/classes/texture-2d.d.ts +0 -11
- package/dist/esm/classes/texture-3d.d.ts +0 -29
- package/dist/esm/classes/texture-cube.d.ts +0 -23
- package/dist/esm/classes/texture.d.ts +0 -80
- package/dist/esm/classes/transform-feedback.d.ts +0 -16
- package/dist/esm/classes/uniform-buffer-layout.d.ts +0 -18
- package/dist/esm/classes/uniforms.d.ts +0 -63
- package/dist/esm/classes/vertex-array-object.d.ts +0 -25
- package/dist/esm/classes/vertex-array.d.ts +0 -37
- package/dist/esm/debug/debug-program-configuration.d.ts +0 -1
- package/dist/esm/debug/debug-uniforms.d.ts +0 -11
- package/dist/esm/debug/debug-vertex-array.d.ts +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 -66
- 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 -52
- 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 -160
- package/dist/esm/features/webgl-limits-table.js.map +0 -1
- package/dist/esm/glsl-utils/format-glsl-error.d.ts +0 -16
- package/dist/esm/glsl-utils/format-glsl-error.js +0 -93
- package/dist/esm/glsl-utils/format-glsl-error.js.map +0 -1
- package/dist/esm/glsl-utils/get-shader-name.js +0 -6
- package/dist/esm/glsl-utils/get-shader-name.js.map +0 -1
- package/dist/esm/glsl-utils/get-shader-type-name.js +0 -15
- package/dist/esm/glsl-utils/get-shader-type-name.js.map +0 -1
- package/dist/esm/glsl-utils/get-shader-version.js +0 -15
- package/dist/esm/glsl-utils/get-shader-version.js.map +0 -1
- package/dist/esm/glsl-utils/index.js +0 -5
- package/dist/esm/glsl-utils/index.js.map +0 -1
- package/dist/esm/index.d.ts +0 -71
- package/dist/esm/init.d.ts +0 -12
- package/dist/esm/types.d.ts +0 -8
- 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.d.ts +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/is-old-ie.d.ts +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 -17
- package/dist/esm/utils/stub-methods.js.map +0 -1
- package/dist/esm/utils/utils.d.ts +0 -13
- package/dist/esm/utils/utils.js +0 -22
- package/dist/esm/utils/utils.js.map +0 -1
- package/dist/esm/webgl-utils/request-animation-frame.d.ts +0 -3
- package/dist/esm/webgl-utils/texture-utils.d.ts +0 -11
- package/dist/esm/webgl-utils/typed-array-utils.d.ts +0 -36
- package/src/bundle.js +0 -8
- package/src/classes/buffer.d.ts +0 -84
- package/src/classes/clear.d.ts +0 -11
- package/src/classes/copy-and-blit.d.ts +0 -101
- package/src/classes/framebuffer.d.ts +0 -96
- package/src/classes/program-configuration.d.ts +0 -15
- package/src/classes/program-configuration.js +0 -123
- package/src/classes/program.d.ts +0 -44
- package/src/classes/query.d.ts +0 -21
- package/src/classes/renderbuffer.d.ts +0 -34
- package/src/classes/renderbuffer.js +0 -105
- package/src/classes/resource.d.ts +0 -47
- package/src/classes/shader.d.ts +0 -29
- package/src/classes/shader.js +0 -147
- package/src/classes/texture-2d.d.ts +0 -11
- package/src/classes/texture-2d.js +0 -30
- package/src/classes/texture-3d.d.ts +0 -29
- package/src/classes/texture-cube.d.ts +0 -23
- package/src/classes/texture.d.ts +0 -80
- package/src/classes/transform-feedback.d.ts +0 -16
- package/src/classes/uniform-buffer-layout.d.ts +0 -18
- package/src/classes/uniforms.d.ts +0 -63
- package/src/classes/vertex-array-object.d.ts +0 -25
- package/src/classes/vertex-array.d.ts +0 -37
- package/src/debug/debug-program-configuration.d.ts +0 -1
- package/src/debug/debug-uniforms.d.ts +0 -11
- package/src/debug/debug-vertex-array.d.ts +0 -1
- package/src/features/check-glsl-extension.js +0 -34
- package/src/features/features.js +0 -79
- package/src/features/index.js +0 -5
- package/src/features/limits.js +0 -65
- package/src/features/webgl-features-table.js +0 -104
- package/src/features/webgl-limits-table.js +0 -51
- package/src/glsl-utils/format-glsl-error.d.ts +0 -16
- package/src/glsl-utils/format-glsl-error.js +0 -107
- package/src/glsl-utils/get-shader-name.js +0 -7
- package/src/glsl-utils/get-shader-type-name.js +0 -13
- package/src/glsl-utils/get-shader-version.js +0 -12
- package/src/glsl-utils/index.js +0 -8
- package/src/index.d.ts +0 -71
- package/src/index.js +0 -70
- package/src/init.d.ts +0 -12
- package/src/utils/array-utils-flat.js +0 -56
- package/src/utils/assert.d.ts +0 -1
- package/src/utils/assert.js +0 -7
- package/src/utils/check-props.js +0 -68
- package/src/utils/format-value.js +0 -37
- package/src/utils/is-old-ie.d.ts +0 -1
- package/src/utils/is-old-ie.js +0 -6
- package/src/utils/load-file.js +0 -39
- package/src/utils/stub-methods.js +0 -20
- package/src/utils/utils.d.ts +0 -13
- package/src/utils/utils.js +0 -36
- package/src/webgl-utils/request-animation-frame.d.ts +0 -3
- 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/framebuffer.js"],"names":["getWebGL2Context","assertWebGL2Context","log","Resource","Texture2D","Renderbuffer","clear","clearBuffer","copyToDataUrl","getFeatures","getKey","assert","ERR_MULTIPLE_RENDERTARGETS","Framebuffer","isSupported","gl","options","colorBufferFloat","colorBufferHalfFloat","supported","Boolean","getExtension","getDefaultFramebuffer","luma","defaultFramebuffer","id","handle","attachments","MAX_COLOR_ATTACHMENTS","gl2","getParameter","MAX_DRAW_BUFFERS","constructor","opts","width","height","readBuffer","drawBuffers","ownResources","initialize","Object","seal","color","texture","depth","stencil","check","undefined","attachment","target","object","Array","isArray","resize","_createDefaultAttachments","update","clearAttachments","checkStatus","delete","resource","resizeAttachments","attach","prevHandle","bindFramebuffer","_setReadBuffer","_setDrawBuffers","drawingBufferWidth","drawingBufferHeight","attachmentPoint","newAttachments","keys","forEach","key","assign","Number","descriptor","_unattach","_attachRenderbuffer","renderbuffer","layer","level","_attachTexture","filter","status","getStatus","Error","_getFrameBufferStatus","checkFramebufferStatus","value","drawBuffer","readPixels","error","readPixelsToBuffer","copyToImage","copyToTexture","blit","invalidate","x","y","invalidateAll","invalidateFramebuffer","getAttachmentParameter","pname","_getAttachmentParameterFallback","getFramebufferAttachmentParameter","getAttachmentParameters","parameters","ATTACHMENT_PARAMETERS","values","getParameters","attachmentName","show","window","open","logLevel","message","image","targetMaxHeight","bind","unbind","defaultAttachments","pixels","format","type","mipmaps","push","oldAttachment","framebufferRenderbuffer","framebufferTexture2D","bindTexture","framebufferTextureLayer","face","mapIndexToCubeMapFace","ext","drawBuffersWEBGL","length","caps","WEBGL2","EXT_sRGB","_createHandle","createFramebuffer","_deleteHandle","deleteFramebuffer","_bindHandle","STATUS","FRAMEBUFFER_ATTACHMENT_PARAMETERS"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {getWebGL2Context, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Texture2D from './texture-2d';\nimport Renderbuffer from './renderbuffer';\nimport {clear, clearBuffer} from './clear';\nimport {copyToDataUrl} from './copy-and-blit.js';\n\nimport {getFeatures} from '../features';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport {assert} from '../utils/assert';\n\nconst ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';\n\nexport default class Framebuffer extends Resource {\n static isSupported(gl, options = {}) {\n const {\n colorBufferFloat, // Whether floating point textures can be rendered and read\n colorBufferHalfFloat // Whether half float textures can be rendered and read\n } = options;\n let supported = true;\n\n if (colorBufferFloat) {\n supported = Boolean(\n // WebGL 2\n gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1, not exposed on all platforms\n gl.getExtension('WEBGL_color_buffer_float') ||\n // WebGL 1, implicitly enables float render targets https://www.khronos.org/registry/webgl/extensions/OES_texture_float/\n gl.getExtension('OES_texture_float')\n );\n }\n\n if (colorBufferHalfFloat) {\n supported =\n supported &&\n Boolean(\n // WebGL 2\n gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1\n gl.getExtension('EXT_color_buffer_half_float')\n );\n }\n\n return supported;\n }\n\n // Create a Framebuffer wrapper for the default framebuffer (target === null)\n static getDefaultFramebuffer(gl) {\n gl.luma = gl.luma || {};\n gl.luma.defaultFramebuffer =\n gl.luma.defaultFramebuffer ||\n new Framebuffer(gl, {\n id: 'default-framebuffer',\n handle: null,\n attachments: {}\n });\n // TODO - can we query for and get a handle to the GL.FRONT renderbuffer?\n return gl.luma.defaultFramebuffer;\n }\n\n get MAX_COLOR_ATTACHMENTS() {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);\n }\n\n get MAX_DRAW_BUFFERS() {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_DRAW_BUFFERS);\n }\n\n constructor(gl, opts = {}) {\n super(gl, opts);\n\n // Public members\n this.width = null;\n this.height = null;\n this.attachments = {};\n this.readBuffer = GL.COLOR_ATTACHMENT0;\n this.drawBuffers = [GL.COLOR_ATTACHMENT0];\n this.ownResources = [];\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n get color() {\n return this.attachments[GL.COLOR_ATTACHMENT0] || null;\n }\n\n get texture() {\n return this.attachments[GL.COLOR_ATTACHMENT0] || null;\n }\n\n get depth() {\n return (\n this.attachments[GL.DEPTH_ATTACHMENT] || this.attachments[GL.DEPTH_STENCIL_ATTACHMENT] || null\n );\n }\n\n get stencil() {\n return (\n this.attachments[GL.STENCIL_ATTACHMENT] ||\n this.attachments[GL.DEPTH_STENCIL_ATTACHMENT] ||\n null\n );\n }\n\n initialize({\n width = 1,\n height = 1,\n attachments = null,\n color = true,\n depth = true,\n stencil = false,\n check = true,\n readBuffer = undefined,\n drawBuffers = undefined\n }) {\n assert(width >= 0 && height >= 0, 'Width and height need to be integers');\n\n // Store actual width and height for diffing\n this.width = width;\n this.height = height;\n\n // Resize any provided attachments - note that resize only resizes if needed\n // Note: A framebuffer has no separate size, it is defined by its attachments (which must agree)\n if (attachments) {\n for (const attachment in attachments) {\n const target = attachments[attachment];\n const object = Array.isArray(target) ? target[0] : target;\n object.resize({width, height});\n }\n } else {\n // Create any requested default attachments\n attachments = this._createDefaultAttachments(color, depth, stencil, width, height);\n }\n\n this.update({clearAttachments: true, attachments, readBuffer, drawBuffers});\n\n // Checks that framebuffer was properly set up, if not, throws an explanatory error\n if (attachments && check) {\n this.checkStatus();\n }\n }\n\n delete() {\n for (const resource of this.ownResources) {\n resource.delete();\n }\n super.delete();\n return this;\n }\n\n update({\n attachments = {},\n readBuffer,\n drawBuffers,\n clearAttachments = false,\n resizeAttachments = true\n }) {\n this.attach(attachments, {clearAttachments, resizeAttachments});\n\n const {gl} = this;\n // Multiple render target support, set read buffer and draw buffers\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n if (readBuffer) {\n this._setReadBuffer(readBuffer);\n }\n if (drawBuffers) {\n this._setDrawBuffers(drawBuffers);\n }\n // @ts-ignore\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n // Attachment resize is expected to be a noop if size is same\n resize(options = {}) {\n let {width, height} = options;\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n if (width !== this.width && height !== this.height) {\n log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();\n }\n for (const attachmentPoint in this.attachments) {\n this.attachments[attachmentPoint].resize({width, height});\n }\n this.width = width;\n this.height = height;\n return this;\n }\n\n // Attach from a map of attachments\n attach(attachments, {clearAttachments = false, resizeAttachments = true} = {}) {\n const newAttachments = {};\n\n // Any current attachments need to be removed, add null values to map\n if (clearAttachments) {\n Object.keys(this.attachments).forEach(key => {\n newAttachments[key] = null;\n });\n }\n\n // Overlay the new attachments\n Object.assign(newAttachments, attachments);\n\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (const key in newAttachments) {\n // Ensure key is not undefined\n assert(key !== undefined, 'Misspelled framebuffer binding point?');\n\n const attachment = Number(key);\n\n const descriptor = newAttachments[attachment];\n let object = descriptor;\n if (!object) {\n this._unattach(attachment);\n } else if (object instanceof Renderbuffer) {\n this._attachRenderbuffer({attachment, renderbuffer: object});\n } else if (Array.isArray(descriptor)) {\n const [texture, layer = 0, level = 0] = descriptor;\n object = texture;\n this._attachTexture({attachment, texture, layer, level});\n } else {\n this._attachTexture({attachment, texture: object, layer: 0, level: 0});\n }\n\n // Resize objects\n if (resizeAttachments && object) {\n object.resize({width: this.width, height: this.height});\n }\n }\n\n // @ts-ignore\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // Assign to attachments and remove any nulls to get a clean attachment map\n Object.assign(this.attachments, attachments);\n Object.keys(this.attachments)\n .filter(key => !this.attachments[key])\n .forEach(key => {\n delete this.attachments[key];\n });\n }\n\n checkStatus() {\n const {gl} = this;\n const status = this.getStatus();\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(_getFrameBufferStatus(status));\n }\n return this;\n }\n\n getStatus() {\n const {gl} = this;\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n // @ts-ignore\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n return status;\n }\n\n clear(options = {}) {\n const {color, depth, stencil, drawBuffers = []} = options;\n\n // Bind framebuffer and delegate to global clear functions\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n if (color || depth || stencil) {\n clear(this.gl, {color, depth, stencil});\n }\n\n drawBuffers.forEach((value, drawBuffer) => {\n clearBuffer(this.gl, {drawBuffer, value});\n });\n\n // @ts-ignore\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n // NOTE: Slow requires roundtrip to GPU\n // App can provide pixelArray or have it auto allocated by this method\n // @returns {Uint8Array|Uint16Array|FloatArray} - pixel array,\n // newly allocated by this method unless provided by app.\n readPixels(opts = {}) {\n log.error(\n 'Framebuffer.readPixels() is no logner supported, use readPixelsToArray(framebuffer)'\n )();\n return null;\n }\n\n // Reads data into provided buffer object asynchronously\n // This function doesn't wait for copy to be complete, it programs GPU to perform a DMA transffer.\n readPixelsToBuffer(opts = {}) {\n log.error(\n 'Framebuffer.readPixelsToBuffer()is no logner supported, use readPixelsToBuffer(framebuffer)'\n )();\n return null;\n }\n\n // Reads pixels as a dataUrl\n copyToDataUrl(opts = {}) {\n log.error(\n 'Framebuffer.copyToDataUrl() is no logner supported, use copyToDataUrl(framebuffer)'\n )();\n return null;\n }\n\n // Reads pixels into an HTML Image\n copyToImage(opts = {}) {\n log.error('Framebuffer.copyToImage() is no logner supported, use copyToImage(framebuffer)')();\n return null;\n }\n\n // copyToFramebuffer({width, height}) {\n // const scaleX = width / this.width;\n // const scaleY = height / this.height;\n // const scale = Math.min(scaleX, scaleY);\n // width = width * scale;\n // height = height * scale;\n // const scaledFramebuffer = new Framebuffer(this.gl, {width, height});\n // this.blit();\n // }\n\n // Copy a rectangle from a framebuffer attachment into a texture (at an offset)\n // NOTE: assumes texture has enough storage allocated\n // eslint-disable-next-line complexity\n copyToTexture(opts = {}) {\n log.error(\n 'Framebuffer.copyToTexture({...}) is no logner supported, use copyToTexture(source, target, opts})'\n )();\n return null;\n }\n\n // WEBGL2 INTERFACE\n\n // Copies a rectangle of pixels between framebuffers\n // eslint-disable-next-line complexity\n blit(opts = {}) {\n log.error('Framebuffer.blit({...}) is no logner supported, use blit(source, target, opts)')();\n return null;\n }\n\n // signals to the GL that it need not preserve all pixels of a specified region of the framebuffer\n invalidate({attachments = [], x = 0, y = 0, width, height}) {\n const gl2 = assertWebGL2Context(this.gl);\n const prevHandle = gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, this.handle);\n const invalidateAll = x === 0 && y === 0 && width === undefined && height === undefined;\n if (invalidateAll) {\n gl2.invalidateFramebuffer(GL.READ_FRAMEBUFFER, attachments);\n } else {\n // TODO - why does type checking fail on this line\n // @ts-ignore\n gl2.invalidateFramebuffer(GL.READ_FRAMEBUFFER, attachments, x, y, width, height);\n }\n // @ts-ignore\n gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, prevHandle);\n return this;\n }\n\n // Return the value for `pname` of the specified attachment.\n // The type returned is the type of the requested pname\n getAttachmentParameter(attachment, pname, keys) {\n let value = this._getAttachmentParameterFallback(pname);\n if (value === null) {\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n value = this.gl.getFramebufferAttachmentParameter(GL.FRAMEBUFFER, attachment, pname);\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);\n }\n if (keys && value > 1000) {\n // @ts-ignore\n value = getKey(this.gl, value);\n }\n return value;\n }\n\n getAttachmentParameters(\n attachment = GL.COLOR_ATTACHMENT0,\n keys,\n // @ts-ignore\n parameters = this.constructor.ATTACHMENT_PARAMETERS || []\n ) {\n const values = {};\n for (const pname of parameters) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getAttachmentParameter(attachment, pname, keys);\n }\n return values;\n }\n\n getParameters(keys = true) {\n const attachments = Object.keys(this.attachments);\n // if (this === this.gl.luma.defaultFramebuffer) {\n // attachments = [GL.COLOR_ATTACHMENT0, GL.DEPTH_STENCIL_ATTACHMENT];\n // }\n const parameters = {};\n for (const attachmentName of attachments) {\n const attachment = Number(attachmentName);\n const key = keys ? getKey(this.gl, attachment) : attachment;\n parameters[key] = this.getAttachmentParameters(attachment, keys);\n }\n return parameters;\n }\n\n // DEBUG\n\n // Note: Will only work when called in an event handler\n show() {\n if (typeof window !== 'undefined') {\n window.open(copyToDataUrl(this), 'luma-debug-texture');\n }\n return this;\n }\n\n log(logLevel = 0, message = '') {\n if (logLevel > log.level || typeof window === 'undefined') {\n return this;\n }\n message = message || `Framebuffer ${this.id}`;\n const image = copyToDataUrl(this, {targetMaxHeight: 100});\n log.image({logLevel, message, image}, message)();\n return this;\n }\n\n // WEBGL INTERFACE\n bind({target = GL.FRAMEBUFFER} = {}) {\n this.gl.bindFramebuffer(target, this.handle);\n return this;\n }\n\n unbind({target = GL.FRAMEBUFFER} = {}) {\n this.gl.bindFramebuffer(target, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _createDefaultAttachments(color, depth, stencil, width, height) {\n let defaultAttachments = null;\n\n // Add a color buffer if requested and not supplied\n if (color) {\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.COLOR_ATTACHMENT0] = new Texture2D(this.gl, {\n id: `${this.id}-color0`,\n pixels: null, // reserves texture memory, but texels are undefined\n format: GL.RGBA,\n type: GL.UNSIGNED_BYTE,\n width,\n height,\n // Note: Mipmapping can be disabled by texture resource when we resize the texture\n // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant\n // behavior we always disable mipmaps.\n mipmaps: false,\n // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.\n // Use LINEAR so subpixel algos like fxaa work.\n // Set WRAP modes that support NPOT textures too.\n parameters: {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n }\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.COLOR_ATTACHMENT0]);\n }\n\n if (depth && stencil) {\n // TODO - handle separate stencil\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.DEPTH_STENCIL_ATTACHMENT] = new Renderbuffer(this.gl, {\n id: `${this.id}-depth-stencil`,\n format: GL.DEPTH24_STENCIL8,\n width,\n height: 111\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.DEPTH_STENCIL_ATTACHMENT]);\n // TODO - optional texture\n // new Texture2D(this.gl, {\n // id: `${this.id}-depth-stencil`,\n // format: GL.DEPTH24_STENCIL8,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n // width,\n // height,\n // mipmaps: false\n // });\n } else if (depth) {\n // Add a depth buffer if requested and not supplied\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.DEPTH_ATTACHMENT] = new Renderbuffer(this.gl, {\n id: `${this.id}-depth`,\n format: GL.DEPTH_COMPONENT16,\n width,\n height\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.DEPTH_ATTACHMENT]);\n } else if (stencil) {\n // TODO - handle separate stencil\n assert(false);\n }\n\n return defaultAttachments;\n }\n\n _unattach(attachment) {\n const oldAttachment = this.attachments[attachment];\n if (!oldAttachment) {\n return;\n }\n if (oldAttachment instanceof Renderbuffer) {\n // render buffer\n this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, null);\n } else {\n // Must be a texture attachment\n this.gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, null, 0);\n }\n delete this.attachments[attachment];\n }\n\n _attachRenderbuffer({attachment = GL.COLOR_ATTACHMENT0, renderbuffer}) {\n const {gl} = this;\n // TODO - is the bind needed?\n // gl.bindRenderbuffer(GL.RENDERBUFFER, renderbuffer.handle);\n gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);\n // TODO - is the unbind needed?\n // gl.bindRenderbuffer(GL.RENDERBUFFER, null);\n\n this.attachments[attachment] = renderbuffer;\n }\n\n // layer = 0 - index into Texture2DArray and Texture3D or face for `TextureCubeMap`\n // level = 0 - mipmapLevel (must be 0 in WebGL1)\n _attachTexture({attachment = GL.COLOR_ATTACHMENT0, texture, layer, level}) {\n const {gl} = this;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n const gl2 = assertWebGL2Context(gl);\n gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);\n break;\n\n case GL.TEXTURE_CUBE_MAP:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);\n break;\n\n case GL.TEXTURE_2D:\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n this.attachments[attachment] = texture;\n }\n\n // Expects framebuffer to be bound\n _setReadBuffer(readBuffer) {\n const gl2 = getWebGL2Context(this.gl);\n if (gl2) {\n gl2.readBuffer(readBuffer);\n } else {\n // Setting to color attachment 0 is a noop, so allow it in WebGL1\n assert(\n readBuffer === GL.COLOR_ATTACHMENT0 || readBuffer === GL.BACK,\n ERR_MULTIPLE_RENDERTARGETS\n );\n }\n this.readBuffer = readBuffer;\n }\n\n // Expects framebuffer to be bound\n _setDrawBuffers(drawBuffers) {\n const {gl} = this;\n const gl2 = assertWebGL2Context(gl);\n if (gl2) {\n gl2.drawBuffers(drawBuffers);\n } else {\n // TODO - is this not handled by polyfills?\n const ext = gl.getExtension('WEBGL_draw_buffers');\n if (ext) {\n ext.drawBuffersWEBGL(drawBuffers);\n } else {\n // Setting a single draw buffer to color attachment 0 is a noop, allow in WebGL1\n assert(\n drawBuffers.length === 1 &&\n (drawBuffers[0] === GL.COLOR_ATTACHMENT0 || drawBuffers[0] === GL.BACK),\n ERR_MULTIPLE_RENDERTARGETS\n );\n }\n }\n this.drawBuffers = drawBuffers;\n }\n\n // Attempt to provide workable defaults for WebGL2 symbols under WebGL1\n // null means OK to query\n // TODO - move to webgl1 polyfills\n /* eslint-disable complexity */\n _getAttachmentParameterFallback(pname) {\n const caps = getFeatures(this.gl);\n\n switch (pname) {\n case GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: // GLint\n return !caps.WEBGL2 ? 0 : null;\n case GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: // GLint\n return !caps.WEBGL2 ? 8 : null;\n case GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: // GLenum\n return !caps.WEBGL2 ? GL.UNSIGNED_INT : null;\n case GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:\n return !caps.WEBGL2 && !caps.EXT_sRGB ? GL.LINEAR : null;\n default:\n return null;\n }\n }\n /* eslint-enable complexity */\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createFramebuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteFramebuffer(this.handle);\n }\n\n _bindHandle(handle) {\n return this.gl.bindFramebuffer(GL.FRAMEBUFFER, handle);\n }\n}\n\n// PUBLIC METHODS\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer) {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;\n}\n\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status) {\n // Use error mapping if installed\n // @ts-ignore\n const STATUS = Framebuffer.STATUS || {};\n return STATUS[status] || `Framebuffer error ${status}`;\n}\n\nexport const FRAMEBUFFER_ATTACHMENT_PARAMETERS = [\n GL.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, // WebGLRenderbuffer or WebGLTexture\n GL.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, // GL.RENDERBUFFER, GL.TEXTURE, GL.NONE\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, // GL.TEXTURE_CUBE_MAP_POSITIVE_X, etc.\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, // GLint\n // EXT_sRGB or WebGL2\n GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, // GL.LINEAR, GL.SRBG\n // WebGL2\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE // GLint\n // GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\n // GL.FLOAT, GL.INT, GL.UNSIGNED_INT, GL.SIGNED_NORMALIZED, OR GL.UNSIGNED_NORMALIZED.\n];\n\nFramebuffer.ATTACHMENT_PARAMETERS = FRAMEBUFFER_ATTACHMENT_PARAMETERS;\n"],"file":"framebuffer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/framebuffer.ts"],"names":["log","assert","GL","WebGLDevice","getWebGL2Context","assertWebGL2Context","getKey","Resource","Texture2D","Renderbuffer","clear","clearBuffer","copyToDataUrl","ERR_MULTIPLE_RENDERTARGETS","ImmutableFramebuffer","constructor","gl","props","attach","_initialize","attachments","readBuffer","drawBuffers","checkStatus","status","getStatus","FRAMEBUFFER_COMPLETE","Error","_getFrameBufferStatus","prevHandle","bindFramebuffer","FRAMEBUFFER","handle","checkFramebufferStatus","show","window","open","logLevel","message","level","id","image","targetMaxHeight","bind","target","unbind","options","_attach","_setReadBuffer","_setDrawBuffers","key","undefined","attachmentPoint","Number","attachment","_attachOne","_attachRenderbuffer","Array","isArray","texture","layer","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","bindTexture","TEXTURE_2D_ARRAY","TEXTURE_3D","gl2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","COLOR_ATTACHMENT0","BACK","ext","getExtension","drawBuffersWEBGL","length","_createHandle","createFramebuffer","_deleteHandle","deleteFramebuffer","_bindHandle","Framebuffer","isSupported","isFloatColorBufferSupported","getDefaultFramebuffer","webglDevice","fromContext","defaultFramebuffer","MAX_COLOR_ATTACHMENTS","getParameter","MAX_DRAW_BUFFERS","initialize","Object","seal","color","depth","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","stencil","STENCIL_ATTACHMENT","width","height","check","object","resize","_createDefaultAttachments","update","clearAttachments","delete","resource","ownResources","resizeAttachments","size","drawingBufferWidth","drawingBufferHeight","newAttachments","keys","forEach","assign","descriptor","_unattach","filter","value","drawBuffer","blit","opts","error","invalidate","x","y","READ_FRAMEBUFFER","invalidateAll","invalidateFramebuffer","getAttachmentParameter","pname","_getAttachmentParameterFallback","getFramebufferAttachmentParameter","getAttachmentParameters","parameters","ATTACHMENT_PARAMETERS","values","getParameters","attachmentName","defaultAttachments","pixels","format","RGBA","type","UNSIGNED_BYTE","mipmaps","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","push","DEPTH24_STENCIL8","DEPTH_COMPONENT16","oldAttachment","features","FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER","has","FRAMEBUFFER_ATTACHMENT_RED_SIZE","FRAMEBUFFER_ATTACHMENT_GREEN_SIZE","FRAMEBUFFER_ATTACHMENT_BLUE_SIZE","FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE","FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE","FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE","FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE","UNSIGNED_INT","FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING","FRAMEBUFFER_ATTACHMENT_OBJECT_NAME","FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE","TEXTURE_CUBE_MAP_POSITIVE_X","STATUS","colorBufferFloat","colorBufferHalfFloat","supported","Boolean"],"mappings":"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","sourcesContent":["import {log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../adapter/webgl-device';\nimport {getWebGL2Context, assertWebGL2Context} from '../context/context/webgl-checks';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport Resource, {ResourceProps} from './webgl-resource';\nimport Texture2D from './texture-2d';\nimport Renderbuffer from './renderbuffer';\nimport {clear, clearBuffer} from './clear';\nimport {copyToDataUrl} from './copy-and-blit';\n\nconst ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';\n\ntype TextureAttachment = {\n texture: Texture2D;\n layer?: number; // = 0\n level?: number; // = 0\n};\n\ntype Attachment = Renderbuffer | Texture2D | TextureAttachment;\n\nexport type ImmutableFramebufferProps = ResourceProps & {\n attachments?: Record<string, Attachment>;\n readBuffer?: number;\n drawBuffers?: number[];\n check?: boolean;\n};\n\nexport type FramebufferProps = ImmutableFramebufferProps & {\n width?: number;\n height?: number;\n color?: boolean;\n depth?: boolean;\n stencil?: boolean;\n};\n\ntype colorBufferFloatOptions = {colorBufferFloat?: boolean; colorBufferHalfFloat?: boolean};\n\nexport class ImmutableFramebuffer extends Resource<FramebufferProps> {\n constructor(gl: WebGLRenderingContext, props?: FramebufferProps) {\n super(WebGLDevice.attach(gl), props, {} as any);\n this._initialize({\n attachments: props?.attachments || {},\n readBuffer: props?.readBuffer,\n drawBuffers: props?.drawBuffers\n });\n }\n\n checkStatus(): this {\n const {gl} = this;\n const status = this.getStatus();\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(_getFrameBufferStatus(status));\n }\n return this;\n }\n\n getStatus(): number {\n const {gl} = this;\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n // @ts-expect-error\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n return status;\n }\n\n // DEBUG\n\n // Note: Will only work when called in an event handler\n show() {\n if (typeof window !== 'undefined') {\n window.open(copyToDataUrl(this), 'luma-debug-texture');\n }\n return this;\n }\n\n log(logLevel = 0, message = '') {\n if (logLevel > log.level || typeof window === 'undefined') {\n return this;\n }\n message = message || `Framebuffer ${this.id}`;\n const image = copyToDataUrl(this, {targetMaxHeight: 100});\n // @ts-expect-error probe.gl typings incorrectly require priority...\n log.image({logLevel, message, image})();\n return this;\n }\n\n // WEBGL INTERFACE\n bind({target = GL.FRAMEBUFFER} = {}) {\n this.gl.bindFramebuffer(target, this.handle);\n return this;\n }\n\n unbind({target = GL.FRAMEBUFFER} = {}) {\n this.gl.bindFramebuffer(target, null);\n return this;\n }\n\n // PRIVATE\n\n _initialize(options: {attachments: Record<string, Attachment>; readBuffer?: number; drawBuffers?: number[]}): this {\n const {attachments = {}, readBuffer, drawBuffers} = options;\n\n this._attach(attachments);\n\n // Multiple render target support, set read buffer and draw buffers\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n if (readBuffer) {\n this._setReadBuffer(readBuffer);\n }\n if (drawBuffers) {\n this._setDrawBuffers(drawBuffers);\n }\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n /** Attach from a map of attachments */\n _attach(attachments: Record<string, Attachment>) {\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (const key in attachments) {\n // Ensure key is not undefined\n assert(key !== undefined, 'Misspelled framebuffer binding point?');\n const attachmentPoint = Number(key) as GL;\n const attachment = attachments[attachmentPoint];\n this._attachOne(attachmentPoint, attachment);\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n }\n\n /** Attach one attachment */\n _attachOne(attachmentPoint: GL, attachment: Attachment): Renderbuffer | Texture2D {\n if (attachment instanceof Renderbuffer) {\n this._attachRenderbuffer(attachmentPoint, attachment);\n return attachment;\n } else if (Array.isArray(attachment)) {\n const [texture, layer = 0, level = 0] = attachment;\n this._attachTexture(attachmentPoint, texture, layer, level);\n return texture;\n } else if (attachment instanceof Texture2D) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n }\n\n _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {\n this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);\n }\n\n /**\n * @param attachment \n * @param texture \n * @param layer = 0 - index into Texture2DArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n _attachTexture(attachment: GL, texture: Texture2D, layer: number, level: number): void {\n const {gl} = this;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n const gl2 = assertWebGL2Context(gl);\n gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);\n break;\n\n case GL.TEXTURE_CUBE_MAP:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);\n break;\n\n case GL.TEXTURE_2D:\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n }\n\n /** @note Expects framebuffer to be bound */\n _setReadBuffer(readBuffer: number): void {\n const gl2 = getWebGL2Context(this.gl);\n if (gl2) {\n gl2.readBuffer(readBuffer);\n } else {\n // Setting to color attachment 0 is a noop, so allow it in WebGL1\n assert(\n readBuffer === GL.COLOR_ATTACHMENT0 || readBuffer === GL.BACK,\n ERR_MULTIPLE_RENDERTARGETS\n );\n }\n }\n\n /** @note Expects framebuffer to be bound */\n _setDrawBuffers(drawBuffers: number[]) {\n const {gl} = this;\n const gl2 = assertWebGL2Context(gl);\n if (gl2) {\n gl2.drawBuffers(drawBuffers);\n } else {\n // TODO - is this not handled by polyfills?\n const ext = gl.getExtension('WEBGL_draw_buffers');\n if (ext) {\n ext.drawBuffersWEBGL(drawBuffers);\n } else {\n // Setting a single draw buffer to color attachment 0 is a noop, allow in WebGL1\n assert(\n drawBuffers.length === 1 &&\n (drawBuffers[0] === GL.COLOR_ATTACHMENT0 || drawBuffers[0] === GL.BACK),\n ERR_MULTIPLE_RENDERTARGETS\n );\n }\n }\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createFramebuffer();\n }\n\n _deleteHandle() {\n this.gl.deleteFramebuffer(this.handle);\n }\n\n _bindHandle(handle) {\n return this.gl.bindFramebuffer(GL.FRAMEBUFFER, handle);\n }\n}\n\nexport default class Framebuffer extends ImmutableFramebuffer {\n width = null;\n height = null;\n attachments = {};\n readBuffer = GL.COLOR_ATTACHMENT0;\n drawBuffers = [GL.COLOR_ATTACHMENT0];\n ownResources = [];\n\n static readonly FRAMEBUFFER_ATTACHMENT_PARAMETERS = [\n GL.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, // WebGLRenderbuffer or WebGLTexture\n GL.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, // GL.RENDERBUFFER, GL.TEXTURE, GL.NONE\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, // GL.TEXTURE_CUBE_MAP_POSITIVE_X, etc.\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, // GLint\n // EXT_sRGB or WebGL2\n GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, // GL.LINEAR, GL.SRBG\n // WebGL2\n // GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, // GLint\n GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE // GLint\n // GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\n // GL.FLOAT, GL.INT, GL.UNSIGNED_INT, GL.SIGNED_NORMALIZED, OR GL.UNSIGNED_NORMALIZED.\n ];\n\n /**\n * Check color buffer float support\n * @param options.colorBufferFloat Whether floating point textures can be rendered and read\n * @param options.colorBufferHalfFloat Whether half float textures can be rendered and read\n */\n static isSupported(gl: WebGLRenderingContext, options: colorBufferFloatOptions): boolean {\n return isFloatColorBufferSupported(gl, options);\n }\n\n /**\n * returns the default Framebuffer\n * Creates a Framebuffer object wrapper for the default WebGL framebuffer (target === null)\n */\n static getDefaultFramebuffer(gl: WebGLRenderingContext): Framebuffer {\n const webglDevice = WebGLDevice.fromContext(gl);\n webglDevice.defaultFramebuffer =\n webglDevice.defaultFramebuffer ||\n new Framebuffer(gl, {\n id: 'default-framebuffer',\n handle: null,\n attachments: {}\n });\n // TODO - can we query for and get a handle to the GL.FRONT renderbuffer?\n return webglDevice.defaultFramebuffer;\n }\n\n get MAX_COLOR_ATTACHMENTS(): number {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_COLOR_ATTACHMENTS);\n }\n\n get MAX_DRAW_BUFFERS(): number {\n const gl2 = assertWebGL2Context(this.gl);\n return gl2.getParameter(gl2.MAX_DRAW_BUFFERS);\n }\n\n constructor(gl: WebGLRenderingContext, props?: FramebufferProps) {\n super(gl, props);\n this.initialize(props);\n Object.seal(this);\n }\n\n get color() {\n return this.attachments[GL.COLOR_ATTACHMENT0] || null;\n }\n\n get texture() {\n return this.attachments[GL.COLOR_ATTACHMENT0] || null;\n }\n\n get depth() {\n return (\n this.attachments[GL.DEPTH_ATTACHMENT] || this.attachments[GL.DEPTH_STENCIL_ATTACHMENT] || null\n );\n }\n\n get stencil() {\n return (\n this.attachments[GL.STENCIL_ATTACHMENT] ||\n this.attachments[GL.DEPTH_STENCIL_ATTACHMENT] ||\n null\n );\n }\n\n // initialize(props?: FramebufferProps): this;\n initialize(props: FramebufferProps) {\n let {attachments = null} = props || {};\n const {\n width = 1,\n height = 1,\n color = true,\n depth = true,\n stencil = false,\n check = true,\n readBuffer = undefined,\n drawBuffers = undefined\n } = props || {};\n assert(width >= 0 && height >= 0, 'Width and height need to be integers');\n\n // Store actual width and height for diffing\n this.width = width;\n this.height = height;\n\n // Resize any provided attachments - note that resize only resizes if needed\n // Note: A framebuffer has no separate size, it is defined by its attachments (which must agree)\n if (attachments) {\n for (const attachment in attachments) {\n const target = attachments[attachment];\n const object = Array.isArray(target) ? target[0] : target;\n object.resize({width, height});\n }\n } else {\n // Create any requested default attachments\n attachments = this._createDefaultAttachments(color, depth, stencil, width, height);\n }\n\n this.update({clearAttachments: true, attachments, readBuffer, drawBuffers});\n\n // Checks that framebuffer was properly set up, if not, throws an explanatory error\n if (attachments && check) {\n this.checkStatus();\n }\n }\n\n delete(): this {\n for (const resource of this.ownResources) {\n resource.delete();\n }\n super.delete();\n return this;\n }\n\n update(options: {\n attachments: Record<string, Attachment>,\n readBuffer?: number,\n drawBuffers?,\n clearAttachments?: boolean,\n resizeAttachments?: boolean\n }): this {\n\n const {\n attachments = {},\n readBuffer,\n drawBuffers,\n clearAttachments = false,\n resizeAttachments = true\n } = options;\n\n this.attach(attachments, {clearAttachments, resizeAttachments});\n\n const {gl} = this;\n // Multiple render target support, set read buffer and draw buffers\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n if (readBuffer) {\n this._setReadBuffer(readBuffer);\n this.readBuffer = readBuffer;\n }\n if (drawBuffers) {\n this._setDrawBuffers(drawBuffers);\n this.drawBuffers = drawBuffers;\n }\n // @ts-expect-error\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n /** Attachment resize is expected to be a noop if size is same */\n resize(size?: {width?: number; height?: number}): this {\n let {width, height} = size || {};\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n if (width !== this.width && height !== this.height) {\n log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();\n }\n for (const attachmentPoint in this.attachments) {\n this.attachments[attachmentPoint].resize({width, height});\n }\n this.width = width;\n this.height = height;\n return this;\n }\n\n /** Attach from a map of attachments */\n attach(attachments, {clearAttachments = false, resizeAttachments = true} = {}) {\n const newAttachments = {};\n\n // Any current attachments need to be removed, add null values to map\n if (clearAttachments) {\n Object.keys(this.attachments).forEach((key) => {\n newAttachments[key] = null;\n });\n }\n\n // Overlay the new attachments\n Object.assign(newAttachments, attachments);\n\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (const key in newAttachments) {\n // Ensure key is not undefined\n assert(key !== undefined, 'Misspelled framebuffer binding point?');\n\n const attachment = Number(key);\n\n const descriptor = newAttachments[attachment];\n let object = descriptor;\n if (!object) {\n this._unattach(attachment);\n } else {\n object = this._attachOne(attachment, object);\n this.attachments[attachment] = object;\n }\n\n // Resize objects\n if (resizeAttachments && object) {\n object.resize({width: this.width, height: this.height});\n }\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // Assign to attachments and remove any nulls to get a clean attachment map\n Object.assign(this.attachments, attachments);\n Object.keys(this.attachments)\n .filter((key) => !this.attachments[key])\n .forEach((key) => {\n delete this.attachments[key];\n });\n }\n\n clear(options?: {color?: any; depth?: any; stencil?: any; drawBuffers?: any[]}): this {\n const {color, depth, stencil, drawBuffers = []} = options;\n\n // Bind framebuffer and delegate to global clear functions\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n if (color || depth || stencil) {\n clear(this.gl, {color, depth, stencil});\n }\n\n drawBuffers.forEach((value, drawBuffer) => {\n clearBuffer(this.gl, {drawBuffer, value});\n });\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n return this;\n }\n\n // WEBGL2 INTERFACE\n\n // Copies a rectangle of pixels between framebuffers\n // eslint-disable-next-line complexity\n blit(opts = {}) {\n log.error('Framebuffer.blit({...}) is no logner supported, use blit(source, target, opts)')();\n return null;\n }\n\n // signals to the GL that it need not preserve all pixels of a specified region of the framebuffer\n invalidate(options: {attachments: []; x?: number; y?: number; width: number; height: number}) {\n const {attachments = [], x = 0, y = 0, width, height} = options;\n const gl2 = assertWebGL2Context(this.gl);\n const prevHandle = gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, this.handle);\n const invalidateAll = x === 0 && y === 0 && width === undefined && height === undefined;\n if (invalidateAll) {\n gl2.invalidateFramebuffer(GL.READ_FRAMEBUFFER, attachments);\n } else {\n // TODO - why does type checking fail on this line\n // @ts-expect-error\n gl2.invalidateFramebuffer(GL.READ_FRAMEBUFFER, attachments, x, y, width, height);\n }\n // @ts-expect-error\n gl2.bindFramebuffer(GL.READ_FRAMEBUFFER, prevHandle);\n return this;\n }\n\n // Return the value for `pname` of the specified attachment.\n // The type returned is the type of the requested pname\n getAttachmentParameter(attachment, pname, keys) {\n let value = this._getAttachmentParameterFallback(pname);\n if (value === null) {\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n value = this.gl.getFramebufferAttachmentParameter(GL.FRAMEBUFFER, attachment, pname);\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);\n }\n if (keys && value > 1000) {\n // @ts-expect-error\n value = getKey(this.gl, value);\n }\n return value;\n }\n\n getAttachmentParameters(\n attachment = GL.COLOR_ATTACHMENT0,\n keys,\n // @ts-expect-error\n parameters = this.constructor.ATTACHMENT_PARAMETERS || []\n ) {\n const values = {};\n for (const pname of parameters) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getAttachmentParameter(attachment, pname, keys);\n }\n return values;\n }\n\n // @ts-expect-error\n getParameters(keys = true) {\n const attachments = Object.keys(this.attachments);\n // if (this === this.gl.luma.defaultFramebuffer) {\n // attachments = [GL.COLOR_ATTACHMENT0, GL.DEPTH_STENCIL_ATTACHMENT];\n // }\n const parameters = {};\n for (const attachmentName of attachments) {\n const attachment = Number(attachmentName);\n const key = keys ? getKey(this.gl, attachment) : attachment;\n parameters[key] = this.getAttachmentParameters(attachment, keys);\n }\n return parameters;\n }\n\n // PRIVATE METHODS\n\n _createDefaultAttachments(color, depth, stencil, width, height) {\n let defaultAttachments = null;\n\n // Add a color buffer if requested and not supplied\n if (color) {\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.COLOR_ATTACHMENT0] = new Texture2D(this.gl, {\n id: `${this.id}-color0`,\n pixels: null, // reserves texture memory, but texels are undefined\n format: GL.RGBA,\n type: GL.UNSIGNED_BYTE,\n width,\n height,\n // Note: Mipmapping can be disabled by texture resource when we resize the texture\n // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant\n // behavior we always disable mipmaps.\n mipmaps: false,\n // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.\n // Use LINEAR so subpixel algos like fxaa work.\n // Set WRAP modes that support NPOT textures too.\n parameters: {\n [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n }\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.COLOR_ATTACHMENT0]);\n }\n\n if (depth && stencil) {\n // TODO - handle separate stencil\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.DEPTH_STENCIL_ATTACHMENT] = new Renderbuffer(this.gl, {\n id: `${this.id}-depth-stencil`,\n format: GL.DEPTH24_STENCIL8,\n width,\n height: 111\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.DEPTH_STENCIL_ATTACHMENT]);\n // TODO - optional texture\n // new Texture2D(this.gl, {\n // id: `${this.id}-depth-stencil`,\n // format: GL.DEPTH24_STENCIL8,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n // width,\n // height,\n // mipmaps: false\n // });\n } else if (depth) {\n // Add a depth buffer if requested and not supplied\n defaultAttachments = defaultAttachments || {};\n defaultAttachments[GL.DEPTH_ATTACHMENT] = new Renderbuffer(this.gl, {\n id: `${this.id}-depth`,\n format: GL.DEPTH_COMPONENT16,\n width,\n height\n });\n // track to delete later\n this.ownResources.push(defaultAttachments[GL.DEPTH_ATTACHMENT]);\n } else if (stencil) {\n // TODO - handle separate stencil\n assert(false);\n }\n\n return defaultAttachments;\n }\n\n _unattach(attachment) {\n const oldAttachment = this.attachments[attachment];\n if (!oldAttachment) {\n return;\n }\n if (oldAttachment instanceof Renderbuffer) {\n // render buffer\n this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, null);\n } else {\n // Must be a texture attachment\n this.gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, null, 0);\n }\n delete this.attachments[attachment];\n }\n\n /**\n * Attempt to provide workable defaults for WebGL2 symbols under WebGL1\n * null means OK to query\n * TODO - move to webgl1 polyfills\n * @param pname \n * @returns \n */\n // eslint-disable-next-line complexity\n _getAttachmentParameterFallback(pname) {\n const webglDevice = WebGLDevice.fromContext(this.gl);\n const features = webglDevice.features;\n\n switch (pname) {\n case GL.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: // GLint\n return !features.has('webgl2') ? 0 : null;\n case GL.FRAMEBUFFER_ATTACHMENT_RED_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: // GLint\n case GL.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: // GLint\n return !features.has('webgl2') ? 8 : null;\n case GL.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: // GLenum\n return !features.has('webgl2') ? GL.UNSIGNED_INT : null;\n case GL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:\n return !features.has('webgl2') && !features.has('webgl-color-encoding-srgb') ? GL.LINEAR : null;\n default:\n return null;\n }\n }\n}\n\n// PUBLIC METHODS\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer) {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;\n}\n\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status) {\n // Use error mapping if installed\n // @ts-expect-error\n const STATUS = Framebuffer.STATUS || {};\n return STATUS[status] || `Framebuffer error ${status}`;\n}\n\n/**\n * Support\n * @param gl\n * @param options.colorBufferFloat Whether floating point textures can be rendered and read\n * @param options.colorBufferHalfFloat Whether half float textures can be rendered and read\n */\nfunction isFloatColorBufferSupported(\n gl: WebGLRenderingContext,\n options: {colorBufferFloat?: boolean; colorBufferHalfFloat?: boolean}\n): boolean {\n const {\n colorBufferFloat, // Whether floating point textures can be rendered and read\n colorBufferHalfFloat // Whether half float textures can be rendered and read\n } = options;\n let supported = true;\n\n if (colorBufferFloat) {\n supported = Boolean(\n // WebGL 2\n gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1, not exposed on all platforms\n gl.getExtension('WEBGL_color_buffer_float') ||\n // WebGL 1, implicitly enables float render targets https://www.khronos.org/registry/webgl/extensions/OES_texture_float/\n gl.getExtension('OES_texture_float')\n );\n }\n\n if (colorBufferHalfFloat) {\n supported =\n supported &&\n Boolean(\n // WebGL 2\n gl.getExtension('EXT_color_buffer_float') ||\n // WebGL 1\n gl.getExtension('EXT_color_buffer_half_float')\n );\n }\n\n return supported;\n}\n"],"file":"framebuffer.js"}
|
|
@@ -1,19 +1,32 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { decomposeCompositeGLType } from '../webgl-utils/attribute-utils';
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { getProgramBindings } from '../helpers/get-program-bindings';
|
|
4
3
|
export default class ProgramConfiguration {
|
|
5
4
|
constructor(program) {
|
|
5
|
+
_defineProperty(this, "id", void 0);
|
|
6
|
+
|
|
7
|
+
_defineProperty(this, "attributeInfos", []);
|
|
8
|
+
|
|
9
|
+
_defineProperty(this, "attributeInfosByName", {});
|
|
10
|
+
|
|
11
|
+
_defineProperty(this, "attributeInfosByLocation", []);
|
|
12
|
+
|
|
13
|
+
_defineProperty(this, "varyingInfos", []);
|
|
14
|
+
|
|
15
|
+
_defineProperty(this, "varyingInfosByName", {});
|
|
16
|
+
|
|
6
17
|
this.id = program.id;
|
|
7
|
-
this.attributeInfos = [];
|
|
8
|
-
this.attributeInfosByName = {};
|
|
9
|
-
this.attributeInfosByLocation = [];
|
|
10
|
-
this.varyingInfos = [];
|
|
11
|
-
this.varyingInfosByName = {};
|
|
12
18
|
Object.seal(this);
|
|
19
|
+
const bindings = getProgramBindings(program.gl2, program.handle);
|
|
20
|
+
this.attributeInfos = bindings.attributes;
|
|
13
21
|
|
|
14
|
-
|
|
22
|
+
for (const attributeInfo of bindings.attributes) {
|
|
23
|
+
this.attributeInfosByName[attributeInfo.name] = attributeInfo;
|
|
24
|
+
this.attributeInfosByLocation[attributeInfo.location] = attributeInfo;
|
|
25
|
+
}
|
|
15
26
|
|
|
16
|
-
|
|
27
|
+
for (const varyingInfo of bindings.varyings) {
|
|
28
|
+
this.varyingInfosByName[varyingInfo.name] = varyingInfo;
|
|
29
|
+
}
|
|
17
30
|
}
|
|
18
31
|
|
|
19
32
|
getAttributeInfo(locationOrName) {
|
|
@@ -47,106 +60,14 @@ export default class ProgramConfiguration {
|
|
|
47
60
|
}
|
|
48
61
|
|
|
49
62
|
getVaryingIndex(locationOrName) {
|
|
50
|
-
const varying = this.getVaryingInfo();
|
|
63
|
+
const varying = this.getVaryingInfo(locationOrName);
|
|
51
64
|
return varying ? varying.location : -1;
|
|
52
65
|
}
|
|
53
66
|
|
|
54
67
|
getVaryingAccessor(locationOrName) {
|
|
55
|
-
const varying = this.getVaryingInfo();
|
|
68
|
+
const varying = this.getVaryingInfo(locationOrName);
|
|
56
69
|
return varying ? varying.accessor : null;
|
|
57
70
|
}
|
|
58
71
|
|
|
59
|
-
_readAttributesFromProgram(program) {
|
|
60
|
-
const {
|
|
61
|
-
gl
|
|
62
|
-
} = program;
|
|
63
|
-
const count = gl.getProgramParameter(program.handle, 35721);
|
|
64
|
-
|
|
65
|
-
for (let index = 0; index < count; index++) {
|
|
66
|
-
const {
|
|
67
|
-
name,
|
|
68
|
-
type,
|
|
69
|
-
size
|
|
70
|
-
} = gl.getActiveAttrib(program.handle, index);
|
|
71
|
-
const location = gl.getAttribLocation(program.handle, name);
|
|
72
|
-
|
|
73
|
-
if (location >= 0) {
|
|
74
|
-
this._addAttribute(location, name, type, size);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
this.attributeInfos.sort((a, b) => a.location - b.location);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
_readVaryingsFromProgram(program) {
|
|
82
|
-
const {
|
|
83
|
-
gl
|
|
84
|
-
} = program;
|
|
85
|
-
|
|
86
|
-
if (!isWebGL2(gl)) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const count = gl.getProgramParameter(program.handle, 35971);
|
|
91
|
-
|
|
92
|
-
for (let location = 0; location < count; location++) {
|
|
93
|
-
const {
|
|
94
|
-
name,
|
|
95
|
-
type,
|
|
96
|
-
size
|
|
97
|
-
} = gl.getTransformFeedbackVarying(program.handle, location);
|
|
98
|
-
|
|
99
|
-
this._addVarying(location, name, type, size);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
this.varyingInfos.sort((a, b) => a.location - b.location);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
_addAttribute(location, name, compositeType, size) {
|
|
106
|
-
const {
|
|
107
|
-
type,
|
|
108
|
-
components
|
|
109
|
-
} = decomposeCompositeGLType(compositeType);
|
|
110
|
-
const accessor = {
|
|
111
|
-
type,
|
|
112
|
-
size: size * components
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
this._inferProperties(location, name, accessor);
|
|
116
|
-
|
|
117
|
-
const attributeInfo = {
|
|
118
|
-
location,
|
|
119
|
-
name,
|
|
120
|
-
accessor: new Accessor(accessor)
|
|
121
|
-
};
|
|
122
|
-
this.attributeInfos.push(attributeInfo);
|
|
123
|
-
this.attributeInfosByLocation[location] = attributeInfo;
|
|
124
|
-
this.attributeInfosByName[attributeInfo.name] = attributeInfo;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
_inferProperties(location, name, accessor) {
|
|
128
|
-
if (/instance/i.test(name)) {
|
|
129
|
-
accessor.divisor = 1;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
_addVarying(location, name, compositeType, size) {
|
|
134
|
-
const {
|
|
135
|
-
type,
|
|
136
|
-
components
|
|
137
|
-
} = decomposeCompositeGLType(compositeType);
|
|
138
|
-
const accessor = new Accessor({
|
|
139
|
-
type,
|
|
140
|
-
size: size * components
|
|
141
|
-
});
|
|
142
|
-
const varying = {
|
|
143
|
-
location,
|
|
144
|
-
name,
|
|
145
|
-
accessor
|
|
146
|
-
};
|
|
147
|
-
this.varyingInfos.push(varying);
|
|
148
|
-
this.varyingInfosByName[varying.name] = varying;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
72
|
}
|
|
152
73
|
//# sourceMappingURL=program-configuration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/program-configuration.
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/program-configuration.ts"],"names":["getProgramBindings","ProgramConfiguration","constructor","program","id","Object","seal","bindings","gl2","handle","attributeInfos","attributes","attributeInfo","attributeInfosByName","name","attributeInfosByLocation","location","varyingInfo","varyings","varyingInfosByName","getAttributeInfo","locationOrName","Number","isFinite","getAttributeLocation","getAttributeAccessor","accessor","getVaryingInfo","varyingInfos","getVaryingIndex","varying","getVaryingAccessor"],"mappings":";AAKA,SAAQA,kBAAR,QAAiC,iCAAjC;AAQC,eAAe,MAAMC,oBAAN,CAA2B;AAUzCC,EAAAA,WAAW,CAACC,OAAD,EAAmB;AAAA;;AAAA,4CARO,EAQP;;AAAA,kDAP2B,EAO3B;;AAAA,sDAJiB,EAIjB;;AAAA,0CAHG,EAGH;;AAAA,gDAFuB,EAEvB;;AAC5B,SAAKC,EAAL,GAAUD,OAAO,CAACC,EAAlB;AACAC,IAAAA,MAAM,CAACC,IAAP,CAAY,IAAZ;AAEA,UAAMC,QAAQ,GAAGP,kBAAkB,CAACG,OAAO,CAACK,GAAT,EAAcL,OAAO,CAACM,MAAtB,CAAnC;AAEA,SAAKC,cAAL,GAAsBH,QAAQ,CAACI,UAA/B;;AACA,SAAK,MAAMC,aAAX,IAA4BL,QAAQ,CAACI,UAArC,EAAiD;AAC/C,WAAKE,oBAAL,CAA0BD,aAAa,CAACE,IAAxC,IAAgDF,aAAhD;AACA,WAAKG,wBAAL,CAA8BH,aAAa,CAACI,QAA5C,IAAwDJ,aAAxD;AACD;;AAED,SAAK,MAAMK,WAAX,IAA0BV,QAAQ,CAACW,QAAnC,EAA6C;AAC3C,WAAKC,kBAAL,CAAwBF,WAAW,CAACH,IAApC,IAA4CG,WAA5C;AACD;AACF;;AAEDG,EAAAA,gBAAgB,CAACC,cAAD,EAAoD;AAClE,UAAML,QAAQ,GAAGM,MAAM,CAACD,cAAD,CAAvB;;AACA,QAAIC,MAAM,CAACC,QAAP,CAAgBP,QAAhB,CAAJ,EAA+B;AAC7B,aAAO,KAAKD,wBAAL,CAA8BC,QAA9B,CAAP;AACD;;AACD,WAAO,KAAKH,oBAAL,CAA0BQ,cAA1B,KAA6C,IAApD;AACD;;AAGDG,EAAAA,oBAAoB,CAACH,cAAD,EAA0C;AAC5D,UAAMT,aAAa,GAAG,KAAKQ,gBAAL,CAAsBC,cAAtB,CAAtB;AACA,WAAOT,aAAa,GAAGA,aAAa,CAACI,QAAjB,GAA4B,CAAC,CAAjD;AACD;;AAEDS,EAAAA,oBAAoB,CAACJ,cAAD,EAAkC;AACpD,UAAMT,aAAa,GAAG,KAAKQ,gBAAL,CAAsBC,cAAtB,CAAtB;AACA,WAAOT,aAAa,GAAGA,aAAa,CAACc,QAAjB,GAA4B,IAAhD;AACD;;AAEDC,EAAAA,cAAc,CAACN,cAAD,EAAkD;AAC9D,UAAML,QAAQ,GAAGM,MAAM,CAACD,cAAD,CAAvB;;AACA,QAAIC,MAAM,CAACC,QAAP,CAAgBP,QAAhB,CAAJ,EAA+B;AAC7B,aAAO,KAAKY,YAAL,CAAkBZ,QAAlB,CAAP;AACD;;AACD,WAAO,KAAKG,kBAAL,CAAwBE,cAAxB,KAA2C,IAAlD;AACD;;AAEDQ,EAAAA,eAAe,CAACR,cAAD,EAA0C;AACvD,UAAMS,OAAO,GAAG,KAAKH,cAAL,CAAoBN,cAApB,CAAhB;AACA,WAAOS,OAAO,GAAGA,OAAO,CAACd,QAAX,GAAsB,CAAC,CAArC;AACD;;AAEDe,EAAAA,kBAAkB,CAACV,cAAD,EAAkC;AAClD,UAAMS,OAAO,GAAG,KAAKH,cAAL,CAAoBN,cAApB,CAAhB;AACA,WAAOS,OAAO,GAAGA,OAAO,CAACJ,QAAX,GAAsB,IAApC;AACD;;AA9DwC","sourcesContent":["// Contains metadata describing attribute configurations for a program's shaders\n// Much of this is automatically extracted from shaders after program linking\n// import Accessor from './accessor';\nimport type Program from './program';\nimport type {AttributeBinding, VaryingBinding} from '../helpers/program-bindings';\nimport {getProgramBindings} from '../helpers/get-program-bindings';\n\n/**\n * is a mechanism for taking a program object and querying information\n * about it, so as to be able to interface and interact with it.\n * For example, if there is a uniform, you may need to query its\n * location so that you can set its value.\n */\n export default class ProgramConfiguration {\n id: string;\n attributeInfos: AttributeBinding[] = [];\n attributeInfosByName: Record<string, AttributeBinding> = {};\n // Locations may not be contiguous the case of matrix attributes\n // so keep a separate location->attribute map.\n attributeInfosByLocation: AttributeBinding[] = [];\n varyingInfos: VaryingBinding[] = [];\n varyingInfosByName: Record<string, VaryingBinding> = {};\n\n constructor(program: Program) {\n this.id = program.id;\n Object.seal(this);\n\n const bindings = getProgramBindings(program.gl2, program.handle);\n\n this.attributeInfos = bindings.attributes;\n for (const attributeInfo of bindings.attributes) {\n this.attributeInfosByName[attributeInfo.name] = attributeInfo;\n this.attributeInfosByLocation[attributeInfo.location] = attributeInfo;\n }\n\n for (const varyingInfo of bindings.varyings) {\n this.varyingInfosByName[varyingInfo.name] = varyingInfo;\n }\n }\n\n getAttributeInfo(locationOrName: number | string): AttributeBinding {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return this.attributeInfosByLocation[location];\n }\n return this.attributeInfosByName[locationOrName] || null;\n }\n\n // Resolves an attribute name or index to an index\n getAttributeLocation(locationOrName: number | string): number {\n const attributeInfo = this.getAttributeInfo(locationOrName);\n return attributeInfo ? attributeInfo.location : -1;\n }\n\n getAttributeAccessor(locationOrName: number | string) {\n const attributeInfo = this.getAttributeInfo(locationOrName);\n return attributeInfo ? attributeInfo.accessor : null;\n }\n\n getVaryingInfo(locationOrName: number | string): VaryingBinding {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return this.varyingInfos[location];\n }\n return this.varyingInfosByName[locationOrName] || null;\n }\n\n getVaryingIndex(locationOrName: number | string): number {\n const varying = this.getVaryingInfo(locationOrName);\n return varying ? varying.location : -1;\n }\n\n getVaryingAccessor(locationOrName: number | string) {\n const varying = this.getVaryingInfo(locationOrName);\n return varying ? varying.accessor : null;\n }\n}\n"],"file":"program-configuration.js"}
|