@luma.gl/webgl 8.5.7 → 8.6.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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 +16 -0
- package/dist/classes/clear.d.ts.map +1 -0
- package/dist/classes/clear.js +102 -0
- package/dist/classes/clear.js.map +1 -0
- package/dist/classes/copy-and-blit.d.ts +69 -0
- package/dist/classes/copy-and-blit.d.ts.map +1 -0
- package/dist/classes/copy-and-blit.js +333 -0
- package/dist/classes/copy-and-blit.js.map +1 -0
- package/dist/classes/framebuffer.d.ts +130 -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 +27 -0
- package/dist/classes/program-configuration.d.ts.map +1 -0
- package/dist/classes/program-configuration.js +160 -0
- package/dist/classes/program-configuration.js.map +1 -0
- package/dist/classes/program.d.ts +61 -0
- package/dist/classes/program.d.ts.map +1 -0
- package/dist/classes/program.js +368 -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 +144 -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 +127 -0
- package/dist/classes/renderbuffer.js.map +1 -0
- package/dist/classes/texture-2d.d.ts +8 -0
- package/dist/classes/texture-2d.d.ts.map +1 -0
- package/dist/classes/texture-2d.js +39 -0
- package/dist/classes/texture-2d.js.map +1 -0
- package/dist/classes/texture-3d.d.ts +28 -0
- package/dist/classes/texture-3d.d.ts.map +1 -0
- package/dist/classes/texture-3d.js +67 -0
- package/dist/classes/texture-3d.js.map +1 -0
- package/dist/classes/texture-cube.d.ts +27 -0
- package/dist/classes/texture-cube.d.ts.map +1 -0
- package/dist/classes/texture-cube.js +131 -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 +118 -0
- package/dist/classes/texture.d.ts.map +1 -0
- package/dist/classes/texture.js +785 -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 +197 -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 +38 -0
- package/dist/classes/uniforms.d.ts.map +1 -0
- package/dist/classes/uniforms.js +251 -0
- package/dist/classes/uniforms.js.map +1 -0
- package/dist/classes/vertex-array-object.d.ts +75 -0
- package/dist/classes/vertex-array-object.d.ts.map +1 -0
- package/dist/classes/vertex-array-object.js +262 -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 +409 -0
- package/dist/classes/vertex-array.js.map +1 -0
- package/dist/classes/webgl-buffer.d.ts +98 -0
- package/dist/classes/webgl-buffer.d.ts.map +1 -0
- package/dist/{esm/classes/buffer.js → classes/webgl-buffer.js} +97 -73
- package/dist/classes/webgl-buffer.js.map +1 -0
- package/dist/classes/webgl-resource.d.ts +54 -0
- package/dist/classes/webgl-resource.d.ts.map +1 -0
- package/dist/{esm/classes/resource.js → classes/webgl-resource.js} +31 -52
- package/dist/classes/webgl-resource.js.map +1 -0
- package/dist/classes/webgl-shader.d.ts +51 -0
- package/dist/classes/webgl-shader.d.ts.map +1 -0
- package/dist/classes/webgl-shader.js +190 -0
- package/dist/classes/webgl-shader.js.map +1 -0
- package/dist/context/gl-context.d.ts +15 -0
- package/dist/context/gl-context.d.ts.map +1 -0
- package/dist/context/gl-context.js +32 -0
- package/dist/context/gl-context.js.map +1 -0
- package/dist/context/luma-context-data.d.ts +31 -0
- package/dist/context/luma-context-data.d.ts.map +1 -0
- package/dist/context/luma-context-data.js +5 -0
- package/dist/context/luma-context-data.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/bundle.js +3 -5
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/classes/accessor.js +76 -108
- package/dist/es5/classes/accessor.js.map +1 -1
- package/dist/es5/classes/accessor.ts.disabled +159 -0
- package/dist/es5/classes/clear.js +33 -48
- package/dist/es5/classes/clear.js.map +1 -1
- package/dist/es5/classes/copy-and-blit.js +177 -192
- package/dist/es5/classes/copy-and-blit.js.map +1 -1
- package/dist/es5/classes/framebuffer.js +538 -655
- package/dist/es5/classes/framebuffer.js.map +1 -1
- package/dist/es5/classes/program-configuration.js +127 -141
- package/dist/es5/classes/program-configuration.js.map +1 -1
- package/dist/es5/classes/program.js +294 -358
- package/dist/es5/classes/program.js.map +1 -1
- package/dist/es5/classes/query.js +115 -181
- package/dist/es5/classes/query.js.map +1 -1
- package/dist/es5/classes/renderbuffer-formats.js +186 -121
- package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
- package/dist/es5/classes/renderbuffer.js +104 -128
- package/dist/es5/classes/renderbuffer.js.map +1 -1
- package/dist/es5/classes/texture-2d.js +16 -39
- package/dist/es5/classes/texture-2d.js.map +1 -1
- package/dist/es5/classes/texture-3d.js +50 -89
- package/dist/es5/classes/texture-3d.js.map +1 -1
- package/dist/es5/classes/texture-cube.js +112 -162
- package/dist/es5/classes/texture-cube.js.map +1 -1
- package/dist/es5/classes/texture-formats.js +73 -42
- package/dist/es5/classes/texture-formats.js.map +1 -1
- package/dist/es5/classes/texture.js +670 -673
- package/dist/es5/classes/texture.js.map +1 -1
- package/dist/es5/classes/transform-feedback.js +150 -203
- package/dist/es5/classes/transform-feedback.js.map +1 -1
- package/dist/es5/classes/uniform-buffer-layout.js +89 -103
- package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
- package/dist/es5/classes/uniforms.js +134 -93
- package/dist/es5/classes/uniforms.js.map +1 -1
- package/dist/es5/classes/vertex-array-object.js +204 -306
- package/dist/es5/classes/vertex-array-object.js.map +1 -1
- package/dist/es5/classes/vertex-array.js +317 -353
- package/dist/es5/classes/vertex-array.js.map +1 -1
- package/dist/es5/classes/webgl-buffer.js +391 -0
- package/dist/es5/classes/webgl-buffer.js.map +1 -0
- package/dist/es5/classes/webgl-resource.js +217 -0
- package/dist/es5/classes/webgl-resource.js.map +1 -0
- package/dist/es5/classes/webgl-shader.js +213 -0
- package/dist/es5/classes/webgl-shader.js.map +1 -0
- package/dist/es5/context/gl-context.js +46 -0
- package/dist/es5/context/gl-context.js.map +1 -0
- package/dist/es5/context/luma-context-data.js +12 -0
- package/dist/es5/context/luma-context-data.js.map +1 -0
- package/dist/es5/debug/debug-program-configuration.js +20 -48
- package/dist/es5/debug/debug-program-configuration.js.map +1 -1
- package/dist/es5/debug/debug-uniforms.js +72 -114
- package/dist/es5/debug/debug-uniforms.js.map +1 -1
- package/dist/es5/debug/debug-vertex-array.js +56 -51
- package/dist/es5/debug/debug-vertex-array.js.map +1 -1
- package/dist/es5/features/check-glsl-extension.js +9 -10
- package/dist/es5/features/check-glsl-extension.js.map +1 -1
- package/dist/es5/features/check-old-ie.js +5 -6
- package/dist/es5/features/check-old-ie.js.map +1 -1
- package/dist/es5/features/features.js +23 -37
- package/dist/es5/features/features.js.map +1 -1
- package/dist/es5/features/index.js +8 -8
- package/dist/es5/features/index.js.map +1 -1
- package/dist/es5/features/limits.js +36 -28
- package/dist/es5/features/limits.js.map +1 -1
- package/dist/es5/features/webgl-features-table.js +35 -15
- package/dist/es5/features/webgl-features-table.js.map +1 -1
- package/dist/es5/features/webgl-limits-table.js +160 -120
- package/dist/es5/features/webgl-limits-table.js.map +1 -1
- package/dist/es5/index.js +144 -90
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/init.js +12 -36
- package/dist/es5/init.js.map +1 -1
- package/dist/es5/types.js +2 -0
- package/dist/es5/types.js.map +1 -0
- package/dist/es5/utils/array-utils-flat.js +13 -14
- package/dist/es5/utils/array-utils-flat.js.map +1 -1
- package/dist/es5/utils/assert.js +1 -1
- package/dist/es5/utils/assert.js.map +1 -1
- package/dist/es5/utils/check-props.js +20 -21
- package/dist/es5/utils/check-props.js.map +1 -1
- package/dist/es5/utils/format-value.js +14 -14
- package/dist/es5/utils/format-value.js.map +1 -1
- package/dist/es5/utils/index.js +68 -0
- package/dist/es5/utils/index.js.map +1 -0
- package/dist/es5/utils/is-old-ie.js +2 -3
- package/dist/es5/utils/is-old-ie.js.map +1 -1
- package/dist/es5/utils/load-file.js +11 -18
- package/dist/es5/utils/load-file.js.map +1 -1
- package/dist/es5/utils/stub-methods.js +4 -4
- package/dist/es5/utils/stub-methods.js.map +1 -1
- package/dist/es5/utils/utils.js +5 -10
- package/dist/es5/utils/utils.js.map +1 -1
- package/dist/es5/webgl-utils/attribute-utils.js +87 -74
- package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/es5/webgl-utils/constants-to-keys.js +7 -7
- package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/es5/webgl-utils/format-utils.js +21 -17
- package/dist/es5/webgl-utils/format-utils.js.map +1 -1
- package/dist/es5/webgl-utils/get-error.js +18 -18
- package/dist/es5/webgl-utils/get-error.js.map +1 -1
- package/dist/es5/webgl-utils/index.js +74 -0
- package/dist/es5/webgl-utils/index.js.map +1 -0
- package/dist/es5/webgl-utils/parse-shader-compiler-log.js +44 -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 +35 -29
- package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
- package/dist/es5/webgl-utils/typed-array-utils.js +51 -47
- package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
- package/dist/esm/bundle.js +2 -4
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/classes/accessor.js +7 -7
- package/dist/esm/classes/accessor.js.map +1 -1
- package/dist/esm/classes/accessor.ts.disabled +159 -0
- package/dist/esm/classes/clear.js +15 -13
- package/dist/esm/classes/clear.js.map +1 -1
- package/dist/esm/classes/copy-and-blit.js +41 -43
- package/dist/esm/classes/copy-and-blit.js.map +1 -1
- package/dist/esm/classes/framebuffer.js +336 -308
- package/dist/esm/classes/framebuffer.js.map +1 -1
- package/dist/esm/classes/program-configuration.js +17 -9
- package/dist/esm/classes/program-configuration.js.map +1 -1
- package/dist/esm/classes/program.js +69 -44
- package/dist/esm/classes/program.js.map +1 -1
- package/dist/esm/classes/query.js +17 -14
- 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 +84 -72
- package/dist/esm/classes/renderbuffer.js.map +1 -1
- package/dist/esm/classes/texture-2d.js +10 -3
- package/dist/esm/classes/texture-2d.js.map +1 -1
- package/dist/esm/classes/texture-3d.js +14 -11
- package/dist/esm/classes/texture-3d.js.map +1 -1
- package/dist/esm/classes/texture-cube.js +43 -28
- package/dist/esm/classes/texture-cube.js.map +1 -1
- package/dist/esm/classes/texture-formats.js +51 -50
- package/dist/esm/classes/texture-formats.js.map +1 -1
- package/dist/esm/classes/texture.js +164 -49
- package/dist/esm/classes/texture.js.map +1 -1
- package/dist/esm/classes/transform-feedback.js +24 -13
- 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 -112
- package/dist/esm/classes/uniforms.js.map +1 -1
- package/dist/esm/classes/vertex-array-object.js +52 -88
- package/dist/esm/classes/vertex-array-object.js.map +1 -1
- package/dist/esm/classes/vertex-array.js +50 -28
- package/dist/esm/classes/vertex-array.js.map +1 -1
- package/dist/esm/classes/webgl-buffer.js +379 -0
- package/dist/esm/classes/webgl-buffer.js.map +1 -0
- package/dist/esm/classes/webgl-resource.js +208 -0
- package/dist/esm/classes/webgl-resource.js.map +1 -0
- package/dist/esm/classes/webgl-shader.js +190 -0
- package/dist/esm/classes/webgl-shader.js.map +1 -0
- package/dist/esm/context/gl-context.js +32 -0
- package/dist/esm/context/gl-context.js.map +1 -0
- package/dist/esm/context/luma-context-data.js +5 -0
- package/dist/esm/context/luma-context-data.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 +19 -17
- package/dist/esm/debug/debug-vertex-array.js.map +1 -1
- package/dist/esm/features/check-glsl-extension.js +4 -4
- package/dist/esm/features/check-glsl-extension.js.map +1 -1
- package/dist/esm/features/check-old-ie.js.map +1 -1
- package/dist/esm/features/features.js +14 -13
- package/dist/esm/features/features.js.map +1 -1
- package/dist/esm/features/index.js.map +1 -1
- package/dist/esm/features/limits.js +25 -22
- package/dist/esm/features/limits.js.map +1 -1
- package/dist/esm/features/webgl-features-table.js +6 -6
- package/dist/esm/features/webgl-features-table.js.map +1 -1
- package/dist/esm/features/webgl-limits-table.js +43 -42
- package/dist/esm/features/webgl-limits-table.js.map +1 -1
- package/dist/esm/index.js +13 -15
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/init.js +4 -23
- package/dist/esm/init.js.map +1 -1
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/array-utils-flat.js.map +1 -1
- package/dist/esm/utils/assert.js +1 -1
- package/dist/esm/utils/assert.js.map +1 -1
- package/dist/esm/utils/check-props.js +4 -4
- package/dist/esm/utils/check-props.js.map +1 -1
- package/dist/esm/utils/format-value.js +4 -4
- package/dist/esm/utils/format-value.js.map +1 -1
- package/dist/esm/utils/index.js +7 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/is-old-ie.js +1 -1
- package/dist/esm/utils/is-old-ie.js.map +1 -1
- package/dist/esm/utils/load-file.js +2 -2
- package/dist/esm/utils/load-file.js.map +1 -1
- package/dist/esm/utils/stub-methods.js +2 -3
- package/dist/esm/utils/stub-methods.js.map +1 -1
- package/dist/esm/utils/utils.js +1 -3
- package/dist/esm/utils/utils.js.map +1 -1
- package/dist/esm/webgl-utils/attribute-utils.js +1 -1
- package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/esm/webgl-utils/constants-to-keys.js +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 +19 -18
- package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
- package/dist/features/check-glsl-extension.d.ts +2 -0
- package/dist/features/check-glsl-extension.d.ts.map +1 -0
- package/dist/features/check-glsl-extension.js +27 -0
- package/dist/features/check-glsl-extension.js.map +1 -0
- package/dist/features/check-old-ie.d.ts +2 -0
- package/dist/features/check-old-ie.d.ts.map +1 -0
- package/dist/features/check-old-ie.js +8 -0
- package/dist/features/check-old-ie.js.map +1 -0
- package/dist/features/features.d.ts +6 -0
- package/dist/features/features.d.ts.map +1 -0
- package/dist/features/features.js +67 -0
- package/dist/features/features.js.map +1 -0
- package/dist/features/index.d.ts +5 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +5 -0
- package/dist/features/index.js.map +1 -0
- package/dist/features/limits.d.ts +28 -0
- package/dist/features/limits.d.ts.map +1 -0
- package/dist/features/limits.js +55 -0
- package/dist/features/limits.js.map +1 -0
- package/dist/features/webgl-features-table.d.ts +30 -0
- package/dist/features/webgl-features-table.d.ts.map +1 -0
- package/dist/features/webgl-features-table.js +71 -0
- package/dist/features/webgl-features-table.js.map +1 -0
- package/dist/features/webgl-limits-table.d.ts +161 -0
- package/dist/features/webgl-limits-table.d.ts.map +1 -0
- package/dist/features/webgl-limits-table.js +161 -0
- package/dist/features/webgl-limits-table.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -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 +30 -0
- package/dist/init.js.map +1 -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/utils/array-utils-flat.d.ts +9 -0
- package/dist/utils/array-utils-flat.d.ts.map +1 -0
- package/dist/utils/array-utils-flat.js +39 -0
- package/dist/utils/array-utils-flat.js.map +1 -0
- package/dist/utils/assert.d.ts +2 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/assert.js +6 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/check-props.d.ts +2 -0
- package/dist/utils/check-props.d.ts.map +1 -0
- package/dist/utils/check-props.js +38 -0
- package/dist/utils/check-props.js.map +1 -0
- package/dist/utils/format-value.d.ts +5 -0
- package/dist/utils/format-value.d.ts.map +1 -0
- package/dist/utils/format-value.js +50 -0
- package/dist/utils/format-value.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/is-old-ie.d.ts +4 -0
- package/dist/utils/is-old-ie.d.ts.map +1 -0
- package/dist/utils/is-old-ie.js +5 -0
- package/dist/utils/is-old-ie.js.map +1 -0
- package/dist/utils/load-file.d.ts +4 -0
- package/dist/utils/load-file.d.ts.map +1 -0
- package/dist/utils/load-file.js +30 -0
- package/dist/utils/load-file.js.map +1 -0
- package/dist/utils/stub-methods.d.ts +2 -0
- package/dist/utils/stub-methods.d.ts.map +1 -0
- package/dist/utils/stub-methods.js +16 -0
- package/dist/utils/stub-methods.js.map +1 -0
- package/dist/utils/utils.d.ts +15 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +20 -0
- package/dist/utils/utils.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 +11 -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 +36 -0
- package/dist/webgl-utils/typed-array-utils.d.ts.map +1 -0
- package/dist/webgl-utils/typed-array-utils.js +108 -0
- package/dist/webgl-utils/typed-array-utils.js.map +1 -0
- package/package.json +9 -8
- package/src/bundle.ts +4 -0
- package/src/classes/accessor.js +3 -4
- package/src/classes/accessor.ts.disabled +159 -0
- package/src/classes/{clear.js → clear.ts} +13 -9
- package/src/classes/{copy-and-blit.js → copy-and-blit.ts} +113 -22
- package/src/classes/{framebuffer.js → framebuffer.ts} +355 -298
- package/src/classes/{program-configuration.js → program-configuration.ts} +18 -11
- package/src/classes/{program.js → program.ts} +56 -36
- package/src/classes/{query.js → query.ts} +28 -22
- package/src/classes/{renderbuffer-formats.js → renderbuffer-formats.ts} +42 -14
- package/src/classes/renderbuffer.ts +153 -0
- package/src/classes/{texture-2d.js → texture-2d.ts} +15 -5
- package/src/classes/{texture-3d.js → texture-3d.ts} +35 -10
- package/src/classes/{texture-cube.js → texture-cube.ts} +46 -28
- package/src/classes/{texture-formats.js → texture-formats.ts} +9 -1
- package/src/classes/{texture.js → texture.ts} +204 -37
- package/src/classes/{transform-feedback.js → transform-feedback.ts} +22 -14
- package/src/classes/{uniform-buffer-layout.js → uniform-buffer-layout.ts} +10 -6
- package/src/classes/{uniforms.js → uniforms.ts} +122 -70
- package/src/classes/{vertex-array-object.js → vertex-array-object.ts} +132 -107
- package/src/classes/{vertex-array.js → vertex-array.ts} +74 -54
- package/src/classes/{buffer.js → webgl-buffer.ts} +125 -51
- package/src/classes/{resource.js → webgl-resource.ts} +43 -36
- package/src/classes/webgl-shader.ts +200 -0
- package/src/context/gl-context.ts +31 -0
- package/src/context/luma-context-data.ts +27 -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} +7 -4
- package/src/features/{check-glsl-extension.js → check-glsl-extension.ts} +1 -1
- package/src/features/{check-old-ie.js → check-old-ie.ts} +0 -0
- package/src/features/{features.js → features.ts} +14 -13
- package/src/features/{index.js → index.ts} +0 -0
- package/src/features/{limits.js → limits.ts} +18 -17
- package/src/features/{webgl-features-table.js → webgl-features-table.ts} +0 -0
- package/src/features/{webgl-limits-table.js → webgl-limits-table.ts} +0 -0
- package/{dist/es5/index.d.ts → src/index.ts} +18 -16
- package/src/{init.js → init.ts} +1 -18
- package/{dist/es5/types.d.ts → src/types.ts} +0 -0
- package/src/utils/{array-utils-flat.js → array-utils-flat.ts} +0 -0
- package/src/utils/{assert.js → assert.ts} +1 -1
- package/src/utils/{check-props.js → check-props.ts} +0 -0
- package/src/utils/{format-value.js → format-value.ts} +2 -2
- package/src/utils/index.ts +6 -0
- package/src/utils/{is-old-ie.js → is-old-ie.ts} +1 -1
- package/src/utils/{load-file.js → load-file.ts} +3 -2
- package/src/utils/{stub-methods.js → stub-methods.ts} +1 -1
- package/src/utils/utils.ts +35 -0
- 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 +2 -1
- 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 +0 -453
- 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 +0 -308
- package/dist/es5/classes/resource.js.map +0 -1
- package/dist/es5/classes/shader.d.ts +0 -29
- package/dist/es5/classes/shader.js +0 -221
- package/dist/es5/classes/shader.js.map +0 -1
- 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/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/init.d.ts +0 -12
- package/dist/es5/utils/assert.d.ts +0 -1
- package/dist/es5/utils/is-old-ie.d.ts +0 -1
- package/dist/es5/utils/utils.d.ts +0 -13
- package/dist/es5/webgl-utils/request-animation-frame.d.ts +0 -3
- 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/shader.js +0 -138
- package/dist/esm/classes/shader.js.map +0 -1
- 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/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/assert.d.ts +0 -1
- package/dist/esm/utils/is-old-ie.d.ts +0 -1
- package/dist/esm/utils/utils.d.ts +0 -13
- package/dist/esm/webgl-utils/request-animation-frame.d.ts +0 -3
- 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.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-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/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/types.d.ts +0 -8
- package/src/utils/assert.d.ts +0 -1
- package/src/utils/is-old-ie.d.ts +0 -1
- 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
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import GL from '@luma.gl/constants';
|
|
3
|
+
import { getWebGL2Context, assertWebGL2Context, log } from '@luma.gl/gltools';
|
|
4
|
+
import { Buffer } from '@luma.gl/api';
|
|
5
|
+
import Accessor from './accessor';
|
|
6
|
+
import { getGLTypeFromTypedArray, getTypedArrayFromGLType } from '../webgl-utils';
|
|
7
|
+
import { assert, checkProps } from '../utils';
|
|
8
|
+
const DEBUG_DATA_LENGTH = 10;
|
|
9
|
+
const DEPRECATED_PROPS = {
|
|
10
|
+
offset: 'accessor.offset',
|
|
11
|
+
stride: 'accessor.stride',
|
|
12
|
+
type: 'accessor.type',
|
|
13
|
+
size: 'accessor.size',
|
|
14
|
+
divisor: 'accessor.divisor',
|
|
15
|
+
normalized: 'accessor.normalized',
|
|
16
|
+
integer: 'accessor.integer',
|
|
17
|
+
instanced: 'accessor.divisor',
|
|
18
|
+
isInstanced: 'accessor.divisor'
|
|
19
|
+
};
|
|
20
|
+
const PROP_CHECKS_INITIALIZE = {
|
|
21
|
+
removedProps: {},
|
|
22
|
+
replacedProps: {
|
|
23
|
+
bytes: 'byteLength'
|
|
24
|
+
},
|
|
25
|
+
deprecatedProps: DEPRECATED_PROPS
|
|
26
|
+
};
|
|
27
|
+
const PROP_CHECKS_SET_PROPS = {
|
|
28
|
+
removedProps: DEPRECATED_PROPS
|
|
29
|
+
};
|
|
30
|
+
export default class WEBGLBuffer extends Buffer {
|
|
31
|
+
constructor(gl, props = {}) {
|
|
32
|
+
super(gl, props);
|
|
33
|
+
|
|
34
|
+
_defineProperty(this, "gl", void 0);
|
|
35
|
+
|
|
36
|
+
_defineProperty(this, "gl2", void 0);
|
|
37
|
+
|
|
38
|
+
_defineProperty(this, "handle", void 0);
|
|
39
|
+
|
|
40
|
+
_defineProperty(this, "target", void 0);
|
|
41
|
+
|
|
42
|
+
_defineProperty(this, "usage", void 0);
|
|
43
|
+
|
|
44
|
+
_defineProperty(this, "byteLength", void 0);
|
|
45
|
+
|
|
46
|
+
_defineProperty(this, "bytesUsed", void 0);
|
|
47
|
+
|
|
48
|
+
_defineProperty(this, "accessor", void 0);
|
|
49
|
+
|
|
50
|
+
_defineProperty(this, "debugData", void 0);
|
|
51
|
+
|
|
52
|
+
this.gl = gl;
|
|
53
|
+
this.gl2 = getWebGL2Context(gl);
|
|
54
|
+
const handle = typeof props === 'object' ? props.handle : undefined;
|
|
55
|
+
this.handle = handle || this.gl.createBuffer();
|
|
56
|
+
this.target = props.target || (this.gl.webgl2 ? GL.COPY_READ_BUFFER : GL.ARRAY_BUFFER);
|
|
57
|
+
this.initialize(props);
|
|
58
|
+
Object.seal(this);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
destroy() {
|
|
62
|
+
if (this.handle) {
|
|
63
|
+
this.removeStats();
|
|
64
|
+
this.trackDeallocatedMemory();
|
|
65
|
+
this.gl.deleteBuffer(this.handle);
|
|
66
|
+
this.handle = null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
getElementCount(accessor = this.accessor) {
|
|
71
|
+
return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
getVertexCount(accessor = this.accessor) {
|
|
75
|
+
return Math.round(this.byteLength / Accessor.getBytesPerVertex(accessor));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
initialize(props = {}) {
|
|
79
|
+
if (ArrayBuffer.isView(props)) {
|
|
80
|
+
props = {
|
|
81
|
+
data: props
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (Number.isFinite(props)) {
|
|
86
|
+
props = {
|
|
87
|
+
byteLength: props
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
props = checkProps('Buffer', props, PROP_CHECKS_INITIALIZE);
|
|
92
|
+
this.usage = props.usage || GL.STATIC_DRAW;
|
|
93
|
+
this.debugData = null;
|
|
94
|
+
this.setAccessor(Object.assign({}, props, props.accessor));
|
|
95
|
+
|
|
96
|
+
if (props.data) {
|
|
97
|
+
this._setData(props.data, props.offset, props.byteLength);
|
|
98
|
+
} else {
|
|
99
|
+
this._setByteLength(props.byteLength || 0);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
setProps(props) {
|
|
106
|
+
props = checkProps('Buffer', props, PROP_CHECKS_SET_PROPS);
|
|
107
|
+
|
|
108
|
+
if ('accessor' in props) {
|
|
109
|
+
this.setAccessor(props.accessor);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
setAccessor(accessor) {
|
|
116
|
+
accessor = Object.assign({}, accessor);
|
|
117
|
+
delete accessor.buffer;
|
|
118
|
+
this.accessor = new Accessor(accessor);
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
reallocate(byteLength) {
|
|
123
|
+
if (byteLength > this.byteLength) {
|
|
124
|
+
this._setByteLength(byteLength);
|
|
125
|
+
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
this.bytesUsed = byteLength;
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
setData(props) {
|
|
134
|
+
return this.initialize(props);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
subData(props) {
|
|
138
|
+
if (ArrayBuffer.isView(props)) {
|
|
139
|
+
props = {
|
|
140
|
+
data: props
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const {
|
|
145
|
+
data,
|
|
146
|
+
offset = 0,
|
|
147
|
+
srcOffset = 0
|
|
148
|
+
} = props;
|
|
149
|
+
const byteLength = props.byteLength || props.length;
|
|
150
|
+
assert(data);
|
|
151
|
+
const target = this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;
|
|
152
|
+
this.gl.bindBuffer(target, this.handle);
|
|
153
|
+
|
|
154
|
+
if (srcOffset !== 0 || byteLength !== undefined) {
|
|
155
|
+
assertWebGL2Context(this.gl);
|
|
156
|
+
this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);
|
|
157
|
+
} else {
|
|
158
|
+
this.gl.bufferSubData(target, offset, data);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
this.gl.bindBuffer(target, null);
|
|
162
|
+
this.debugData = null;
|
|
163
|
+
|
|
164
|
+
this._inferType(data);
|
|
165
|
+
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
copyData(options) {
|
|
170
|
+
const {
|
|
171
|
+
sourceBuffer,
|
|
172
|
+
readOffset = 0,
|
|
173
|
+
writeOffset = 0,
|
|
174
|
+
size
|
|
175
|
+
} = options;
|
|
176
|
+
const {
|
|
177
|
+
gl,
|
|
178
|
+
gl2
|
|
179
|
+
} = this;
|
|
180
|
+
assertWebGL2Context(gl);
|
|
181
|
+
gl.bindBuffer(GL.COPY_READ_BUFFER, sourceBuffer.handle);
|
|
182
|
+
gl.bindBuffer(GL.COPY_WRITE_BUFFER, this.handle);
|
|
183
|
+
gl2.copyBufferSubData(GL.COPY_READ_BUFFER, GL.COPY_WRITE_BUFFER, readOffset, writeOffset, size);
|
|
184
|
+
gl.bindBuffer(GL.COPY_READ_BUFFER, null);
|
|
185
|
+
gl.bindBuffer(GL.COPY_WRITE_BUFFER, null);
|
|
186
|
+
this.debugData = null;
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
getData(options) {
|
|
191
|
+
let {
|
|
192
|
+
dstData = null,
|
|
193
|
+
length = 0
|
|
194
|
+
} = options || {};
|
|
195
|
+
const {
|
|
196
|
+
srcByteOffset = 0,
|
|
197
|
+
dstOffset = 0
|
|
198
|
+
} = options || {};
|
|
199
|
+
assertWebGL2Context(this.gl);
|
|
200
|
+
const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {
|
|
201
|
+
clamped: false
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
const sourceAvailableElementCount = this._getAvailableElementCount(srcByteOffset);
|
|
205
|
+
|
|
206
|
+
const dstElementOffset = dstOffset;
|
|
207
|
+
let dstAvailableElementCount;
|
|
208
|
+
let dstElementCount;
|
|
209
|
+
|
|
210
|
+
if (dstData) {
|
|
211
|
+
dstElementCount = dstData.length;
|
|
212
|
+
dstAvailableElementCount = dstElementCount - dstElementOffset;
|
|
213
|
+
} else {
|
|
214
|
+
dstAvailableElementCount = Math.min(sourceAvailableElementCount, length || sourceAvailableElementCount);
|
|
215
|
+
dstElementCount = dstElementOffset + dstAvailableElementCount;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const copyElementCount = Math.min(sourceAvailableElementCount, dstAvailableElementCount);
|
|
219
|
+
length = length || copyElementCount;
|
|
220
|
+
assert(length <= copyElementCount);
|
|
221
|
+
dstData = dstData || new ArrayType(dstElementCount);
|
|
222
|
+
this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);
|
|
223
|
+
this.gl2.getBufferSubData(GL.COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);
|
|
224
|
+
this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);
|
|
225
|
+
return dstData;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
bind(options) {
|
|
229
|
+
const {
|
|
230
|
+
target = this.target,
|
|
231
|
+
index = this.accessor && this.accessor.index,
|
|
232
|
+
offset = 0,
|
|
233
|
+
size
|
|
234
|
+
} = options || {};
|
|
235
|
+
|
|
236
|
+
if (target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER) {
|
|
237
|
+
if (size !== undefined) {
|
|
238
|
+
this.gl2.bindBufferRange(target, index, this.handle, offset, size);
|
|
239
|
+
} else {
|
|
240
|
+
assert(offset === 0);
|
|
241
|
+
this.gl2.bindBufferBase(target, index, this.handle);
|
|
242
|
+
}
|
|
243
|
+
} else {
|
|
244
|
+
this.gl.bindBuffer(target, this.handle);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return this;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
unbind(options) {
|
|
251
|
+
const {
|
|
252
|
+
target = this.target,
|
|
253
|
+
index = this.accessor && this.accessor.index
|
|
254
|
+
} = options || {};
|
|
255
|
+
const isIndexedBuffer = target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER;
|
|
256
|
+
|
|
257
|
+
if (isIndexedBuffer) {
|
|
258
|
+
this.gl2.bindBufferBase(target, index, null);
|
|
259
|
+
} else {
|
|
260
|
+
this.gl.bindBuffer(target, null);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return this;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
getDebugData() {
|
|
267
|
+
if (!this.debugData) {
|
|
268
|
+
this.debugData = this.getData({
|
|
269
|
+
length: Math.min(DEBUG_DATA_LENGTH, this.byteLength)
|
|
270
|
+
});
|
|
271
|
+
return {
|
|
272
|
+
data: this.debugData,
|
|
273
|
+
changed: true
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return {
|
|
278
|
+
data: this.debugData,
|
|
279
|
+
changed: false
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
invalidateDebugData() {
|
|
284
|
+
this.debugData = null;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
_setData(data, offset = 0, byteLength = data.byteLength + offset) {
|
|
288
|
+
assert(ArrayBuffer.isView(data));
|
|
289
|
+
this.trackDeallocatedMemory();
|
|
290
|
+
|
|
291
|
+
const target = this._getTarget();
|
|
292
|
+
|
|
293
|
+
this.gl.bindBuffer(target, this.handle);
|
|
294
|
+
this.gl.bufferData(target, byteLength, this.usage);
|
|
295
|
+
this.gl.bufferSubData(target, offset, data);
|
|
296
|
+
this.gl.bindBuffer(target, null);
|
|
297
|
+
this.debugData = data.slice(0, DEBUG_DATA_LENGTH);
|
|
298
|
+
this.bytesUsed = byteLength;
|
|
299
|
+
this.byteLength = byteLength;
|
|
300
|
+
this.trackAllocatedMemory(byteLength);
|
|
301
|
+
const type = getGLTypeFromTypedArray(data);
|
|
302
|
+
assert(type);
|
|
303
|
+
this.setAccessor(new Accessor(this.accessor, {
|
|
304
|
+
type
|
|
305
|
+
}));
|
|
306
|
+
return this;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
_setByteLength(byteLength, usage = this.usage) {
|
|
310
|
+
assert(byteLength >= 0);
|
|
311
|
+
this.trackDeallocatedMemory();
|
|
312
|
+
let data = byteLength;
|
|
313
|
+
|
|
314
|
+
if (byteLength === 0) {
|
|
315
|
+
data = new Float32Array(0);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
const target = this._getTarget();
|
|
319
|
+
|
|
320
|
+
this.gl.bindBuffer(target, this.handle);
|
|
321
|
+
this.gl.bufferData(target, data, usage);
|
|
322
|
+
this.gl.bindBuffer(target, null);
|
|
323
|
+
this.usage = usage;
|
|
324
|
+
this.debugData = null;
|
|
325
|
+
this.bytesUsed = byteLength;
|
|
326
|
+
this.byteLength = byteLength;
|
|
327
|
+
this.trackAllocatedMemory(byteLength);
|
|
328
|
+
return this;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
_getTarget() {
|
|
332
|
+
return this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
_getAvailableElementCount(srcByteOffset) {
|
|
336
|
+
const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {
|
|
337
|
+
clamped: false
|
|
338
|
+
});
|
|
339
|
+
const sourceElementOffset = srcByteOffset / ArrayType.BYTES_PER_ELEMENT;
|
|
340
|
+
return this.getElementCount() - sourceElementOffset;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
_inferType(data) {
|
|
344
|
+
if (!this.accessor.type) {
|
|
345
|
+
this.setAccessor(new Accessor(this.accessor, {
|
|
346
|
+
type: getGLTypeFromTypedArray(data)
|
|
347
|
+
}));
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
getParameter(pname) {
|
|
352
|
+
this.gl.bindBuffer(this.target, this.handle);
|
|
353
|
+
const value = this.gl.getBufferParameter(this.target, pname);
|
|
354
|
+
this.gl.bindBuffer(this.target, null);
|
|
355
|
+
return value;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
get type() {
|
|
359
|
+
return this.accessor.type;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
get bytes() {
|
|
363
|
+
log.deprecated('Buffer.bytes', 'Buffer.byteLength')();
|
|
364
|
+
return this.byteLength;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
setByteLength(byteLength) {
|
|
368
|
+
log.deprecated('setByteLength', 'reallocate')();
|
|
369
|
+
return this.reallocate(byteLength);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
updateAccessor(opts) {
|
|
373
|
+
log.deprecated('updateAccessor(...)', 'setAccessor(new Accessor(buffer.accessor, ...)')();
|
|
374
|
+
this.accessor = new Accessor(this.accessor, opts);
|
|
375
|
+
return this;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=webgl-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/webgl-buffer.ts"],"names":["GL","getWebGL2Context","assertWebGL2Context","log","Buffer","Accessor","getGLTypeFromTypedArray","getTypedArrayFromGLType","assert","checkProps","DEBUG_DATA_LENGTH","DEPRECATED_PROPS","offset","stride","type","size","divisor","normalized","integer","instanced","isInstanced","PROP_CHECKS_INITIALIZE","removedProps","replacedProps","bytes","deprecatedProps","PROP_CHECKS_SET_PROPS","WEBGLBuffer","constructor","gl","props","gl2","handle","undefined","createBuffer","target","webgl2","COPY_READ_BUFFER","ARRAY_BUFFER","initialize","Object","seal","destroy","removeStats","trackDeallocatedMemory","deleteBuffer","getElementCount","accessor","Math","round","byteLength","getBytesPerElement","getVertexCount","getBytesPerVertex","ArrayBuffer","isView","data","Number","isFinite","usage","STATIC_DRAW","debugData","setAccessor","assign","_setData","_setByteLength","setProps","buffer","reallocate","bytesUsed","setData","subData","srcOffset","length","COPY_WRITE_BUFFER","bindBuffer","bufferSubData","_inferType","copyData","options","sourceBuffer","readOffset","writeOffset","copyBufferSubData","getData","dstData","srcByteOffset","dstOffset","ArrayType","FLOAT","clamped","sourceAvailableElementCount","_getAvailableElementCount","dstElementOffset","dstAvailableElementCount","dstElementCount","min","copyElementCount","getBufferSubData","bind","index","UNIFORM_BUFFER","TRANSFORM_FEEDBACK_BUFFER","bindBufferRange","bindBufferBase","unbind","isIndexedBuffer","getDebugData","changed","invalidateDebugData","_getTarget","bufferData","slice","trackAllocatedMemory","Float32Array","sourceElementOffset","BYTES_PER_ELEMENT","getParameter","pname","value","getBufferParameter","deprecated","setByteLength","updateAccessor","opts"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {getWebGL2Context, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport {Buffer, BufferProps} from '@luma.gl/api';\nimport {AccessorObject} from '../types';\nimport Accessor from './accessor';\nimport {getGLTypeFromTypedArray, getTypedArrayFromGLType} from '../webgl-utils';\nimport {assert, checkProps} from '../utils';\n\nconst DEBUG_DATA_LENGTH = 10;\n\n// Shared prop checks for constructor and setProps\nconst DEPRECATED_PROPS = {\n offset: 'accessor.offset',\n stride: 'accessor.stride',\n type: 'accessor.type',\n size: 'accessor.size',\n divisor: 'accessor.divisor',\n normalized: 'accessor.normalized',\n integer: 'accessor.integer',\n instanced: 'accessor.divisor',\n isInstanced: 'accessor.divisor'\n};\n\n// Prop checks for constructor\nconst PROP_CHECKS_INITIALIZE = {\n removedProps: {},\n replacedProps: {\n bytes: 'byteLength'\n },\n // new Buffer() with individual accessor props is still used in apps, emit warnings\n deprecatedProps: DEPRECATED_PROPS\n};\n\n// Prop checks for setProps\nconst PROP_CHECKS_SET_PROPS = {\n // Buffer.setProps() with individual accessor props is rare => emit errors\n removedProps: DEPRECATED_PROPS\n};\n\n/** WebGL Buffer interface */\nexport type WebGLBufferProps = BufferProps & {\n handle?: WebGLBuffer;\n data?: any; // ArrayBufferView;\n byteLength?: number;\n target?: number;\n usage?: number;\n accessor?: AccessorObject;\n\n /** @deprecated */\n index?: number;\n /** @deprecated */\n offset?: number;\n /** @deprecated */\n size?: number;\n /** @deprecated */\n type?: number\n}\n\n/** WebGL Buffer interface */\nexport default class WEBGLBuffer extends Buffer {\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext | null;\n readonly handle: WebGLBuffer;\n\n target: number;\n usage: number;\n\n byteLength: number;\n bytesUsed: number;\n\n accessor: Accessor;\n\n debugData;\n\n constructor(gl: WebGLRenderingContext, props?: BufferProps);\n constructor(gl: WebGLRenderingContext, data: ArrayBufferView | number[]);\n constructor(gl: WebGLRenderingContext, byteLength: number);\n\n constructor(gl: WebGLRenderingContext, props = {}) {\n super(gl as any, props);\n\n this.gl = gl;\n this.gl2 = getWebGL2Context(gl);\n const handle = typeof props === 'object' ? (props as BufferProps).handle : undefined;\n this.handle = handle || this.gl.createBuffer();\n\n // In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers\n // otherwise buffer type will lock to generic (non-element) buffer\n // In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here\n // @ts-expect-error\n this.target = props.target || (this.gl.webgl2 ? GL.COPY_READ_BUFFER : GL.ARRAY_BUFFER);\n\n this.initialize(props);\n\n Object.seal(this);\n }\n\n destroy(): void {\n if (this.handle) {\n this.removeStats();\n this.trackDeallocatedMemory();\n this.gl.deleteBuffer(this.handle);\n // @ts-expect-error\n this.handle = null;\n }\n }\n\n // returns number of elements in the buffer (assuming that the full buffer is used)\n getElementCount(accessor = this.accessor): number {\n return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));\n }\n\n // returns number of vertices in the buffer (assuming that the full buffer is used)\n getVertexCount(accessor = this.accessor): number {\n return Math.round(this.byteLength / Accessor.getBytesPerVertex(accessor));\n }\n\n // Creates and initializes the buffer object's data store.\n // Signature: `new Buffer(gl, {data: new Float32Array(...)})`\n // Signature: `new Buffer(gl, new Float32Array(...))`\n // Signature: `new Buffer(gl, 100)`\n initialize(props: BufferProps = {}): this {\n // Signature `new Buffer(gl, new Float32Array(...)`\n if (ArrayBuffer.isView(props)) {\n props = {data: props};\n }\n\n // Signature: `new Buffer(gl, 100)`\n if (Number.isFinite(props)) {\n // @ts-expect-error\n props = {byteLength: props};\n }\n\n props = checkProps('Buffer', props, PROP_CHECKS_INITIALIZE);\n\n // Initialize member fields\n this.usage = props.usage || GL.STATIC_DRAW;\n this.debugData = null;\n\n // Deprecated: Merge main props and accessor\n this.setAccessor(Object.assign({}, props, props.accessor));\n\n // Set data: (re)initializes the buffer\n if (props.data) {\n this._setData(props.data, props.offset, props.byteLength);\n } else {\n this._setByteLength(props.byteLength || 0);\n }\n\n return this;\n }\n\n setProps(props: BufferProps): this {\n props = checkProps('Buffer', props, PROP_CHECKS_SET_PROPS);\n\n if ('accessor' in props) {\n this.setAccessor(props.accessor);\n }\n\n return this;\n }\n\n // Optionally stores an accessor with the buffer, makes it easier to use it as an attribute later\n // {type, size = 1, offset = 0, stride = 0, normalized = false, integer = false, divisor = 0}\n setAccessor(accessor): this {\n // NOTE: From luma.gl v7.0, Accessors have an optional `buffer `field\n // (mainly to support \"interleaving\")\n // To avoid confusion, ensure `buffer.accessor` does not have a `buffer.accessor.buffer` field:\n accessor = Object.assign({}, accessor);\n delete accessor.buffer;\n\n // This new statement ensures that an \"accessor object\" is re-packaged as an Accessor instance\n this.accessor = new Accessor(accessor);\n return this;\n }\n\n // Allocate a bigger GPU buffer (if the current buffer is not big enough).\n // If a reallocation is triggered it clears the buffer\n // Returns:\n // `true`: buffer was reallocated, data was cleared\n // `false`: buffer was big enough, data is intact\n reallocate(byteLength) {\n if (byteLength > this.byteLength) {\n this._setByteLength(byteLength);\n return true;\n }\n this.bytesUsed = byteLength;\n return false;\n }\n\n // Update with new data. Reinitializes the buffer\n setData(props) {\n return this.initialize(props);\n }\n\n // Updates a subset of a buffer object's data store.\n // Data (Typed Array or ArrayBuffer), length is inferred unless provided\n // Offset into buffer\n // WebGL2 only: Offset into srcData\n // WebGL2 only: Number of bytes to be copied\n subData(props) {\n // Signature: buffer.subData(new Float32Array([...]))\n if (ArrayBuffer.isView(props)) {\n props = {data: props};\n }\n\n const {data, offset = 0, srcOffset = 0} = props;\n const byteLength = props.byteLength || props.length;\n\n assert(data);\n\n // Create the buffer - binding it here for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n // @ts-expect-error\n const target = this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;\n this.gl.bindBuffer(target, this.handle);\n // WebGL2: subData supports additional srcOffset and length parameters\n if (srcOffset !== 0 || byteLength !== undefined) {\n assertWebGL2Context(this.gl);\n // @ts-expect-error\n this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);\n } else {\n this.gl.bufferSubData(target, offset, data);\n }\n this.gl.bindBuffer(target, null);\n\n // TODO - update local `data` if offsets are right\n this.debugData = null;\n\n this._inferType(data);\n\n return this;\n }\n\n /**\n * Copies part of the data of another buffer into this buffer \n * @note WEBGL2 ONLY\n */\n copyData(options: {\n sourceBuffer: any;\n readOffset?: number;\n writeOffset?: number;\n size: any;\n }): this {\n const {sourceBuffer, readOffset = 0, writeOffset = 0, size} = options;\n const {gl, gl2} = this;\n assertWebGL2Context(gl);\n\n // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type\n gl.bindBuffer(GL.COPY_READ_BUFFER, sourceBuffer.handle);\n gl.bindBuffer(GL.COPY_WRITE_BUFFER, this.handle);\n gl2.copyBufferSubData(GL.COPY_READ_BUFFER, GL.COPY_WRITE_BUFFER, readOffset, writeOffset, size);\n gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n gl.bindBuffer(GL.COPY_WRITE_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n this.debugData = null;\n\n return this;\n }\n\n /**\n * Reads data from buffer into an ArrayBufferView or SharedArrayBuffer.\n * @note WEBGL2 ONLY\n */\n getData(options?: {\n dstData?: any;\n srcByteOffset?: number;\n dstOffset?: number;\n length?: number;\n }): any {\n let {dstData = null, length = 0} = options || {};\n const {srcByteOffset = 0, dstOffset = 0} = options || {};\n assertWebGL2Context(this.gl);\n\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {clamped: false});\n const sourceAvailableElementCount = this._getAvailableElementCount(srcByteOffset);\n\n const dstElementOffset = dstOffset;\n\n let dstAvailableElementCount;\n let dstElementCount;\n if (dstData) {\n dstElementCount = dstData.length;\n dstAvailableElementCount = dstElementCount - dstElementOffset;\n } else {\n // Allocate ArrayBufferView with enough size to copy all eligible data.\n dstAvailableElementCount = Math.min(\n sourceAvailableElementCount,\n length || sourceAvailableElementCount\n );\n dstElementCount = dstElementOffset + dstAvailableElementCount;\n }\n\n const copyElementCount = Math.min(sourceAvailableElementCount, dstAvailableElementCount);\n length = length || copyElementCount;\n assert(length <= copyElementCount);\n dstData = dstData || new ArrayType(dstElementCount);\n\n // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);\n this.gl2.getBufferSubData(GL.COPY_READ_BUFFER, srcByteOffset, dstData, dstOffset, length);\n this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);\n\n // TODO - update local `data` if offsets are 0\n return dstData;\n }\n\n /**\n * Binds a buffer to a given binding point (target).\n * GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER take an index, and optionally a range.\n * - GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER need an index to affect state\n * - GL.UNIFORM_BUFFER: `offset` must be aligned to GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT.\n * - GL.UNIFORM_BUFFER: `size` must be a minimum of GL.UNIFORM_BLOCK_SIZE_DATA.\n */\n bind(options?: {target?: number; index?: any; offset?: number; size: any}): this {\n const {\n target = this.target, // target for the bind operation\n // @ts-expect-error\n index = this.accessor && this.accessor.index, // index = index of target (indexed bind point)\n offset = 0,\n size\n } = options || {};\n // NOTE: While GL.TRANSFORM_FEEDBACK_BUFFER and GL.UNIFORM_BUFFER could\n // be used as direct binding points, they will not affect transform feedback or\n // uniform buffer state. Instead indexed bindings need to be made.\n if (target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER) {\n if (size !== undefined) {\n this.gl2.bindBufferRange(target, index, this.handle, offset, size);\n } else {\n assert(offset === 0); // Make sure offset wasn't supplied\n this.gl2.bindBufferBase(target, index, this.handle);\n }\n } else {\n this.gl.bindBuffer(target, this.handle);\n }\n\n return this;\n }\n\n unbind(options?: {target?: any; index?: any}): this {\n // @ts-expect-error\n const {target = this.target, index = this.accessor && this.accessor.index} = options || {};\n const isIndexedBuffer = target === GL.UNIFORM_BUFFER || target === GL.TRANSFORM_FEEDBACK_BUFFER;\n if (isIndexedBuffer) {\n this.gl2.bindBufferBase(target, index, null);\n } else {\n this.gl.bindBuffer(target, null);\n }\n return this;\n }\n\n // PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)\n\n // Returns a short initial data array\n getDebugData(): {\n data: any;\n changed: boolean;\n } {\n if (!this.debugData) {\n this.debugData = this.getData({length: Math.min(DEBUG_DATA_LENGTH, this.byteLength)});\n return {data: this.debugData, changed: true};\n }\n return {data: this.debugData, changed: false};\n }\n\n invalidateDebugData() {\n this.debugData = null;\n }\n\n // PRIVATE METHODS\n\n // Allocate a new buffer and initialize to contents of typed array\n _setData(data, offset: number = 0, byteLength: number = data.byteLength + offset): this {\n assert(ArrayBuffer.isView(data));\n\n this.trackDeallocatedMemory();\n\n const target = this._getTarget();\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, byteLength, this.usage);\n this.gl.bufferSubData(target, offset, data);\n this.gl.bindBuffer(target, null);\n\n this.debugData = data.slice(0, DEBUG_DATA_LENGTH);\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n this.trackAllocatedMemory(byteLength);\n\n // infer GL type from supplied typed array\n const type = getGLTypeFromTypedArray(data);\n assert(type);\n this.setAccessor(new Accessor(this.accessor, {type}));\n return this;\n }\n\n // Allocate a GPU buffer of specified size.\n _setByteLength(byteLength: number, usage = this.usage): this {\n assert(byteLength >= 0);\n\n this.trackDeallocatedMemory();\n\n // Workaround needed for Safari (#291):\n // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.\n let data = byteLength;\n if (byteLength === 0) {\n // @ts-expect-error\n data = new Float32Array(0);\n }\n\n const target = this._getTarget();\n this.gl.bindBuffer(target, this.handle);\n this.gl.bufferData(target, data, usage);\n this.gl.bindBuffer(target, null);\n\n this.usage = usage;\n this.debugData = null;\n this.bytesUsed = byteLength;\n this.byteLength = byteLength;\n\n this.trackAllocatedMemory(byteLength);\n\n return this;\n }\n\n // Binding a buffer for the first time locks the type\n // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type\n _getTarget() {\n // @ts-expect-error\n return this.gl.webgl2 ? GL.COPY_WRITE_BUFFER : this.target;\n }\n\n _getAvailableElementCount(srcByteOffset) {\n const ArrayType = getTypedArrayFromGLType(this.accessor.type || GL.FLOAT, {clamped: false});\n const sourceElementOffset = srcByteOffset / ArrayType.BYTES_PER_ELEMENT;\n return this.getElementCount() - sourceElementOffset;\n }\n\n // Automatically infers type from typed array passed to setData\n // Note: No longer that useful, since type is now autodeduced from the compiled shaders\n _inferType(data) {\n if (!this.accessor.type) {\n this.setAccessor(new Accessor(this.accessor, {type: getGLTypeFromTypedArray(data)}));\n }\n }\n\n // RESOURCE METHODS\n\n getParameter(pname) {\n this.gl.bindBuffer(this.target, this.handle);\n const value = this.gl.getBufferParameter(this.target, pname);\n this.gl.bindBuffer(this.target, null);\n return value;\n }\n\n // DEPRECATIONS - v7.0\n /** @deprecated Use Buffer.accessor.type */\n get type() {\n return this.accessor.type;\n }\n\n get bytes() {\n log.deprecated('Buffer.bytes', 'Buffer.byteLength')();\n return this.byteLength;\n }\n\n // DEPRECATIONS - v6.0\n // Deprecated in v6.x, but not warnings not properly implemented\n setByteLength(byteLength) {\n log.deprecated('setByteLength', 'reallocate')();\n return this.reallocate(byteLength);\n }\n\n // Deprecated in v6.x, but not warnings not properly implemented\n updateAccessor(opts) {\n log.deprecated('updateAccessor(...)', 'setAccessor(new Accessor(buffer.accessor, ...)')();\n this.accessor = new Accessor(this.accessor, opts);\n return this;\n }\n}\n"],"file":"webgl-buffer.js"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { isWebGL2, assertWebGLContext } from '@luma.gl/gltools';
|
|
3
|
+
import { Resource } from '@luma.gl/api';
|
|
4
|
+
import { getKey, getKeyValue } from '../webgl-utils';
|
|
5
|
+
import { uid, assert, stubRemovedMethods } from '../utils';
|
|
6
|
+
const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';
|
|
7
|
+
export default class WebGLResource extends Resource {
|
|
8
|
+
constructor(gl, props, defaultProps) {
|
|
9
|
+
super(gl, props, defaultProps);
|
|
10
|
+
|
|
11
|
+
_defineProperty(this, "id", void 0);
|
|
12
|
+
|
|
13
|
+
_defineProperty(this, "gl", void 0);
|
|
14
|
+
|
|
15
|
+
_defineProperty(this, "gl2", void 0);
|
|
16
|
+
|
|
17
|
+
_defineProperty(this, "userData", void 0);
|
|
18
|
+
|
|
19
|
+
_defineProperty(this, "_handle", void 0);
|
|
20
|
+
|
|
21
|
+
_defineProperty(this, "_bound", false);
|
|
22
|
+
|
|
23
|
+
_defineProperty(this, "byteLength", 0);
|
|
24
|
+
|
|
25
|
+
assertWebGLContext(gl);
|
|
26
|
+
const {
|
|
27
|
+
id,
|
|
28
|
+
userData = {}
|
|
29
|
+
} = props || {};
|
|
30
|
+
this.gl = gl;
|
|
31
|
+
this.gl2 = gl;
|
|
32
|
+
this.id = id || uid(this.constructor.name);
|
|
33
|
+
this.userData = userData;
|
|
34
|
+
this._handle = props === null || props === void 0 ? void 0 : props.handle;
|
|
35
|
+
|
|
36
|
+
if (this._handle === undefined) {
|
|
37
|
+
this._handle = this._createHandle();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
this.byteLength = 0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
toString() {
|
|
44
|
+
return "".concat(this.constructor.name, "(").concat(this.id, ")");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
get handle() {
|
|
48
|
+
return this._handle;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
delete({
|
|
52
|
+
deleteChildren = false
|
|
53
|
+
} = {}) {
|
|
54
|
+
const children = this._handle && this._deleteHandle(this._handle);
|
|
55
|
+
|
|
56
|
+
if (this._handle) {
|
|
57
|
+
this.removeStats();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
this._handle = null;
|
|
61
|
+
|
|
62
|
+
if (children && deleteChildren) {
|
|
63
|
+
children.filter(Boolean).forEach(child => child.delete());
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
bind(funcOrHandle = this.handle) {
|
|
70
|
+
if (typeof funcOrHandle !== 'function') {
|
|
71
|
+
this._bindHandle(funcOrHandle);
|
|
72
|
+
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
let value;
|
|
77
|
+
|
|
78
|
+
if (!this._bound) {
|
|
79
|
+
this._bindHandle(this.handle);
|
|
80
|
+
|
|
81
|
+
this._bound = true;
|
|
82
|
+
value = funcOrHandle();
|
|
83
|
+
this._bound = false;
|
|
84
|
+
|
|
85
|
+
this._bindHandle(null);
|
|
86
|
+
} else {
|
|
87
|
+
value = funcOrHandle();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
unbind() {
|
|
94
|
+
this.bind(null);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
getParameter(pname, props = {}) {
|
|
98
|
+
pname = getKeyValue(this.gl, pname);
|
|
99
|
+
assert(pname);
|
|
100
|
+
const parameters = this.constructor.PARAMETERS || {};
|
|
101
|
+
const parameter = parameters[pname];
|
|
102
|
+
|
|
103
|
+
if (parameter) {
|
|
104
|
+
const isWebgl2 = isWebGL2(this.gl);
|
|
105
|
+
const parameterAvailable = (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
|
|
106
|
+
|
|
107
|
+
if (!parameterAvailable) {
|
|
108
|
+
const webgl1Default = parameter.webgl1;
|
|
109
|
+
const webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;
|
|
110
|
+
const defaultValue = isWebgl2 ? webgl2Default : webgl1Default;
|
|
111
|
+
return defaultValue;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return this._getParameter(pname, props);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
getParameters(options = {}) {
|
|
119
|
+
const {
|
|
120
|
+
parameters,
|
|
121
|
+
keys
|
|
122
|
+
} = options;
|
|
123
|
+
const PARAMETERS = this.constructor.PARAMETERS || {};
|
|
124
|
+
const isWebgl2 = isWebGL2(this.gl);
|
|
125
|
+
const values = {};
|
|
126
|
+
const parameterKeys = parameters || Object.keys(PARAMETERS);
|
|
127
|
+
|
|
128
|
+
for (const pname of parameterKeys) {
|
|
129
|
+
const parameter = PARAMETERS[pname];
|
|
130
|
+
const parameterAvailable = parameter && (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
|
|
131
|
+
|
|
132
|
+
if (parameterAvailable) {
|
|
133
|
+
const key = keys ? getKey(this.gl, pname) : pname;
|
|
134
|
+
values[key] = this.getParameter(pname, options);
|
|
135
|
+
|
|
136
|
+
if (keys && parameter.type === 'GLenum') {
|
|
137
|
+
values[key] = getKey(this.gl, values[key]);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return values;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
setParameter(pname, value) {
|
|
146
|
+
pname = getKeyValue(this.gl, pname);
|
|
147
|
+
assert(pname);
|
|
148
|
+
const parameters = this.constructor.PARAMETERS || {};
|
|
149
|
+
const parameter = parameters[pname];
|
|
150
|
+
|
|
151
|
+
if (parameter) {
|
|
152
|
+
const isWebgl2 = isWebGL2(this.gl);
|
|
153
|
+
const parameterAvailable = (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
|
|
154
|
+
|
|
155
|
+
if (!parameterAvailable) {
|
|
156
|
+
throw new Error('Parameter not available on this platform');
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (parameter.type === 'GLenum') {
|
|
160
|
+
value = getKeyValue(value);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
this._setParameter(pname, value);
|
|
165
|
+
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
setParameters(parameters) {
|
|
170
|
+
for (const pname in parameters) {
|
|
171
|
+
this.setParameter(pname, parameters[pname]);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return this;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
stubRemovedMethods(className, version, methodNames) {
|
|
178
|
+
return stubRemovedMethods(this, className, version, methodNames);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
initialize(props) {}
|
|
182
|
+
|
|
183
|
+
_createHandle() {
|
|
184
|
+
throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
_deleteHandle() {
|
|
188
|
+
throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
_bindHandle(handle) {
|
|
192
|
+
throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
_getOptsFromHandle() {
|
|
196
|
+
throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
_getParameter(pname, props) {
|
|
200
|
+
throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
_setParameter(pname, value) {
|
|
204
|
+
throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=webgl-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/webgl-resource.ts"],"names":["isWebGL2","assertWebGLContext","Resource","getKey","getKeyValue","uid","assert","stubRemovedMethods","ERR_RESOURCE_METHOD_UNDEFINED","WebGLResource","constructor","gl","props","defaultProps","id","userData","gl2","name","_handle","handle","undefined","_createHandle","byteLength","toString","delete","deleteChildren","children","_deleteHandle","removeStats","filter","Boolean","forEach","child","bind","funcOrHandle","_bindHandle","value","_bound","unbind","getParameter","pname","parameters","PARAMETERS","parameter","isWebgl2","parameterAvailable","getExtension","extension","webgl1Default","webgl1","webgl2Default","webgl2","defaultValue","_getParameter","getParameters","options","keys","values","parameterKeys","Object","key","type","setParameter","Error","_setParameter","setParameters","className","version","methodNames","initialize","_getOptsFromHandle"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport {isWebGL2, assertWebGLContext} from '@luma.gl/gltools';\nimport {Resource} from '@luma.gl/api';\nexport type {ResourceProps} from '@luma.gl/api';\nimport {getKey, getKeyValue} from '../webgl-utils';\nimport {uid, assert, stubRemovedMethods} from '../utils';\n\nconst ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';\n\n/**\n * Base class for WebGL object wrappers\n */\n export default class WebGLResource<Props> extends Resource<Props> {\n id: string;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext;\n userData: any;\n private _handle: any;\n\n private _bound = false;\n // Only meaningful for resources that allocate GPU memory\n byteLength = 0;\n\n constructor(gl: WebGLRenderingContext, props: Props, defaultProps: Required<Props>) {\n super(gl as any, props, defaultProps);\n\n assertWebGLContext(gl);\n\n // extends \n // @ts-expect-error\n const {id, userData = {}} = props || {};\n this.gl = gl;\n // @ts-ignore\n this.gl2 = gl;\n // this.ext = polyfillContext(gl);\n this.id = id || uid(this.constructor.name);\n this.userData = userData;\n\n // Set the handle\n // If handle was provided, use it, otherwise create a new handle\n\n // TODO - Stores the handle with context loss information\n // this.glCount = glGetContextLossCount(this.gl);\n\n // Default VertexArray needs to be created with null handle, so compare against undefined\n // @ts-expect-error\n this._handle = props?.handle;\n if (this._handle === undefined) {\n this._handle = this._createHandle();\n }\n\n this.byteLength = 0;\n }\n\n toString(): string {\n return `${this.constructor.name}(${this.id})`;\n }\n\n get handle() {\n // TODO - Add context loss handling\n // Will regenerate and reinitialize the handle if necessary\n // const glCount = glGetContextLossCount(this.gl);\n // if (this.glCount !== glCount) {\n // this._handle = this._createHandle(this.props);\n // this._glCount = glCount;\n // // Reinitialize object\n // this.initialize(this.props);\n // }\n return this._handle;\n }\n\n delete({deleteChildren = false} = {}) {\n // Delete this object, and get refs to any children\n // @ts-ignore\n const children = this._handle && this._deleteHandle(this._handle);\n if (this._handle) {\n this.removeStats();\n }\n this._handle = null;\n\n // Optionally, recursively delete the children\n // @ts-ignore\n if (children && deleteChildren) {\n // @ts-ignore\n children.filter(Boolean).forEach((child) => child.delete());\n }\n\n return this;\n }\n\n bind(funcOrHandle = this.handle) {\n if (typeof funcOrHandle !== 'function') {\n this._bindHandle(funcOrHandle);\n return this;\n }\n\n let value;\n\n if (!this._bound) {\n this._bindHandle(this.handle);\n this._bound = true;\n\n value = funcOrHandle();\n\n this._bound = false;\n this._bindHandle(null);\n } else {\n value = funcOrHandle();\n }\n\n return value;\n }\n\n unbind() {\n this.bind(null);\n }\n\n /**\n * Query a Resource parameter\n *\n * @param name\n * @return param\n */\n getParameter(pname: number, props = {}): any {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-ignore\n const parameters = this.constructor.PARAMETERS || {};\n\n // Use parameter definitions to handle unsupported parameters\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if we can query for this parameter\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n const webgl1Default = parameter.webgl1;\n const webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;\n const defaultValue = isWebgl2 ? webgl2Default : webgl1Default;\n return defaultValue;\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // Attempt to query for it and let WebGL report errors\n return this._getParameter(pname, props);\n }\n\n // Many resources support a getParameter call -\n // getParameters will get all parameters - slow but useful for debugging\n // eslint-disable-next-line complexity\n getParameters(options: {parameters?, keys?} = {}) {\n const {parameters, keys} = options;\n\n // Get parameter definitions for this Resource\n // @ts-ignore\n const PARAMETERS = this.constructor.PARAMETERS || {};\n\n const isWebgl2 = isWebGL2(this.gl);\n\n const values = {};\n\n // Query all parameters if no list provided\n const parameterKeys = parameters || Object.keys(PARAMETERS);\n\n // WEBGL limits\n for (const pname of parameterKeys) {\n const parameter = PARAMETERS[pname];\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n parameter &&\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (parameterAvailable) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getParameter(pname, options);\n if (keys && parameter.type === 'GLenum') {\n values[key] = getKey(this.gl, values[key]);\n }\n }\n }\n\n return values;\n }\n\n /**\n * Update a Resource setting\n *\n * @todo - cache parameter to avoid issuing WebGL calls?\n *\n * @param {string} pname - parameter (GL constant, value or key)\n * @param {GLint|GLfloat|GLenum} value\n * @return {Resource} returns self to enable chaining\n */\n setParameter(pname, value) {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-ignore\n const parameters = this.constructor.PARAMETERS || {};\n\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n throw new Error('Parameter not available on this platform');\n }\n\n // Handle string keys\n if (parameter.type === 'GLenum') {\n // @ts-expect-error\n value = getKeyValue(value);\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // attempt to set it and let WebGL report errors\n this._setParameter(pname, value);\n return this;\n }\n\n /*\n * Batch update resource parameters\n * Assumes the subclass supports a setParameter call\n */\n setParameters(parameters) {\n for (const pname in parameters) {\n this.setParameter(pname, parameters[pname]);\n }\n return this;\n }\n\n // Install stubs for removed methods\n stubRemovedMethods(className, version, methodNames) {\n return stubRemovedMethods(this, className, version, methodNames);\n }\n\n // PUBLIC VIRTUAL METHODS\n initialize(props) {}\n\n // PROTECTED METHODS - These must be overridden by subclass\n _createHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _deleteHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _bindHandle(handle) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _getOptsFromHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n /** @returns {number} */\n _getParameter(pname, props) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _setParameter(pname, value) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n // PRIVATE METHODS\n\n /*\n _addStats() {\n const name = this.constructor.name;\n const stats = lumaStats.get('Resource Counts');\n\n stats.get('Resources Created').incrementCount();\n stats.get(`${name}s Created`).incrementCount();\n stats.get(`${name}s Active`).incrementCount();\n }\n\n _removeStats() {\n const name = this.constructor.name;\n const stats = lumaStats.get('Resource Counts');\n\n stats.get(`${name}s Active`).decrementCount();\n }\n\n trackAllocatedMemory(bytes, name = this.constructor.name) {\n const stats = lumaStats.get('Memory Usage');\n\n stats.get('GPU Memory').addCount(bytes);\n stats.get(`${name} Memory`).addCount(bytes);\n this.byteLength = bytes;\n }\n\n trackDeallocatedMemory(name = this.constructor.name) {\n const stats = lumaStats.get('Memory Usage');\n\n stats.get('GPU Memory').subtractCount(this.byteLength);\n stats.get(`${name} Memory`).subtractCount(this.byteLength);\n this.byteLength = 0;\n }\n */\n}\n"],"file":"webgl-resource.js"}
|