@luma.gl/webgl 9.0.0-alpha.5 → 9.0.0-alpha.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +3 -1
- package/dist/adapter/converters/device-parameters.d.ts +23 -4
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +101 -73
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +6 -6
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +74 -111
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/shader-formats.d.ts +9 -0
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
- package/dist/adapter/converters/shader-formats.js +52 -0
- package/dist/adapter/converters/shader-formats.js.map +1 -0
- package/dist/adapter/converters/texture-formats.d.ts +32 -44
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +309 -346
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.d.ts +9 -3
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +53 -22
- package/dist/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/adapter/device-helpers/device-features.d.ts +1 -1
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-features.js +17 -23
- package/dist/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
- package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +54 -58
- package/dist/adapter/device-helpers/device-limits.js.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +31 -22
- package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -1
- package/dist/adapter/device-helpers/is-old-ie.js +2 -1
- package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
- package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
- package/dist/adapter/helpers/decode-webgl-types.js +89 -0
- package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
- package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
- package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
- package/dist/adapter/helpers/get-shader-info.js +25 -0
- package/dist/adapter/helpers/get-shader-info.js.map +1 -0
- package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +87 -143
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +16 -11
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts +3 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +51 -82
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
- package/dist/adapter/helpers/webgl-topology-utils.js +103 -0
- package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
- package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +2 -29
- package/dist/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +36 -44
- package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/adapter/objects/webgl-resource.d.ts +6 -9
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +26 -83
- package/dist/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +19 -11
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +60 -88
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +175 -48
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +10 -20
- package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +63 -173
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +99 -11
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +55 -21
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +108 -270
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +11 -21
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts +3 -4
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +21 -34
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +62 -42
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +137 -256
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-transform-feedback.js +164 -0
- package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
- package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-vertex-array.js +167 -0
- package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
- package/dist/adapter/webgl-canvas-context.d.ts +6 -7
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +10 -23
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +76 -41
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +219 -129
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/classic/accessor.d.ts +3 -3
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +26 -52
- package/dist/classic/accessor.js.map +1 -1
- package/dist/classic/clear.d.ts +22 -0
- package/dist/classic/clear.d.ts.map +1 -0
- package/dist/classic/clear.js +88 -0
- package/dist/classic/clear.js.map +1 -0
- package/dist/classic/copy-and-blit.d.ts +62 -0
- package/dist/classic/copy-and-blit.d.ts.map +1 -0
- package/dist/classic/copy-and-blit.js +191 -0
- package/dist/classic/copy-and-blit.js.map +1 -0
- package/dist/classic/format-utils.d.ts +3 -0
- package/dist/classic/format-utils.d.ts.map +1 -0
- package/dist/classic/format-utils.js +37 -0
- package/dist/classic/format-utils.js.map +1 -0
- package/dist/classic/typed-array-utils.d.ts +17 -17
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +18 -39
- package/dist/classic/typed-array-utils.js.map +1 -1
- package/dist/context/context/create-browser-context.d.ts +40 -0
- package/dist/context/context/create-browser-context.d.ts.map +1 -0
- package/dist/context/context/create-browser-context.js +53 -0
- package/dist/context/context/create-browser-context.js.map +1 -0
- package/dist/context/context/create-headless-context.d.ts +9 -0
- package/dist/context/context/create-headless-context.d.ts.map +1 -0
- package/dist/context/context/create-headless-context.js +42 -0
- package/dist/context/context/create-headless-context.js.map +1 -0
- package/dist/context/context/webgl-checks.d.ts.map +1 -1
- package/dist/context/context/webgl-checks.js +1 -4
- package/dist/context/context/webgl-checks.js.map +1 -1
- package/dist/context/debug/spector.d.ts +1 -2
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +8 -20
- package/dist/context/debug/spector.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +15 -39
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +9 -8
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +9 -19
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +267 -286
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/context/polyfill/context-data.d.ts +13 -0
- package/dist/context/polyfill/context-data.d.ts.map +1 -0
- package/dist/context/polyfill/context-data.js +12 -0
- package/dist/context/polyfill/context-data.js.map +1 -0
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.js +37 -43
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +22 -30
- package/dist/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/context/polyfill/polyfill-table.d.ts +8 -8
- package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-table.js +18 -41
- package/dist/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.js +17 -87
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.js +0 -4
- package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +26 -62
- package/dist/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/context/state-tracker/with-parameters.d.ts +2 -1
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +8 -10
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/dist.dev.js +8555 -0
- package/dist/index.cjs +6602 -0
- package/dist/index.d.ts +26 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -26
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist.min.js +49 -0
- package/package.json +21 -9
- package/src/adapter/converters/device-parameters.ts +144 -41
- package/src/adapter/converters/sampler-parameters.ts +103 -41
- package/src/adapter/converters/shader-formats.ts +44 -0
- package/src/adapter/converters/texture-formats.ts +268 -195
- package/src/adapter/converters/vertex-formats.ts +71 -10
- package/src/adapter/device-helpers/device-features.ts +14 -3
- package/src/adapter/device-helpers/device-limits.ts +5 -3
- package/src/adapter/device-helpers/get-device-info.ts +53 -18
- package/src/adapter/device-helpers/is-old-ie.ts +3 -0
- package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +39 -21
- package/src/adapter/helpers/get-shader-info.ts +41 -0
- package/src/adapter/helpers/get-shader-layout.ts +121 -146
- package/src/adapter/helpers/parse-shader-compiler-log.ts +24 -8
- package/src/adapter/helpers/set-uniform.ts +39 -35
- package/src/adapter/helpers/webgl-topology-utils.ts +103 -0
- package/src/adapter/objects/constants-to-keys.ts +6 -25
- package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
- package/src/adapter/objects/webgl-resource.ts +16 -23
- package/src/adapter/resources/webgl-buffer.ts +67 -62
- package/src/adapter/resources/webgl-command-buffer.ts +327 -25
- package/src/adapter/resources/webgl-command-encoder.ts +20 -12
- package/src/adapter/resources/webgl-external-texture.ts +5 -2
- package/src/adapter/resources/webgl-framebuffer.ts +90 -134
- package/src/adapter/resources/webgl-render-pass.ts +166 -4
- package/src/adapter/resources/webgl-render-pipeline.ts +256 -192
- package/src/adapter/resources/webgl-sampler.ts +16 -10
- package/src/adapter/resources/webgl-shader.ts +14 -11
- package/src/adapter/resources/webgl-texture.ts +138 -99
- package/src/adapter/resources/webgl-transform-feedback.ts +202 -0
- package/src/adapter/resources/webgl-vertex-array.ts +283 -0
- package/src/adapter/webgl-canvas-context.ts +16 -14
- package/src/adapter/webgl-device.ts +328 -79
- package/src/classic/accessor.ts +8 -18
- package/src/classic/clear.ts +113 -0
- package/src/classic/copy-and-blit.ts +311 -0
- package/src/classic/format-utils.ts +46 -0
- package/src/classic/typed-array-utils.ts +21 -27
- package/src/context/context/create-browser-context.ts +140 -0
- package/src/context/context/create-headless-context.ts +51 -0
- package/src/context/context/webgl-checks.ts +3 -1
- package/src/context/debug/spector.ts +9 -6
- package/src/context/debug/webgl-developer-tools.ts +23 -15
- package/src/context/parameters/unified-parameter-api.ts +23 -14
- package/src/context/parameters/webgl-parameter-tables.ts +120 -98
- package/src/context/polyfill/context-data.ts +30 -0
- package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
- package/src/context/polyfill/polyfill-context.ts +10 -9
- package/src/context/polyfill/polyfill-table.ts +21 -16
- package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
- package/src/context/state-tracker/deep-array-equal.ts +2 -0
- package/src/context/state-tracker/track-context-state.ts +14 -11
- package/src/context/state-tracker/with-parameters.ts +13 -4
- package/src/index.ts +70 -35
- package/src/types.ts +5 -0
- package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
- package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
- package/dist/adapter/converters/renderbuffer-formats.js +0 -185
- package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
- package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
- package/dist/adapter/helpers/attribute-utils.js +0 -81
- package/dist/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/adapter/helpers/uniforms.d.ts +0 -26
- package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
- package/dist/adapter/helpers/uniforms.js +0 -99
- package/dist/adapter/helpers/uniforms.js.map +0 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/bundle.js.map +0 -1
- package/dist/classic/buffer.d.ts +0 -95
- package/dist/classic/buffer.d.ts.map +0 -1
- package/dist/classic/buffer.js +0 -384
- package/dist/classic/buffer.js.map +0 -1
- package/dist/context/context/context-state.d.ts +0 -18
- package/dist/context/context/context-state.d.ts.map +0 -1
- package/dist/context/context/context-state.js +0 -26
- package/dist/context/context/context-state.js.map +0 -1
- package/dist/context/context/create-context.d.ts +0 -41
- package/dist/context/context/create-context.d.ts.map +0 -1
- package/dist/context/context/create-context.js +0 -49
- package/dist/context/context/create-context.js.map +0 -1
- package/dist/context/context/device-pixels.d.ts +0 -25
- package/dist/context/context/device-pixels.d.ts.map +0 -1
- package/dist/context/context/device-pixels.js +0 -98
- package/dist/context/context/device-pixels.js.map +0 -1
- package/dist/es5/adapter/converters/device-parameters.js +0 -170
- package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
- package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
- package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
- package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/es5/adapter/converters/texture-formats.js +0 -1031
- package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
- package/dist/es5/adapter/converters/vertex-formats.js +0 -45
- package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/es5/adapter/device-helpers/device-features.js +0 -144
- package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
- package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
- package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
- package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
- package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
- package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
- package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/es5/adapter/helpers/set-uniform.js +0 -125
- package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/es5/adapter/helpers/uniforms.js +0 -112
- package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
- package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
- package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
- package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-resource.js +0 -292
- package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
- package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
- package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
- package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
- package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
- package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
- package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
- package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
- package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
- package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-shader.js +0 -149
- package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/es5/adapter/resources/webgl-texture.js +0 -986
- package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/es5/adapter/webgl-canvas-context.js +0 -97
- package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/es5/adapter/webgl-device.js +0 -399
- package/dist/es5/adapter/webgl-device.js.map +0 -1
- package/dist/es5/bundle.js +0 -7
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/classic/accessor.js +0 -181
- package/dist/es5/classic/accessor.js.map +0 -1
- package/dist/es5/classic/buffer.js +0 -470
- package/dist/es5/classic/buffer.js.map +0 -1
- package/dist/es5/classic/typed-array-utils.js +0 -126
- package/dist/es5/classic/typed-array-utils.js.map +0 -1
- package/dist/es5/context/context/context-state.js +0 -31
- package/dist/es5/context/context/context-state.js.map +0 -1
- package/dist/es5/context/context/create-context.js +0 -69
- package/dist/es5/context/context/create-context.js.map +0 -1
- package/dist/es5/context/context/device-pixels.js +0 -115
- package/dist/es5/context/context/device-pixels.js.map +0 -1
- package/dist/es5/context/context/webgl-checks.js +0 -54
- package/dist/es5/context/context/webgl-checks.js.map +0 -1
- package/dist/es5/context/debug/spector.js +0 -133
- package/dist/es5/context/debug/spector.js.map +0 -1
- package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
- package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
- package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
- package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
- package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-context.js +0 -135
- package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-table.js +0 -166
- package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
- package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
- package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/es5/context/state-tracker/track-context-state.js +0 -211
- package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/es5/context/state-tracker/with-parameters.js +0 -44
- package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/es5/index.js +0 -276
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/init.js +0 -10
- package/dist/es5/init.js.map +0 -1
- package/dist/es5/types/webgl.js +0 -6
- package/dist/es5/types/webgl.js.map +0 -1
- package/dist/es5/types.js +0 -2
- package/dist/es5/types.js.map +0 -1
- package/dist/esm/adapter/converters/device-parameters.js +0 -155
- package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
- package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
- package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
- package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
- package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/esm/adapter/converters/texture-formats.js +0 -954
- package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
- package/dist/esm/adapter/converters/vertex-formats.js +0 -35
- package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/esm/adapter/device-helpers/device-features.js +0 -102
- package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
- package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
- package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
- package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
- package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
- package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
- package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/esm/adapter/helpers/set-uniform.js +0 -115
- package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/esm/adapter/helpers/uniforms.js +0 -99
- package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
- package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
- package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
- package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-resource.js +0 -216
- package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
- package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
- package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
- package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
- package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
- package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
- package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
- package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
- package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
- package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-shader.js +0 -75
- package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/esm/adapter/resources/webgl-texture.js +0 -833
- package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/esm/adapter/webgl-canvas-context.js +0 -54
- package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/esm/adapter/webgl-device.js +0 -280
- package/dist/esm/adapter/webgl-device.js.map +0 -1
- package/dist/esm/bundle.js +0 -5
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/classic/accessor.js +0 -144
- package/dist/esm/classic/accessor.js.map +0 -1
- package/dist/esm/classic/buffer.js +0 -384
- package/dist/esm/classic/buffer.js.map +0 -1
- package/dist/esm/classic/typed-array-utils.js +0 -112
- package/dist/esm/classic/typed-array-utils.js.map +0 -1
- package/dist/esm/context/context/context-state.js +0 -26
- package/dist/esm/context/context/context-state.js.map +0 -1
- package/dist/esm/context/context/create-context.js +0 -49
- package/dist/esm/context/context/create-context.js.map +0 -1
- package/dist/esm/context/context/device-pixels.js +0 -98
- package/dist/esm/context/context/device-pixels.js.map +0 -1
- package/dist/esm/context/context/webgl-checks.js +0 -34
- package/dist/esm/context/context/webgl-checks.js.map +0 -1
- package/dist/esm/context/debug/spector.js +0 -76
- package/dist/esm/context/debug/spector.js.map +0 -1
- package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
- package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
- package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
- package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
- package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-context.js +0 -92
- package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-table.js +0 -160
- package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
- package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
- package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/esm/context/state-tracker/track-context-state.js +0 -183
- package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/esm/context/state-tracker/with-parameters.js +0 -36
- package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/esm/index.js +0 -27
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/init.js +0 -4
- package/dist/esm/init.js.map +0 -1
- package/dist/esm/types/webgl.js +0 -2
- package/dist/esm/types/webgl.js.map +0 -1
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
- package/dist/init.d.ts +0 -2
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -4
- package/dist/init.js.map +0 -1
- package/dist/types/webgl.d.ts +0 -145
- package/dist/types/webgl.d.ts.map +0 -1
- package/dist/types/webgl.js +0 -2
- package/dist/types/webgl.js.map +0 -1
- package/src/adapter/converters/renderbuffer-formats.ts +0 -92
- package/src/adapter/helpers/attribute-utils.ts +0 -61
- package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
- package/src/bundle.ts +0 -4
- package/src/classic/buffer.ts +0 -474
- package/src/context/context/context-state.ts +0 -41
- package/src/context/context/create-context.ts +0 -110
- package/src/context/context/device-pixels.ts +0 -152
- package/src/init.ts +0 -4
- package/src/types/webgl.ts +0 -284
|
@@ -1,265 +1,155 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
import { getWebGLTextureFormat, getWebGLDepthStencilAttachment } from '../converters/texture-formats';
|
|
7
|
-
export default class WEBGLFramebuffer extends Framebuffer {
|
|
1
|
+
import { Framebuffer, assert } from '@luma.gl/core';
|
|
2
|
+
import { WEBGLTexture } from "./webgl-texture.js";
|
|
3
|
+
import { WEBGLRenderbuffer } from "../objects/webgl-renderbuffer.js";
|
|
4
|
+
import { getDepthStencilAttachmentWebGL } from "../converters/texture-formats.js";
|
|
5
|
+
export class WEBGLFramebuffer extends Framebuffer {
|
|
8
6
|
get texture() {
|
|
9
7
|
return this.colorAttachments[0];
|
|
10
8
|
}
|
|
11
|
-
|
|
12
9
|
constructor(device, props) {
|
|
13
10
|
super(device, props);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
_defineProperty(this, "handle", void 0);
|
|
20
|
-
|
|
21
|
-
_defineProperty(this, "colorAttachments", []);
|
|
22
|
-
|
|
23
|
-
_defineProperty(this, "depthStencilAttachment", undefined);
|
|
24
|
-
|
|
25
|
-
_defineProperty(this, "_ownResources", []);
|
|
26
|
-
|
|
11
|
+
this.device = void 0;
|
|
12
|
+
this.gl = void 0;
|
|
13
|
+
this.handle = void 0;
|
|
14
|
+
const isDefaultFramebuffer = props.handle === null;
|
|
27
15
|
this.device = device;
|
|
28
16
|
this.gl = device.gl;
|
|
29
|
-
this.handle = this.props.handle
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
this.handle.__SPECTOR_Metadata = {
|
|
17
|
+
this.handle = this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();
|
|
18
|
+
if (!isDefaultFramebuffer) {
|
|
19
|
+
device.setSpectorMetadata(this.handle, {
|
|
33
20
|
id: this.props.id,
|
|
34
21
|
props: this.props
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
|
|
45
|
-
|
|
46
|
-
if (attachment) {
|
|
47
|
-
this._attachOne(attachmentPoint, attachment);
|
|
22
|
+
});
|
|
23
|
+
this.autoCreateAttachmentTextures();
|
|
24
|
+
this.gl.bindFramebuffer(36160, this.handle);
|
|
25
|
+
for (let i = 0; i < this.colorAttachments.length; ++i) {
|
|
26
|
+
const attachment = this.colorAttachments[i];
|
|
27
|
+
const attachmentPoint = 36064 + i;
|
|
28
|
+
if (attachment) {
|
|
29
|
+
this._attachOne(attachmentPoint, attachment);
|
|
30
|
+
}
|
|
48
31
|
}
|
|
32
|
+
if (this.depthStencilAttachment) {
|
|
33
|
+
this._attachOne(getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format), this.depthStencilAttachment);
|
|
34
|
+
}
|
|
35
|
+
this.gl.bindFramebuffer(36160, null);
|
|
49
36
|
}
|
|
50
|
-
|
|
51
|
-
if (this.props.depthStencilAttachment) {
|
|
52
|
-
this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
|
|
56
|
-
|
|
57
37
|
if (props.check !== false) {
|
|
58
38
|
this._checkStatus();
|
|
59
39
|
}
|
|
60
40
|
}
|
|
61
|
-
|
|
62
41
|
destroy() {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
resource.destroy();
|
|
66
|
-
}
|
|
67
|
-
|
|
42
|
+
super.destroy();
|
|
43
|
+
if (!this.destroyed && this.handle !== null) {
|
|
68
44
|
this.gl.deleteFramebuffer(this.handle);
|
|
69
|
-
this.handle = null;
|
|
70
45
|
}
|
|
71
46
|
}
|
|
72
|
-
|
|
73
47
|
_checkStatus() {
|
|
74
48
|
const {
|
|
75
49
|
gl
|
|
76
50
|
} = this;
|
|
77
|
-
const prevHandle = gl.bindFramebuffer(
|
|
78
|
-
const status = gl.checkFramebufferStatus(
|
|
79
|
-
gl.bindFramebuffer(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
throw new Error("Framebuffer ".concat(_getFrameBufferStatus(status)));
|
|
51
|
+
const prevHandle = gl.bindFramebuffer(36160, this.handle);
|
|
52
|
+
const status = gl.checkFramebufferStatus(36160);
|
|
53
|
+
gl.bindFramebuffer(36160, prevHandle || null);
|
|
54
|
+
if (status !== 36053) {
|
|
55
|
+
throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
|
|
83
56
|
}
|
|
84
57
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (!colorAttachment) {
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (colorAttachment instanceof WebGLTexture) {
|
|
93
|
-
return colorAttachment;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return this._createColorAttachment(colorAttachment, this.width, this.height);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
_createColorAttachment(format, width, height) {
|
|
101
|
-
const texture = this.device._createTexture({
|
|
102
|
-
id: "".concat(this.id, "-color"),
|
|
103
|
-
data: null,
|
|
58
|
+
createDepthStencilTexture(format) {
|
|
59
|
+
return new WEBGLRenderbuffer(this.device, {
|
|
60
|
+
id: `${this.id}-depth-stencil`,
|
|
104
61
|
format,
|
|
105
|
-
width,
|
|
106
|
-
height,
|
|
107
|
-
mipmaps: false,
|
|
108
|
-
sampler: {
|
|
109
|
-
minFilter: 'linear',
|
|
110
|
-
magFilter: 'linear',
|
|
111
|
-
addressModeU: 'clamp-to-edge',
|
|
112
|
-
addressModeV: 'clamp-to-edge'
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
this._ownResources.push(texture);
|
|
117
|
-
|
|
118
|
-
return texture;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
_createDepthStencilAttachment() {
|
|
122
|
-
if (!this.props.depthStencilAttachment) {
|
|
123
|
-
return undefined;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (this.props.depthStencilAttachment instanceof Renderbuffer) {
|
|
127
|
-
return this.props.depthStencilAttachment;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (this.props.depthStencilAttachment instanceof Texture) {
|
|
131
|
-
return this.props.depthStencilAttachment;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
const format = this.props.depthStencilAttachment;
|
|
135
|
-
const webglFormat = getWebGLTextureFormat(this.gl, format);
|
|
136
|
-
const texture = new Renderbuffer(this.device, {
|
|
137
|
-
id: "".concat(this.id, "-depth-stencil"),
|
|
138
|
-
format: webglFormat,
|
|
139
62
|
width: this.width,
|
|
140
63
|
height: this.height
|
|
141
64
|
});
|
|
142
|
-
|
|
143
|
-
this._ownResources.push(texture);
|
|
144
|
-
|
|
145
|
-
return texture;
|
|
146
65
|
}
|
|
147
|
-
|
|
148
|
-
_resizeAttachments(width, height) {
|
|
149
|
-
var _this$depthStencilAtt;
|
|
150
|
-
|
|
66
|
+
resizeAttachments(width, height) {
|
|
151
67
|
if (this.handle === null) {
|
|
152
68
|
this.width = this.gl.drawingBufferWidth;
|
|
153
69
|
this.height = this.gl.drawingBufferHeight;
|
|
154
70
|
return this;
|
|
155
71
|
}
|
|
156
|
-
|
|
157
72
|
if (width === undefined) {
|
|
158
73
|
width = this.gl.drawingBufferWidth;
|
|
159
74
|
}
|
|
160
|
-
|
|
161
75
|
if (height === undefined) {
|
|
162
76
|
height = this.gl.drawingBufferHeight;
|
|
163
77
|
}
|
|
164
|
-
|
|
165
|
-
if (width !== this.width && height !== this.height) {
|
|
166
|
-
log.log(2, "Resizing framebuffer ".concat(this.id, " to ").concat(width, "x").concat(height))();
|
|
167
|
-
}
|
|
168
|
-
|
|
169
78
|
for (const colorAttachment of this.colorAttachments) {
|
|
170
79
|
colorAttachment.resize({
|
|
171
80
|
width,
|
|
172
81
|
height
|
|
173
82
|
});
|
|
174
83
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
84
|
+
if (this.depthStencilAttachment) {
|
|
85
|
+
this.depthStencilAttachment.resize({
|
|
86
|
+
width,
|
|
87
|
+
height
|
|
88
|
+
});
|
|
89
|
+
}
|
|
180
90
|
return this;
|
|
181
91
|
}
|
|
182
|
-
|
|
183
92
|
_attachOne(attachmentPoint, attachment) {
|
|
184
|
-
if (attachment instanceof
|
|
185
|
-
this.
|
|
186
|
-
|
|
93
|
+
if (attachment instanceof WEBGLRenderbuffer) {
|
|
94
|
+
this._attachWEBGLRenderbuffer(attachmentPoint, attachment);
|
|
187
95
|
return attachment;
|
|
188
96
|
} else if (Array.isArray(attachment)) {
|
|
189
97
|
const [texture, layer = 0, level = 0] = attachment;
|
|
190
|
-
|
|
191
98
|
this._attachTexture(attachmentPoint, texture, layer, level);
|
|
192
|
-
|
|
193
99
|
return texture;
|
|
194
|
-
} else if (attachment instanceof
|
|
100
|
+
} else if (attachment instanceof WEBGLTexture) {
|
|
195
101
|
this._attachTexture(attachmentPoint, attachment, 0, 0);
|
|
196
|
-
|
|
197
102
|
return attachment;
|
|
198
103
|
}
|
|
104
|
+
throw new Error('attach');
|
|
199
105
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);
|
|
106
|
+
_attachWEBGLRenderbuffer(attachment, renderbuffer) {
|
|
107
|
+
this.gl.framebufferRenderbuffer(36160, attachment, 36161, renderbuffer.handle);
|
|
203
108
|
}
|
|
204
|
-
|
|
205
109
|
_attachTexture(attachment, texture, layer, level) {
|
|
206
110
|
const {
|
|
207
111
|
gl,
|
|
208
112
|
gl2
|
|
209
113
|
} = this.device;
|
|
210
114
|
gl.bindTexture(texture.target, texture.handle);
|
|
211
|
-
|
|
212
115
|
switch (texture.target) {
|
|
213
|
-
case
|
|
214
|
-
case
|
|
116
|
+
case 35866:
|
|
117
|
+
case 32879:
|
|
215
118
|
this.device.assertWebGL2();
|
|
216
|
-
gl2.framebufferTextureLayer(
|
|
119
|
+
gl2 === null || gl2 === void 0 ? void 0 : gl2.framebufferTextureLayer(36160, attachment, texture.target, level, layer);
|
|
217
120
|
break;
|
|
218
|
-
|
|
219
|
-
case GL.TEXTURE_CUBE_MAP:
|
|
121
|
+
case 34067:
|
|
220
122
|
const face = mapIndexToCubeMapFace(layer);
|
|
221
|
-
gl.framebufferTexture2D(
|
|
123
|
+
gl.framebufferTexture2D(36160, attachment, face, texture.handle, level);
|
|
222
124
|
break;
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);
|
|
125
|
+
case 3553:
|
|
126
|
+
gl.framebufferTexture2D(36160, attachment, 3553, texture.handle, level);
|
|
226
127
|
break;
|
|
227
|
-
|
|
228
128
|
default:
|
|
229
129
|
assert(false, 'Illegal texture type');
|
|
230
130
|
}
|
|
231
|
-
|
|
232
131
|
gl.bindTexture(texture.target, null);
|
|
233
132
|
}
|
|
234
|
-
|
|
235
133
|
}
|
|
236
|
-
|
|
237
134
|
function mapIndexToCubeMapFace(layer) {
|
|
238
|
-
return layer <
|
|
135
|
+
return layer < 34069 ? layer + 34069 : layer;
|
|
239
136
|
}
|
|
240
|
-
|
|
241
137
|
function _getFrameBufferStatus(status) {
|
|
242
138
|
switch (status) {
|
|
243
|
-
case
|
|
139
|
+
case 36053:
|
|
244
140
|
return 'success';
|
|
245
|
-
|
|
246
|
-
case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
|
|
141
|
+
case 36054:
|
|
247
142
|
return 'Mismatched attachments';
|
|
248
|
-
|
|
249
|
-
case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
|
|
143
|
+
case 36055:
|
|
250
144
|
return 'No attachments';
|
|
251
|
-
|
|
252
|
-
case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
|
|
145
|
+
case 36057:
|
|
253
146
|
return 'Height/width mismatch';
|
|
254
|
-
|
|
255
|
-
case GL.FRAMEBUFFER_UNSUPPORTED:
|
|
147
|
+
case 36061:
|
|
256
148
|
return 'Unsupported or split attachments';
|
|
257
|
-
|
|
258
|
-
case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
|
|
149
|
+
case 36182:
|
|
259
150
|
return 'Samples mismatch';
|
|
260
|
-
|
|
261
151
|
default:
|
|
262
|
-
return
|
|
152
|
+
return `${status}`;
|
|
263
153
|
}
|
|
264
154
|
}
|
|
265
155
|
//# sourceMappingURL=webgl-framebuffer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapter/resources/webgl-framebuffer.ts"],"names":["Framebuffer","Texture","log","assert","GL","WebGLTexture","Renderbuffer","getWebGLTextureFormat","getWebGLDepthStencilAttachment","WEBGLFramebuffer","texture","colorAttachments","constructor","device","props","undefined","gl","handle","createFramebuffer","__SPECTOR_Metadata","id","_createColorAttachments","depthStencilAttachment","_createDepthStencilAttachment","prevHandle","bindFramebuffer","FRAMEBUFFER","i","length","attachment","attachmentPoint","COLOR_ATTACHMENT0","_attachOne","format","check","_checkStatus","destroy","resource","_ownResources","deleteFramebuffer","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","Error","_getFrameBufferStatus","map","colorAttachment","_createColorAttachment","width","height","_createTexture","data","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV","push","webglFormat","_resizeAttachments","drawingBufferWidth","drawingBufferHeight","resize","_attachRenderbuffer","Array","isArray","layer","level","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","gl2","bindTexture","target","TEXTURE_2D_ARRAY","TEXTURE_3D","assertWebGL2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","TEXTURE_CUBE_MAP_POSITIVE_X","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"],"mappings":"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","sourcesContent":["import type {FramebufferProps, DepthStencilTextureFormat, ColorTextureFormat} from '@luma.gl/api';\nimport {Framebuffer, Texture, log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../webgl-device';\nimport WebGLTexture from './webgl-texture';\nimport Renderbuffer from '../objects/webgl-renderbuffer';\nimport {getWebGLTextureFormat, getWebGLDepthStencilAttachment} from '../converters/texture-formats';\n\nexport type TextureAttachment = [Texture, number?, number?];\nexport type Attachment = WebGLTexture | Renderbuffer | TextureAttachment;\n\n/** luma.gl Framebuffer, WebGL implementation */\nexport default class WEBGLFramebuffer extends Framebuffer {\n device: WebGLDevice;\n gl: WebGLRenderingContext;\n handle: WebGLFramebuffer;\n\n get texture() { return this.colorAttachments[0]; }\n readonly colorAttachments: WebGLTexture[] = [];\n readonly depthStencilAttachment: WebGLTexture | undefined = undefined;\n protected _ownResources: (WebGLTexture | Renderbuffer)[] = [];\n\n constructor(device: WebGLDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n this.gl = device.gl;\n this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();\n\n if (this.handle) { // default framebuffer is null...\n // @ts-expect-error Per SPECTOR docs\n this.handle.__SPECTOR_Metadata = {id: this.props.id, props: this.props};\n }\n\n this.colorAttachments = this._createColorAttachments();\n // @ts-expect-error\n this.depthStencilAttachment = this._createDepthStencilAttachment();\n\n /** Attach from a map of attachments */\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment);\n }\n }\n\n if (this.props.depthStencilAttachment) {\n this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // @ts-expect-error\n if (props.check !== false) {\n this._checkStatus();\n }\n }\n\n destroy() {\n if (this.handle !== null) {\n for (const resource of this._ownResources) {\n resource.destroy();\n }\n this.gl.deleteFramebuffer(this.handle);\n this.handle = null;\n }\n }\n\n // PRIVATE\n\n /** Check the status */\n protected _checkStatus(): void {\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 if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n\n _createColorAttachments(): WebGLTexture[] {\n return this.props.colorAttachments.map(colorAttachment => {\n if (!colorAttachment) {\n return undefined;\n }\n if (colorAttachment instanceof WebGLTexture) {\n return colorAttachment;\n }\n // if (typeof colorAttachment === 'default') {\n // return this._createColorAttachment('rgba8unorm', this.width, this.height);\n // }\n // @ts-expect-error\n return this._createColorAttachment(colorAttachment, this.width, this.height);\n });\n }\n\n /** Create a color attachment */\n protected _createColorAttachment(format: ColorTextureFormat, width: number, height: number): WebGLTexture {\n const texture = this.device._createTexture({\n id: `${this.id}-color`,\n data: null, // reserves texture memory, but texels are undefined\n format,\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 sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n },\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 }) as WebGLTexture;\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Create a depth stencil attachment GL.DEPTH24_STENCIL8 */\n protected _createDepthStencilAttachment(): Renderbuffer | WebGLTexture {\n if (!this.props.depthStencilAttachment) {\n return undefined;\n }\n if (this.props.depthStencilAttachment instanceof Renderbuffer) {\n return this.props.depthStencilAttachment;\n }\n if (this.props.depthStencilAttachment instanceof Texture) {\n return this.props.depthStencilAttachment as unknown as WebGLTexture;\n }\n const format = this.props.depthStencilAttachment;\n const webglFormat = getWebGLTextureFormat(this.gl, format);\n\n const texture = new Renderbuffer(this.device, {\n id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?\n format: webglFormat,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n width: this.width,\n height: this.height\n });\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Attachment resize is expected to be a noop if size is same */\n protected _resizeAttachments(width: number, height: number): this {\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 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\n for (const colorAttachment of this.colorAttachments) {\n colorAttachment.resize({width, height});\n }\n this.depthStencilAttachment?.resize({width, height});\n return this;\n }\n\n /** Attach one attachment */\n protected _attachOne(attachmentPoint: GL, attachment: Attachment): WebGLTexture | Renderbuffer {\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 as unknown as WebGLTexture, layer, level);\n return texture as unknown as WebGLTexture;\n } else if (attachment instanceof WebGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n }\n\n protected _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {\n this.gl.framebufferRenderbuffer(\n GL.FRAMEBUFFER,\n attachment,\n GL.RENDERBUFFER,\n renderbuffer.handle\n );\n }\n\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WebGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n protected _attachTexture(attachment: GL, texture: WebGLTexture, layer: number, level: number): void {\n const {gl, gl2} = this.device;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n this.device.assertWebGL2();\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\n// Helper functions\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 switch (status) {\n case GL.FRAMEBUFFER_COMPLETE:\n return 'success';\n case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'Mismatched attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'No attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'Height/width mismatch';\n case GL.FRAMEBUFFER_UNSUPPORTED:\n return 'Unsupported or split attachments';\n // WebGL2\n case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n"],"file":"webgl-framebuffer.js"}
|
|
1
|
+
{"version":3,"file":"webgl-framebuffer.js","names":["Framebuffer","assert","WEBGLTexture","WEBGLRenderbuffer","getDepthStencilAttachmentWebGL","WEBGLFramebuffer","texture","colorAttachments","constructor","device","props","gl","handle","isDefaultFramebuffer","createFramebuffer","setSpectorMetadata","id","autoCreateAttachmentTextures","bindFramebuffer","i","length","attachment","attachmentPoint","_attachOne","depthStencilAttachment","format","check","_checkStatus","destroy","destroyed","deleteFramebuffer","prevHandle","status","checkFramebufferStatus","Error","_getFrameBufferStatus","createDepthStencilTexture","width","height","resizeAttachments","drawingBufferWidth","drawingBufferHeight","undefined","colorAttachment","resize","_attachWEBGLRenderbuffer","Array","isArray","layer","level","_attachTexture","renderbuffer","framebufferRenderbuffer","gl2","bindTexture","target","assertWebGL2","framebufferTextureLayer","face","mapIndexToCubeMapFace","framebufferTexture2D"],"sources":["../../../src/adapter/resources/webgl-framebuffer.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {FramebufferProps, TextureFormat} from '@luma.gl/core';\nimport {Framebuffer, Texture, assert} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLTexture} from './webgl-texture';\nimport {WEBGLRenderbuffer} from '../objects/webgl-renderbuffer';\nimport {getDepthStencilAttachmentWebGL} from '../converters/texture-formats';\n\nexport type TextureAttachment = [Texture, number?, number?];\nexport type Attachment = WEBGLTexture | WEBGLRenderbuffer | TextureAttachment;\n\n/** luma.gl Framebuffer, WebGL implementation */\nexport class WEBGLFramebuffer extends Framebuffer {\n device: WebGLDevice;\n gl: WebGLRenderingContext;\n handle: WebGLFramebuffer;\n\n get texture() {\n return this.colorAttachments[0];\n }\n\n constructor(device: WebGLDevice, props: FramebufferProps) {\n super(device, props);\n\n // WebGL default framebuffer handle is null\n const isDefaultFramebuffer = props.handle === null;\n\n this.device = device;\n this.gl = device.gl;\n this.handle =\n this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();\n\n if (!isDefaultFramebuffer) {\n // default framebuffer handle is null, so we can't set spector metadata...\n device.setSpectorMetadata(this.handle, {id: this.props.id, props: this.props});\n\n // Auto create textures for attachments if needed\n this.autoCreateAttachmentTextures();\n\n /** Attach from a map of attachments */\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment as WEBGLTexture);\n }\n }\n\n if (this.depthStencilAttachment) {\n this._attachOne(\n getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format),\n this.depthStencilAttachment as WEBGLTexture\n );\n }\n\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);\n }\n\n // @ts-expect-error\n if (props.check !== false) {\n this._checkStatus();\n }\n }\n\n /** destroys any auto created resources etc. */\n override destroy(): void {\n super.destroy(); // destroys owned resources etc.\n if (!this.destroyed && this.handle !== null) {\n this.gl.deleteFramebuffer(this.handle);\n // this.handle = null;\n }\n }\n\n // PRIVATE\n\n /** Check the status */\n protected _checkStatus(): void {\n const {gl} = this;\n // TODO - should we really rely on this trick? \n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle) as unknown as WebGLFramebuffer;\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n\n /** In WebGL we must use renderbuffers for depth/stencil attachments (unless we have extensions) */\n protected override createDepthStencilTexture(format: TextureFormat): Texture {\n return new WEBGLRenderbuffer(this.device, {\n id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?\n format,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n width: this.width,\n height: this.height\n }) as unknown as WEBGLTexture;\n }\n\n /** \n * Attachment resize is expected to be a noop if size is same \n */\n protected override resizeAttachments(width: number, height: number): this {\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 // TODO Not clear that this is better than default destroy/create implementation\n\n for (const colorAttachment of this.colorAttachments) {\n (colorAttachment as WEBGLTexture).resize({width, height});\n }\n if (this.depthStencilAttachment) {\n (this.depthStencilAttachment as WEBGLTexture).resize({width, height});\n }\n return this;\n }\n\n /** Attach one attachment */\n protected _attachOne(\n attachmentPoint: GL,\n attachment: Attachment\n ): WEBGLTexture | WEBGLRenderbuffer {\n if (attachment instanceof WEBGLRenderbuffer) {\n this._attachWEBGLRenderbuffer(attachmentPoint, attachment);\n return attachment;\n } else if (Array.isArray(attachment)) {\n const [texture, layer = 0, level = 0] = attachment;\n this._attachTexture(attachmentPoint, texture as unknown as WEBGLTexture, layer, level);\n return texture as unknown as WEBGLTexture;\n } else if (attachment instanceof WEBGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n throw new Error('attach');\n }\n\n protected _attachWEBGLRenderbuffer(attachment: GL, renderbuffer: WEBGLRenderbuffer): void {\n this.gl.framebufferRenderbuffer(\n GL.FRAMEBUFFER,\n attachment,\n GL.RENDERBUFFER,\n renderbuffer.handle\n );\n }\n\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WEBGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n protected _attachTexture(\n attachment: GL,\n texture: WEBGLTexture,\n layer: number,\n level: number\n ): void {\n const {gl, gl2} = this.device;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n this.device.assertWebGL2();\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\n// Helper functions\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer: number | GL): GL {\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 as number) ? 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: GL) {\n switch (status) {\n case GL.FRAMEBUFFER_COMPLETE:\n return 'success';\n case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'Mismatched attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'No attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'Height/width mismatch';\n case GL.FRAMEBUFFER_UNSUPPORTED:\n return 'Unsupported or split attachments';\n // WebGL2\n case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,11 +1,26 @@
|
|
|
1
|
-
import { RenderPass, RenderPassProps } from '@luma.gl/
|
|
2
|
-
import WebGLDevice from '../webgl-device';
|
|
3
|
-
|
|
1
|
+
import { RenderPass, RenderPassProps, NumberArray, RenderPassParameters } from '@luma.gl/core';
|
|
2
|
+
import { WebGLDevice } from '../webgl-device';
|
|
3
|
+
import { GLParameters } from '@luma.gl/constants';
|
|
4
|
+
export declare class WEBGLRenderPass extends RenderPass {
|
|
4
5
|
readonly device: WebGLDevice;
|
|
6
|
+
/** Parameters that should be applied before each draw call */
|
|
7
|
+
glParameters: GLParameters;
|
|
5
8
|
constructor(device: WebGLDevice, props: RenderPassProps);
|
|
6
|
-
|
|
9
|
+
end(): void;
|
|
7
10
|
pushDebugGroup(groupLabel: string): void;
|
|
8
11
|
popDebugGroup(): void;
|
|
9
12
|
insertDebugMarker(markerLabel: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Maps RenderPass parameters to GL parameters
|
|
15
|
+
*/
|
|
16
|
+
setParameters(parameters?: RenderPassParameters): void;
|
|
17
|
+
/**
|
|
18
|
+
* Optionally clears depth, color and stencil buffers based on parameters
|
|
19
|
+
*/
|
|
20
|
+
protected clear(): void;
|
|
21
|
+
/**
|
|
22
|
+
* WebGL2 - clear a specific color buffer
|
|
23
|
+
*/
|
|
24
|
+
protected clearColorBuffer(drawBuffer?: number, value?: NumberArray): void;
|
|
10
25
|
}
|
|
11
26
|
//# sourceMappingURL=webgl-render-pass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAK,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAYpD,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;gBAEf,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;IAYvD,GAAG,IAAI,IAAI;IAQX,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IACxC,aAAa,IAAI,IAAI;IACrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAS5C;;OAEG;IACH,aAAa,CAAC,UAAU,GAAE,oBAAyB,GAAG,IAAI;IAiD1D;;OAEG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IA+BvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,UAAU,GAAE,MAAU,EAAE,KAAK,GAAE,WAA0B;CAwCrF"}
|
|
@@ -1,19 +1,107 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { RenderPass } from '@luma.gl/core';
|
|
2
|
+
import { withGLParameters } from "../../context/state-tracker/with-parameters.js";
|
|
3
|
+
import { setGLParameters } from "../../context/parameters/unified-parameter-api.js";
|
|
4
|
+
import { pushContextState, popContextState } from "../../context/state-tracker/track-context-state.js";
|
|
5
|
+
const GL_DEPTH_BUFFER_BIT = 0x00000100;
|
|
6
|
+
const GL_STENCIL_BUFFER_BIT = 0x00000400;
|
|
7
|
+
const GL_COLOR_BUFFER_BIT = 0x00004000;
|
|
8
|
+
const GL_COLOR = 0x1800;
|
|
9
|
+
export class WEBGLRenderPass extends RenderPass {
|
|
4
10
|
constructor(device, props) {
|
|
5
11
|
super(device, props);
|
|
6
|
-
|
|
7
|
-
|
|
12
|
+
this.device = void 0;
|
|
13
|
+
this.glParameters = void 0;
|
|
14
|
+
this.device = device;
|
|
15
|
+
pushContextState(this.device.gl);
|
|
16
|
+
this.setParameters(this.props.parameters);
|
|
17
|
+
this.clear();
|
|
18
|
+
}
|
|
19
|
+
end() {
|
|
20
|
+
popContextState(this.device.gl);
|
|
21
|
+
if (this.props.framebuffer) {
|
|
22
|
+
setGLParameters(this.device, {
|
|
23
|
+
framebuffer: null
|
|
24
|
+
});
|
|
25
|
+
}
|
|
8
26
|
}
|
|
9
|
-
|
|
10
|
-
endPass() {}
|
|
11
|
-
|
|
12
27
|
pushDebugGroup(groupLabel) {}
|
|
13
|
-
|
|
14
28
|
popDebugGroup() {}
|
|
15
|
-
|
|
16
29
|
insertDebugMarker(markerLabel) {}
|
|
17
|
-
|
|
30
|
+
setParameters() {
|
|
31
|
+
let parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
32
|
+
const glParameters = {};
|
|
33
|
+
if (this.props.framebuffer) {
|
|
34
|
+
glParameters.framebuffer = this.props.framebuffer;
|
|
35
|
+
}
|
|
36
|
+
if (this.props.depthReadOnly) {
|
|
37
|
+
glParameters.depthMask = !this.props.depthReadOnly;
|
|
38
|
+
}
|
|
39
|
+
glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;
|
|
40
|
+
glParameters[35977] = this.props.discard;
|
|
41
|
+
if (parameters.viewport) {
|
|
42
|
+
if (parameters.viewport.length >= 6) {
|
|
43
|
+
glParameters.viewport = parameters.viewport.slice(0, 4);
|
|
44
|
+
glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];
|
|
45
|
+
} else {
|
|
46
|
+
glParameters.viewport = parameters.viewport;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
glParameters.scissorTest = Boolean(parameters.scissorRect);
|
|
50
|
+
if (parameters.scissorRect) {
|
|
51
|
+
glParameters.scissor = parameters.scissorRect;
|
|
52
|
+
}
|
|
53
|
+
if (parameters.blendConstant) {
|
|
54
|
+
glParameters.blendColor = parameters.blendConstant;
|
|
55
|
+
}
|
|
56
|
+
if (parameters.stencilReference) {
|
|
57
|
+
console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');
|
|
58
|
+
parameters[2967] = parameters.stencilReference;
|
|
59
|
+
}
|
|
60
|
+
this.glParameters = glParameters;
|
|
61
|
+
setGLParameters(this.device, glParameters);
|
|
62
|
+
}
|
|
63
|
+
clear() {
|
|
64
|
+
const glParameters = {
|
|
65
|
+
...this.glParameters
|
|
66
|
+
};
|
|
67
|
+
let clearMask = 0;
|
|
68
|
+
if (this.props.clearColor !== false) {
|
|
69
|
+
clearMask |= GL_COLOR_BUFFER_BIT;
|
|
70
|
+
glParameters.clearColor = this.props.clearColor;
|
|
71
|
+
}
|
|
72
|
+
if (this.props.clearDepth !== false) {
|
|
73
|
+
clearMask |= GL_DEPTH_BUFFER_BIT;
|
|
74
|
+
glParameters.clearDepth = this.props.clearDepth;
|
|
75
|
+
}
|
|
76
|
+
if (this.props.clearStencil !== false) {
|
|
77
|
+
clearMask |= GL_STENCIL_BUFFER_BIT;
|
|
78
|
+
glParameters.clearStencil = this.props.clearStencil;
|
|
79
|
+
}
|
|
80
|
+
if (clearMask !== 0) {
|
|
81
|
+
withGLParameters(this.device, glParameters, () => {
|
|
82
|
+
this.device.gl.clear(clearMask);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
clearColorBuffer() {
|
|
87
|
+
let drawBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
88
|
+
let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0, 0];
|
|
89
|
+
withGLParameters(this.device.gl2, {
|
|
90
|
+
framebuffer: this.props.framebuffer
|
|
91
|
+
}, () => {
|
|
92
|
+
switch (value.constructor) {
|
|
93
|
+
case Int32Array:
|
|
94
|
+
this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);
|
|
95
|
+
break;
|
|
96
|
+
case Uint32Array:
|
|
97
|
+
this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);
|
|
98
|
+
break;
|
|
99
|
+
case Float32Array:
|
|
100
|
+
default:
|
|
101
|
+
this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
18
106
|
}
|
|
19
107
|
//# sourceMappingURL=webgl-render-pass.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":["RenderPass","WEBGLRenderPass","constructor","device","props","endPass","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"mappings":";AAAA,SAAQA,UAAR,QAA0C,cAA1C;AAGA,eAAe,MAAMC,eAAN,SAA8BD,UAA9B,CAAyC;AAGtDE,EAAAA,WAAW,CAACC,MAAD,EAAsBC,KAAtB,EAA8C;AACvD,UAAMD,MAAN,EAAcC,KAAd;;AADuD;AAExD;;AAEDC,EAAAA,OAAO,GAAS,CAAE;;AAElBC,EAAAA,cAAc,CAACC,UAAD,EAA2B,CAAE;;AAC3CC,EAAAA,aAAa,GAAS,CAAE;;AACxBC,EAAAA,iBAAiB,CAACC,WAAD,EAA4B,CAAE;;AAXO","sourcesContent":["import {RenderPass, RenderPassProps} from '@luma.gl/api';\nimport WebGLDevice from '../webgl-device';\n\nexport default class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n }\n\n endPass(): void {}\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n}\n"],"file":"webgl-render-pass.js"}
|
|
1
|
+
{"version":3,"file":"webgl-render-pass.js","names":["RenderPass","withGLParameters","setGLParameters","pushContextState","popContextState","GL_DEPTH_BUFFER_BIT","GL_STENCIL_BUFFER_BIT","GL_COLOR_BUFFER_BIT","GL_COLOR","WEBGLRenderPass","constructor","device","props","glParameters","gl","setParameters","parameters","clear","end","framebuffer","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel","arguments","length","undefined","depthReadOnly","depthMask","stencilMask","stencilReadOnly","discard","viewport","slice","depthRange","scissorTest","Boolean","scissorRect","scissor","blendConstant","blendColor","stencilReference","console","warn","clearMask","clearColor","clearDepth","clearStencil","clearColorBuffer","drawBuffer","value","gl2","Int32Array","clearBufferiv","Uint32Array","clearBufferuiv","Float32Array","clearBufferfv"],"sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {RenderPass, RenderPassProps, NumberArray, RenderPassParameters} from '@luma.gl/core';\nimport {WebGLDevice} from '../webgl-device';\nimport {GL, GLParameters} from '@luma.gl/constants';\nimport {withGLParameters} from '../../context/state-tracker/with-parameters';\nimport {setGLParameters} from '../../context/parameters/unified-parameter-api';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\n\n// Should collapse during minification\nconst GL_DEPTH_BUFFER_BIT = 0x00000100;\nconst GL_STENCIL_BUFFER_BIT = 0x00000400;\nconst GL_COLOR_BUFFER_BIT = 0x00004000;\n\nconst GL_COLOR = 0x1800;\n\nexport class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n /** Parameters that should be applied before each draw call */\n glParameters: GLParameters;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n this.device = device;\n\n // TODO - do parameters (scissorRect) affect the clear operation?\n pushContextState(this.device.gl);\n this.setParameters(this.props.parameters);\n\n // Hack - for now WebGL draws in \"immediate mode\" (instead of queueing the operations)...\n this.clear();\n }\n\n end(): void {\n popContextState(this.device.gl);\n if (this.props.framebuffer) {\n setGLParameters(this.device, {framebuffer: null});\n }\n // should add commands to CommandEncoder.\n }\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n\n /**\n * Maps RenderPass parameters to GL parameters\n */\n setParameters(parameters: RenderPassParameters = {}): void {\n const glParameters: GLParameters = {};\n\n // Framebuffers are specified using parameters in WebGL\n if (this.props.framebuffer) {\n glParameters.framebuffer = this.props.framebuffer;\n }\n\n if (this.props.depthReadOnly) {\n glParameters.depthMask = !this.props.depthReadOnly;\n }\n\n glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;\n\n glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;\n\n // Map the four renderpass parameters to WebGL parameters\n if (parameters.viewport) {\n // WebGPU viewports are 6 coordinates (X, Y, Z)\n if (parameters.viewport.length >= 6) {\n glParameters.viewport = parameters.viewport.slice(0, 4);\n glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];\n } else {\n // WebGL viewports are 4 coordinates (X, Y)\n glParameters.viewport = parameters.viewport;\n }\n }\n glParameters.scissorTest = Boolean(parameters.scissorRect);\n if (parameters.scissorRect) {\n glParameters.scissor = parameters.scissorRect;\n }\n if (parameters.blendConstant) {\n glParameters.blendColor = parameters.blendConstant;\n }\n if (parameters.stencilReference) {\n // eslint-disable-next-line no-console\n console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');\n // parameters.stencilFunc = [func, ref, mask];\n // Does this work?\n parameters[GL.STENCIL_REF] = parameters.stencilReference;\n }\n\n this.glParameters = glParameters;\n\n setGLParameters(this.device, glParameters);\n }\n\n // Internal\n\n /**\n * Optionally clears depth, color and stencil buffers based on parameters\n */\n protected clear(): void {\n const glParameters: GLParameters = {...this.glParameters};\n\n let clearMask = 0;\n\n if (this.props.clearColor !== false) {\n clearMask |= GL_COLOR_BUFFER_BIT;\n glParameters.clearColor = this.props.clearColor;\n }\n if (this.props.clearDepth !== false) {\n clearMask |= GL_DEPTH_BUFFER_BIT;\n glParameters.clearDepth = this.props.clearDepth;\n }\n if (this.props.clearStencil !== false) {\n clearMask |= GL_STENCIL_BUFFER_BIT;\n glParameters.clearStencil = this.props.clearStencil;\n }\n\n if (clearMask !== 0) {\n // Temporarily set any clear \"colors\" and call clear\n withGLParameters(this.device, glParameters, () => {\n this.device.gl.clear(clearMask);\n });\n\n // TODO - clear multiple color attachments\n // for (attachment of this.framebuffer.colorAttachments) {\n // this.clearColorBuffer \n // }\n }\n }\n\n /** \n * WebGL2 - clear a specific color buffer \n */\n protected clearColorBuffer(drawBuffer: number = 0, value: NumberArray = [0, 0, 0, 0]) {\n withGLParameters(this.device.gl2, {framebuffer: this.props.framebuffer}, () => {\n // Method selection per OpenGL ES 3 docs\n switch (value.constructor) {\n case Int32Array:\n this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);\n break;\n case Uint32Array:\n this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);\n break;\n case Float32Array:\n default:\n this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);\n break;\n }\n });\n }\n\n // clearDepthStencil() {\n // const GL_DEPTH = 0x1801;\n // const GL_STENCIL = 0x1802;\n // const GL_DEPTH_STENCIL = 0x84f9;\n\n // case GL_DEPTH:\n // this.device.gl2.clearBufferfv(GL_DEPTH, 0, [value]);\n // break;\n\n // case GL_STENCIL:\n // this.device.gl2.clearBufferiv(GL_STENCIL, 0, [value]);\n // break;\n\n // case GL_DEPTH_STENCIL:\n // const [depth, stencil] = value;\n // this.device.gl2.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);\n // break;\n\n // default:\n // assert(false, ERR_ARGUMENTS);\n // }\n // });\n}\n\n"],"mappings":"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"}
|