@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.30
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 +2 -1
- package/dist/adapter/converters/device-parameters.d.ts +14 -4
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +28 -46
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +5 -5
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +20 -56
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/texture-formats.d.ts +31 -42
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +163 -178
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.d.ts +2 -2
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +3 -9
- 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 +13 -20
- 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 +2 -5
- 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 +9 -11
- package/dist/adapter/device-helpers/get-device-info.js.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/attribute-utils.d.ts +4 -4
- package/dist/adapter/helpers/attribute-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/attribute-utils.js +1 -18
- package/dist/adapter/helpers/attribute-utils.js.map +1 -1
- 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 +10 -7
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +101 -84
- 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 +0 -7
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts +2 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +3 -33
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/uniforms.d.ts +9 -10
- package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
- package/dist/adapter/helpers/uniforms.js +8 -18
- package/dist/adapter/helpers/uniforms.js.map +1 -1
- 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 +1 -28
- 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 +35 -41
- 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 +19 -75
- package/dist/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +38 -11
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js +122 -32
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +43 -71
- 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 +169 -41
- 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 +8 -17
- 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 +41 -149
- 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 +88 -9
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -11
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +90 -152
- 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 +7 -15
- 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 +9 -22
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +64 -44
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +98 -213
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- 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 +8 -20
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +64 -41
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +133 -113
- 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 +14 -38
- package/dist/classic/accessor.js.map +1 -1
- package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -28
- package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
- package/dist/classic/{buffer.js → buffer-with-accessor.js} +54 -122
- package/dist/classic/buffer-with-accessor.js.map +1 -0
- 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 +202 -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 +38 -0
- package/dist/classic/format-utils.js.map +1 -0
- package/dist/classic/typed-array-utils.d.ts +15 -17
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +1 -21
- 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/{esm/context/context/create-context.js → context/context/create-browser-context.js} +23 -19
- 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.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 +11 -34
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +8 -7
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +8 -18
- 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 +18 -36
- 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 +4 -9
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +21 -29
- 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 +10 -32
- 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 +0 -70
- package/dist/context/polyfill/polyfill-vertex-array-object.js.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 +16 -51
- 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 +7 -9
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/dist.dev.js +10158 -0
- package/dist/index.cjs +6604 -0
- package/dist/index.d.ts +25 -22
- 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 +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist.min.js +37 -0
- package/package.json +21 -9
- package/src/adapter/converters/device-parameters.ts +88 -35
- package/src/adapter/converters/sampler-parameters.ts +19 -9
- package/src/adapter/converters/texture-formats.ts +261 -178
- package/src/adapter/converters/vertex-formats.ts +3 -2
- package/src/adapter/device-helpers/device-features.ts +10 -3
- package/src/adapter/device-helpers/device-limits.ts +3 -3
- package/src/adapter/device-helpers/get-device-info.ts +14 -10
- package/src/adapter/helpers/attribute-utils.ts +4 -5
- package/src/adapter/helpers/get-shader-info.ts +40 -0
- package/src/adapter/helpers/get-shader-layout.ts +150 -68
- package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
- package/src/adapter/helpers/set-uniform.ts +7 -6
- package/src/adapter/helpers/uniforms.ts +23 -13
- package/src/adapter/objects/constants-to-keys.ts +3 -25
- package/src/adapter/objects/webgl-renderbuffer.ts +40 -37
- package/src/adapter/objects/webgl-resource.ts +14 -23
- package/src/adapter/objects/webgl-vertex-array-object.ts +201 -37
- package/src/adapter/resources/webgl-buffer.ts +56 -58
- package/src/adapter/resources/webgl-command-buffer.ts +332 -25
- package/src/adapter/resources/webgl-command-encoder.ts +16 -11
- package/src/adapter/resources/webgl-external-texture.ts +2 -2
- package/src/adapter/resources/webgl-framebuffer.ts +88 -133
- package/src/adapter/resources/webgl-render-pass.ts +155 -4
- package/src/adapter/resources/webgl-render-pipeline.ts +161 -104
- package/src/adapter/resources/webgl-sampler.ts +13 -8
- package/src/adapter/resources/webgl-shader.ts +11 -10
- package/src/adapter/resources/webgl-texture.ts +113 -85
- package/src/adapter/webgl-canvas-context.ts +14 -14
- package/src/adapter/webgl-device.ts +192 -77
- package/src/classic/accessor.ts +4 -17
- package/src/classic/{buffer.ts → buffer-with-accessor.ts} +67 -75
- package/src/classic/clear.ts +110 -0
- package/src/classic/copy-and-blit.ts +308 -0
- package/src/classic/format-utils.ts +43 -0
- package/src/classic/typed-array-utils.ts +18 -27
- package/src/context/context/{create-context.ts → create-browser-context.ts} +48 -31
- package/src/context/context/create-headless-context.ts +48 -0
- package/src/context/context/webgl-checks.ts +1 -1
- package/src/context/debug/spector.ts +7 -6
- package/src/context/debug/webgl-developer-tools.ts +21 -15
- package/src/context/parameters/unified-parameter-api.ts +20 -14
- package/src/context/parameters/webgl-parameter-tables.ts +117 -98
- package/src/context/polyfill/context-data.ts +27 -0
- package/src/context/polyfill/get-parameter-polyfill.ts +8 -7
- package/src/context/polyfill/polyfill-context.ts +7 -9
- package/src/context/polyfill/polyfill-table.ts +18 -16
- package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
- package/src/context/state-tracker/track-context-state.ts +14 -13
- package/src/context/state-tracker/with-parameters.ts +8 -2
- package/src/index.ts +42 -33
- 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/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.map +0 -1
- 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 -831
- 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.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 -144
- 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/bundle.ts +0 -4
- package/src/context/context/context-state.ts +0 -41
- package/src/context/context/device-pixels.ts +0 -152
- package/src/init.ts +0 -4
- package/src/types/webgl.ts +0 -283
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Device, Parameters, CompareFunction } from '@luma.gl/
|
|
2
|
-
import GL from '@luma.gl/constants';
|
|
3
|
-
import type { GLParameters } from '
|
|
1
|
+
import { Device, Parameters, CompareFunction } from '@luma.gl/core';
|
|
2
|
+
import { GL } from '@luma.gl/constants';
|
|
3
|
+
import type { GLParameters } from '@luma.gl/constants';
|
|
4
4
|
/**
|
|
5
5
|
* Execute a function with a set of temporary WebGL parameter overrides
|
|
6
6
|
* - Saves current "global" WebGL context settings
|
|
@@ -8,8 +8,18 @@ import type { GLParameters } from '../../types/webgl';
|
|
|
8
8
|
* - Executes supplied function
|
|
9
9
|
* - Restores parameters
|
|
10
10
|
* - Returns the return value of the supplied function
|
|
11
|
+
* @deprecated use withDeviceParameters instead
|
|
11
12
|
*/
|
|
12
|
-
export declare function
|
|
13
|
+
export declare function withGLParameters<T = unknown>(device: Device, parameters: GLParameters, func: (device?: Device) => T): T;
|
|
14
|
+
/**
|
|
15
|
+
* Execute a function with a set of temporary WebGL parameter overrides
|
|
16
|
+
* - Saves current "global" WebGL context settings
|
|
17
|
+
* - Sets the supplies WebGL context parameters,
|
|
18
|
+
* - Executes supplied function
|
|
19
|
+
* - Restores parameters
|
|
20
|
+
* - Returns the return value of the supplied function
|
|
21
|
+
*/
|
|
22
|
+
export declare function withDeviceParameters<T = unknown>(device: Device, parameters: Parameters, func: (device?: Device) => T): T;
|
|
13
23
|
/** Set WebGPU Style Parameters */
|
|
14
24
|
export declare function setDeviceParameters(device: Device, parameters: Parameters): void;
|
|
15
25
|
export declare function convertCompareFunction(parameter: string, value: CompareFunction): GL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/device-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"device-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/device-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,UAAU,EACV,eAAe,EAIhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAOrD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,EAC9C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,QA+GzE;AAyBD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,EAAE,CAWpF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,eAAe,CAWtF"}
|
|
@@ -1,17 +1,26 @@
|
|
|
1
|
-
import { log, isObjectEmpty } from '@luma.gl/
|
|
2
|
-
import GL from '@luma.gl/constants';
|
|
3
|
-
import { pushContextState, popContextState } from
|
|
4
|
-
import { setParameters } from
|
|
5
|
-
import WebGLDevice from
|
|
6
|
-
export function
|
|
1
|
+
import { log, isObjectEmpty } from '@luma.gl/core';
|
|
2
|
+
import { GL } from '@luma.gl/constants';
|
|
3
|
+
import { pushContextState, popContextState } from "../../context/state-tracker/track-context-state.js";
|
|
4
|
+
import { setParameters } from "../../context/parameters/unified-parameter-api.js";
|
|
5
|
+
import { WebGLDevice } from "../webgl-device.js";
|
|
6
|
+
export function withGLParameters(device, parameters, func) {
|
|
7
7
|
if (isObjectEmpty(parameters)) {
|
|
8
8
|
return func(device);
|
|
9
9
|
}
|
|
10
|
-
|
|
11
10
|
pushContextState(device.gl);
|
|
12
|
-
|
|
13
11
|
try {
|
|
14
12
|
setParameters(device, parameters);
|
|
13
|
+
return func(device);
|
|
14
|
+
} finally {
|
|
15
|
+
popContextState(device.gl);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function withDeviceParameters(device, parameters, func) {
|
|
19
|
+
if (isObjectEmpty(parameters)) {
|
|
20
|
+
return func(device);
|
|
21
|
+
}
|
|
22
|
+
pushContextState(device.gl);
|
|
23
|
+
try {
|
|
15
24
|
setDeviceParameters(device, parameters);
|
|
16
25
|
return func(device);
|
|
17
26
|
} finally {
|
|
@@ -21,58 +30,47 @@ export function withDeviceParameters(device, parameters, func) {
|
|
|
21
30
|
export function setDeviceParameters(device, parameters) {
|
|
22
31
|
const webglDevice = WebGLDevice.attach(device);
|
|
23
32
|
const {
|
|
24
|
-
gl
|
|
25
|
-
gl2
|
|
33
|
+
gl
|
|
26
34
|
} = webglDevice;
|
|
27
|
-
|
|
28
35
|
if (parameters.cullMode) {
|
|
29
36
|
switch (parameters.cullMode) {
|
|
30
37
|
case 'none':
|
|
31
38
|
gl.disable(GL.CULL_FACE);
|
|
32
39
|
break;
|
|
33
|
-
|
|
34
40
|
case 'front':
|
|
35
41
|
gl.enable(GL.CULL_FACE);
|
|
36
42
|
gl.cullFace(GL.FRONT);
|
|
37
43
|
break;
|
|
38
|
-
|
|
39
44
|
case 'back':
|
|
40
45
|
gl.enable(GL.CULL_FACE);
|
|
41
46
|
gl.cullFace(GL.BACK);
|
|
42
47
|
break;
|
|
43
48
|
}
|
|
44
49
|
}
|
|
45
|
-
|
|
46
50
|
if (parameters.frontFace) {
|
|
47
51
|
gl.frontFace(map('frontFace', parameters.frontFace, {
|
|
48
52
|
ccw: GL.CCW,
|
|
49
53
|
cw: GL.CW
|
|
50
54
|
}));
|
|
51
55
|
}
|
|
52
|
-
|
|
53
56
|
if (parameters.depthBias !== undefined) {
|
|
54
57
|
gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);
|
|
55
58
|
}
|
|
56
|
-
|
|
57
59
|
if (parameters.depthWriteEnabled !== undefined) {
|
|
58
60
|
gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));
|
|
59
61
|
}
|
|
60
|
-
|
|
61
62
|
if (parameters.depthCompare) {
|
|
62
63
|
parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);
|
|
63
64
|
gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));
|
|
64
65
|
}
|
|
65
|
-
|
|
66
66
|
if (parameters.stencilWriteMask) {
|
|
67
67
|
const mask = parameters.stencilWriteMask;
|
|
68
68
|
gl.stencilMaskSeparate(GL.FRONT, mask);
|
|
69
69
|
gl.stencilMaskSeparate(GL.BACK, mask);
|
|
70
70
|
}
|
|
71
|
-
|
|
72
71
|
if (parameters.stencilReadMask) {
|
|
73
72
|
log.warn('stencilReadMask not supported under WebGL');
|
|
74
73
|
}
|
|
75
|
-
|
|
76
74
|
if (parameters.stencilCompare) {
|
|
77
75
|
const mask = parameters.stencilReadMask || 0xffffffff;
|
|
78
76
|
const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);
|
|
@@ -80,8 +78,7 @@ export function setDeviceParameters(device, parameters) {
|
|
|
80
78
|
gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);
|
|
81
79
|
gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);
|
|
82
80
|
}
|
|
83
|
-
|
|
84
|
-
if (parameters.stencilPassOperation) {
|
|
81
|
+
if (parameters.stencilPassOperation && parameters.stencilFailOperation && parameters.stencilDepthFailOperation) {
|
|
85
82
|
const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);
|
|
86
83
|
const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);
|
|
87
84
|
const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);
|
|
@@ -91,14 +88,14 @@ export function setDeviceParameters(device, parameters) {
|
|
|
91
88
|
}
|
|
92
89
|
export function convertCompareFunction(parameter, value) {
|
|
93
90
|
return map(parameter, value, {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
never: GL.NEVER,
|
|
92
|
+
less: GL.LESS,
|
|
93
|
+
equal: GL.EQUAL,
|
|
97
94
|
'less-equal': GL.LEQUAL,
|
|
98
|
-
|
|
95
|
+
greater: GL.GREATER,
|
|
99
96
|
'not-equal': GL.NOTEQUAL,
|
|
100
97
|
'greater-equal': GL.GEQUAL,
|
|
101
|
-
|
|
98
|
+
always: GL.ALWAYS
|
|
102
99
|
});
|
|
103
100
|
}
|
|
104
101
|
export function convertToCompareFunction(parameter, value) {
|
|
@@ -113,42 +110,27 @@ export function convertToCompareFunction(parameter, value) {
|
|
|
113
110
|
[GL.ALWAYS]: 'always'
|
|
114
111
|
});
|
|
115
112
|
}
|
|
116
|
-
|
|
117
113
|
function convertStencilOperation(parameter, value) {
|
|
118
114
|
return map(parameter, value, {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
115
|
+
keep: GL.KEEP,
|
|
116
|
+
zero: GL.ZERO,
|
|
117
|
+
replace: GL.REPLACE,
|
|
118
|
+
invert: GL.INVERT,
|
|
123
119
|
'increment-clamp': GL.INCR,
|
|
124
120
|
'decrement-clamp': GL.DECR,
|
|
125
121
|
'increment-wrap': GL.INCR_WRAP,
|
|
126
122
|
'decrement-wrap': GL.DECR_WRAP
|
|
127
123
|
});
|
|
128
124
|
}
|
|
129
|
-
|
|
130
|
-
function convertBlendOperationToEquation(parameter, value) {
|
|
131
|
-
return map(parameter, value, {
|
|
132
|
-
'add': GL.FUNC_ADD,
|
|
133
|
-
'sub': GL.FUNC_SUBTRACT,
|
|
134
|
-
'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,
|
|
135
|
-
'min': GL.MIN,
|
|
136
|
-
'max': GL.MAX
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
|
|
140
125
|
function message(parameter, value) {
|
|
141
126
|
return "Illegal parameter ".concat(value, " for ").concat(parameter);
|
|
142
127
|
}
|
|
143
|
-
|
|
144
128
|
function map(parameter, value, valueMap) {
|
|
145
129
|
if (!(value in valueMap)) {
|
|
146
130
|
throw new Error(message(parameter, value));
|
|
147
131
|
}
|
|
148
|
-
|
|
149
132
|
return valueMap[value];
|
|
150
133
|
}
|
|
151
|
-
|
|
152
134
|
function mapBoolean(parameter, value) {
|
|
153
135
|
return value;
|
|
154
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapter/converters/device-parameters.ts"],"names":["log","isObjectEmpty","GL","pushContextState","popContextState","setParameters","WebGLDevice","withDeviceParameters","device","parameters","func","gl","setDeviceParameters","webglDevice","attach","gl2","cullMode","disable","CULL_FACE","enable","cullFace","FRONT","BACK","frontFace","map","ccw","CCW","cw","CW","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","DEPTH_TEST","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","STENCIL_TEST","stencilFuncSeparate","stencilPassOperation","dppass","convertStencilOperation","sfail","stencilFailOperation","dpfail","stencilDepthFailOperation","stencilOpSeparate","parameter","value","NEVER","LESS","EQUAL","LEQUAL","GREATER","NOTEQUAL","GEQUAL","ALWAYS","convertToCompareFunction","KEEP","ZERO","REPLACE","INVERT","INCR","DECR","INCR_WRAP","DECR_WRAP","convertBlendOperationToEquation","FUNC_ADD","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","MIN","MAX","message","valueMap","Error"],"mappings":"AAAA,SAA+DA,GAA/D,EAAoEC,aAApE,QAAwF,cAAxF;AACA,OAAOC,EAAP,MAAe,oBAAf;AAEA,SAAQC,gBAAR,EAA0BC,eAA1B,QAAgD,iDAAhD;AACA,SAAQC,aAAR,QAA4B,gDAA5B;AACA,OAAOC,WAAP,MAAwB,iBAAxB;AAUA,OAAO,SAASC,oBAAT,CAA2CC,MAA3C,EAA2DC,UAA3D,EAAkGC,IAAlG,EAAmI;AACxI,MAAIT,aAAa,CAACQ,UAAD,CAAjB,EAA+B;AAE7B,WAAOC,IAAI,CAACF,MAAD,CAAX;AACD;;AAIDL,EAAAA,gBAAgB,CAACK,MAAM,CAACG,EAAR,CAAhB;;AACA,MAAI;AACFN,IAAAA,aAAa,CAACG,MAAD,EAASC,UAAT,CAAb;AACAG,IAAAA,mBAAmB,CAACJ,MAAD,EAASC,UAAT,CAAnB;AACA,WAAOC,IAAI,CAACF,MAAD,CAAX;AACD,GAJD,SAIU;AAERJ,IAAAA,eAAe,CAACI,MAAM,CAACG,EAAR,CAAf;AACD;AACF;AAID,OAAO,SAASC,mBAAT,CAA6BJ,MAA7B,EAA6CC,UAA7C,EAAqE;AAC1E,QAAMI,WAAW,GAAGP,WAAW,CAACQ,MAAZ,CAAmBN,MAAnB,CAApB;AACA,QAAM;AAACG,IAAAA,EAAD;AAAKI,IAAAA;AAAL,MAAYF,WAAlB;;AAGA,MAAIJ,UAAU,CAACO,QAAf,EAAyB;AACvB,YAAQP,UAAU,CAACO,QAAnB;AACE,WAAK,MAAL;AACEL,QAAAA,EAAE,CAACM,OAAH,CAAWf,EAAE,CAACgB,SAAd;AACA;;AACF,WAAK,OAAL;AACEP,QAAAA,EAAE,CAACQ,MAAH,CAAUjB,EAAE,CAACgB,SAAb;AACAP,QAAAA,EAAE,CAACS,QAAH,CAAYlB,EAAE,CAACmB,KAAf;AACA;;AACF,WAAK,MAAL;AACEV,QAAAA,EAAE,CAACQ,MAAH,CAAUjB,EAAE,CAACgB,SAAb;AACAP,QAAAA,EAAE,CAACS,QAAH,CAAYlB,EAAE,CAACoB,IAAf;AACA;AAXJ;AAaD;;AAED,MAAIb,UAAU,CAACc,SAAf,EAA0B;AACxBZ,IAAAA,EAAE,CAACY,SAAH,CAAaC,GAAG,CAAC,WAAD,EAAcf,UAAU,CAACc,SAAzB,EAAoC;AAClDE,MAAAA,GAAG,EAAEvB,EAAE,CAACwB,GAD0C;AAElDC,MAAAA,EAAE,EAAEzB,EAAE,CAAC0B;AAF2C,KAApC,CAAhB;AAID;;AAED,MAAInB,UAAU,CAACoB,SAAX,KAAyBC,SAA7B,EAAwC;AACtCnB,IAAAA,EAAE,CAACoB,aAAH,CAAiBtB,UAAU,CAACoB,SAA5B,EAAuCpB,UAAU,CAACuB,mBAAX,IAAkC,CAAzE;AACD;;AAQD,MAAIvB,UAAU,CAACwB,iBAAX,KAAiCH,SAArC,EAAgD;AAC9CnB,IAAAA,EAAE,CAACuB,SAAH,CAAaC,UAAU,CAAC,mBAAD,EAAsB1B,UAAU,CAACwB,iBAAjC,CAAvB;AACD;;AAEF,MAAIxB,UAAU,CAAC2B,YAAf,EAA6B;AAC1B3B,IAAAA,UAAU,CAAC2B,YAAX,KAA4B,QAA5B,GAAuCzB,EAAE,CAACQ,MAAH,CAAUjB,EAAE,CAACmC,UAAb,CAAvC,GAAkE1B,EAAE,CAACM,OAAH,CAAWf,EAAE,CAACmC,UAAd,CAAlE;AACA1B,IAAAA,EAAE,CAAC2B,SAAH,CAAaC,sBAAsB,CAAC,cAAD,EAAiB9B,UAAU,CAAC2B,YAA5B,CAAnC;AACD;;AAED,MAAI3B,UAAU,CAAC+B,gBAAf,EAAiC;AAC/B,UAAMC,IAAI,GAAGhC,UAAU,CAAC+B,gBAAxB;AACA7B,IAAAA,EAAE,CAAC+B,mBAAH,CAAuBxC,EAAE,CAACmB,KAA1B,EAAiCoB,IAAjC;AACA9B,IAAAA,EAAE,CAAC+B,mBAAH,CAAuBxC,EAAE,CAACoB,IAA1B,EAAgCmB,IAAhC;AACD;;AAED,MAAIhC,UAAU,CAACkC,eAAf,EAAgC;AAE9B3C,IAAAA,GAAG,CAAC4C,IAAJ,CAAS,2CAAT;AACD;;AAED,MAAInC,UAAU,CAACoC,cAAf,EAA+B;AAC7B,UAAMJ,IAAI,GAAGhC,UAAU,CAACkC,eAAX,IAA8B,UAA3C;AACA,UAAMG,OAAO,GAAGP,sBAAsB,CAAC,cAAD,EAAiB9B,UAAU,CAACoC,cAA5B,CAAtC;AAEApC,IAAAA,UAAU,CAACoC,cAAX,KAA8B,QAA9B,GAAyClC,EAAE,CAACQ,MAAH,CAAUjB,EAAE,CAAC6C,YAAb,CAAzC,GAAsEpC,EAAE,CAACM,OAAH,CAAWf,EAAE,CAAC6C,YAAd,CAAtE;AACApC,IAAAA,EAAE,CAACqC,mBAAH,CAAuB9C,EAAE,CAACmB,KAA1B,EAAiCyB,OAAjC,EAA0C,CAA1C,EAA6CL,IAA7C;AACA9B,IAAAA,EAAE,CAACqC,mBAAH,CAAuB9C,EAAE,CAACoB,IAA1B,EAAgCwB,OAAhC,EAAyC,CAAzC,EAA4CL,IAA5C;AACD;;AAED,MAAIhC,UAAU,CAACwC,oBAAf,EAAqC;AACnC,UAAMC,MAAM,GAAGC,uBAAuB,CAAC,sBAAD,EAAyB1C,UAAU,CAACwC,oBAApC,CAAtC;AACA,UAAMG,KAAK,GAAGD,uBAAuB,CAAC,sBAAD,EAAyB1C,UAAU,CAAC4C,oBAApC,CAArC;AACA,UAAMC,MAAM,GAAGH,uBAAuB,CAAC,2BAAD,EAA8B1C,UAAU,CAAC8C,yBAAzC,CAAtC;AACA5C,IAAAA,EAAE,CAAC6C,iBAAH,CAAqBtD,EAAE,CAACmB,KAAxB,EAA+B+B,KAA/B,EAAsCE,MAAtC,EAA8CJ,MAA9C;AACAvC,IAAAA,EAAE,CAAC6C,iBAAH,CAAqBtD,EAAE,CAACoB,IAAxB,EAA8B8B,KAA9B,EAAqCE,MAArC,EAA6CJ,MAA7C;AACD;AA2BF;AAyBD,OAAO,SAASX,sBAAT,CAAgCkB,SAAhC,EAAmDC,KAAnD,EAA+E;AACpF,SAAOlC,GAAG,CAACiC,SAAD,EAAYC,KAAZ,EAAmB;AAC3B,aAASxD,EAAE,CAACyD,KADe;AAE3B,YAAQzD,EAAE,CAAC0D,IAFgB;AAG3B,aAAS1D,EAAE,CAAC2D,KAHe;AAI3B,kBAAc3D,EAAE,CAAC4D,MAJU;AAK3B,eAAW5D,EAAE,CAAC6D,OALa;AAM3B,iBAAa7D,EAAE,CAAC8D,QANW;AAO3B,qBAAiB9D,EAAE,CAAC+D,MAPO;AAQ3B,cAAU/D,EAAE,CAACgE;AARc,GAAnB,CAAV;AAUD;AAED,OAAO,SAASC,wBAAT,CAAkCV,SAAlC,EAAqDC,KAArD,EAAiF;AACtF,SAAOlC,GAAG,CAACiC,SAAD,EAAYC,KAAZ,EAAmB;AAC3B,KAACxD,EAAE,CAACyD,KAAJ,GAAY,OADe;AAE3B,KAACzD,EAAE,CAAC0D,IAAJ,GAAW,MAFgB;AAG3B,KAAC1D,EAAE,CAAC2D,KAAJ,GAAY,OAHe;AAI3B,KAAC3D,EAAE,CAAC4D,MAAJ,GAAa,YAJc;AAK3B,KAAC5D,EAAE,CAAC6D,OAAJ,GAAc,SALa;AAM3B,KAAC7D,EAAE,CAAC8D,QAAJ,GAAe,WANY;AAO3B,KAAC9D,EAAE,CAAC+D,MAAJ,GAAa,eAPc;AAQ3B,KAAC/D,EAAE,CAACgE,MAAJ,GAAa;AARc,GAAnB,CAAV;AAUD;;AAED,SAASf,uBAAT,CAAiCM,SAAjC,EAAoDC,KAApD,EAAiF;AAC/E,SAAOlC,GAAG,CAACiC,SAAD,EAAYC,KAAZ,EAAmB;AAC3B,YAAQxD,EAAE,CAACkE,IADgB;AAE3B,YAAQlE,EAAE,CAACmE,IAFgB;AAG3B,eAAWnE,EAAE,CAACoE,OAHa;AAI3B,cAAUpE,EAAE,CAACqE,MAJc;AAK3B,uBAAmBrE,EAAE,CAACsE,IALK;AAM3B,uBAAmBtE,EAAE,CAACuE,IANK;AAO3B,sBAAkBvE,EAAE,CAACwE,SAPM;AAQ3B,sBAAkBxE,EAAE,CAACyE;AARM,GAAnB,CAAV;AAUD;;AAED,SAASC,+BAAT,CAAyCnB,SAAzC,EAAoDC,KAApD,EAAmE;AACjE,SAAOlC,GAAG,CAACiC,SAAD,EAAYC,KAAZ,EAAmB;AAC3B,WAAOxD,EAAE,CAAC2E,QADiB;AAE3B,WAAO3E,EAAE,CAAC4E,aAFiB;AAG3B,wBAAoB5E,EAAE,CAAC6E,qBAHI;AAK3B,WAAO7E,EAAE,CAAC8E,GALiB;AAM3B,WAAO9E,EAAE,CAAC+E;AANiB,GAAnB,CAAV;AAQD;;AAED,SAASC,OAAT,CAAiBzB,SAAjB,EAAoCC,KAApC,EAAwD;AACtD,qCAA4BA,KAA5B,kBAAyCD,SAAzC;AACD;;AAED,SAASjC,GAAT,CAAaiC,SAAb,EAAgCC,KAAhC,EAA4CyB,QAA5C,EAAgF;AAC9E,MAAI,EAAEzB,KAAK,IAAIyB,QAAX,CAAJ,EAA0B;AACxB,UAAM,IAAIC,KAAJ,CAAUF,OAAO,CAACzB,SAAD,EAAYC,KAAZ,CAAjB,CAAN;AACD;;AACD,SAAOyB,QAAQ,CAACzB,KAAD,CAAf;AACD;;AAED,SAASvB,UAAT,CAAoBsB,SAApB,EAA+BC,KAA/B,EAAsC;AACpC,SAAOA,KAAP;AACD","sourcesContent":["import {Device, Parameters, CompareFunction, StencilOperation, log, isObjectEmpty} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport type { GLParameters } from '../../types/webgl';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setParameters} from '../../context/parameters/unified-parameter-api';\nimport WebGLDevice from '../webgl-device';\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(device: Device, parameters: Parameters & GLParameters, func: (device?: Device) => T): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setParameters(device, parameters);\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl, gl2} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n }));\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always' ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (parameters.stencilPassOperation) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n // if (parameters.blend) {\n // gl.enable(GL.BLEND);\n\n // const blend = parameters.blend;\n\n // let colorEquation = (blend && blend.color && blend.color.operation) || 'add';\n // let alphaEquation = (blend && blend.alpha && blend.alpha.operation) || 'add';\n // gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n // let colorSrcFactor = (blend && blend.color && blend.color.srcFactor) || 'one';\n // let colorDstFactor = (blend && blend.color && blend.color.dstFactor) || 'zero';\n // let alphaSrcFactor = (blend && blend.alpha && blend.alpha.srcFactor) || 'one';\n // let alphaDstFactor = (blend && blend.alpha && blend.alpha.dstFactor) || 'zero';\n // gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n // }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n 'never': GL.NEVER,\n 'less': GL.LESS,\n 'equal': GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n 'greater': GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n 'always': GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n 'keep': GL.KEEP,\n 'zero': GL.ZERO,\n 'replace': GL.REPLACE,\n 'invert': GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\nfunction convertBlendOperationToEquation(parameter, value): number {\n return map(parameter, value, {\n 'add': GL.FUNC_ADD,\n 'sub': GL.FUNC_SUBTRACT,\n 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n // When using a WebGL 2 context, the following values are available additionally:\n 'min': GL.MIN,\n 'max': GL.MAX\n });\n}\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter, value) {\n return value;\n}\n"],"file":"device-parameters.js"}
|
|
1
|
+
{"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","GL","pushContextState","popContextState","setParameters","WebGLDevice","withGLParameters","device","parameters","func","gl","withDeviceParameters","setDeviceParameters","webglDevice","attach","cullMode","disable","CULL_FACE","enable","cullFace","FRONT","BACK","frontFace","map","ccw","CCW","cw","CW","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","DEPTH_TEST","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","STENCIL_TEST","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","parameter","value","never","NEVER","less","LESS","equal","EQUAL","LEQUAL","greater","GREATER","NOTEQUAL","GEQUAL","always","ALWAYS","convertToCompareFunction","keep","KEEP","zero","ZERO","replace","REPLACE","invert","INVERT","INCR","DECR","INCR_WRAP","DECR_WRAP","message","concat","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["import {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLParameters} from '@luma.gl/constants';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setParameters} from '../../context/parameters/unified-parameter-api';\nimport {WebGLDevice} from '../webgl-device';\n\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters<T = unknown>(\n device: Device,\n parameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(\n device: Device,\n parameters: Parameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(\n map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n })\n );\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(GL.STENCIL_TEST)\n : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (\n parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation\n ) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation(\n 'stencilDepthFailOperation',\n parameters.stencilDepthFailOperation\n );\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n // if (parameters.blend) {\n // gl.enable(GL.BLEND);\n\n // const blend = parameters.blend;\n\n // let colorEquation = (blend && blend.color && blend.color.operation) || 'add';\n // let alphaEquation = (blend && blend.alpha && blend.alpha.operation) || 'add';\n // gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n // let colorSrcFactor = (blend && blend.color && blend.color.srcFactor) || 'one';\n // let colorDstFactor = (blend && blend.color && blend.color.dstFactor) || 'zero';\n // let alphaSrcFactor = (blend && blend.alpha && blend.alpha.srcFactor) || 'one';\n // let alphaDstFactor = (blend && blend.alpha && blend.alpha.dstFactor) || 'zero';\n // gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n // }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n never: GL.NEVER,\n less: GL.LESS,\n equal: GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n greater: GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n always: GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n keep: GL.KEEP,\n zero: GL.ZERO,\n replace: GL.REPLACE,\n invert: GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\n// function convertBlendOperationToEquation(parameter: string, value: string): number {\n// return map(parameter, value, {\n// 'add': GL.FUNC_ADD,\n// 'sub': GL.FUNC_SUBTRACT,\n// 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n// // When using a WebGL 2 context, the following values are available additionally:\n// 'min': GL.MIN,\n// 'max': GL.MAX\n// });\n// }\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { SamplerParameters } from '@luma.gl/
|
|
2
|
-
import {
|
|
1
|
+
import { SamplerParameters } from '@luma.gl/core';
|
|
2
|
+
import { GLSamplerParameters } from '@luma.gl/constants';
|
|
3
3
|
/**
|
|
4
4
|
* Convert WebGPU-style sampler props to WebGL
|
|
5
5
|
* @param props
|
|
6
6
|
* @returns
|
|
7
7
|
*/
|
|
8
|
-
export declare function convertSamplerParametersToWebGL(props: SamplerParameters):
|
|
8
|
+
export declare function convertSamplerParametersToWebGL(props: SamplerParameters): GLSamplerParameters;
|
|
9
9
|
/**
|
|
10
10
|
* Convert WebGL-style sampler props to WebGPU
|
|
11
11
|
* @param props
|
|
12
12
|
* @returns
|
|
13
13
|
*/
|
|
14
|
-
export declare function convertToSamplerParameters(params:
|
|
14
|
+
export declare function convertToSamplerParameters(params: GLSamplerParameters): SamplerParameters;
|
|
15
15
|
/**
|
|
16
16
|
* Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.
|
|
17
17
|
*/
|
|
18
|
-
export declare function updateSamplerParametersForNPOT(parameters:
|
|
18
|
+
export declare function updateSamplerParametersForNPOT(parameters: GLSamplerParameters): GLSamplerParameters;
|
|
19
19
|
//# sourceMappingURL=sampler-parameters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampler-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/sampler-parameters.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"sampler-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/sampler-parameters.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,EAAK,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAK3D;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CAoC7F;AAkCD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,CAqCzF;AA+CD;;EAEE;AACF,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,mBAAmB,GAAG,mBAAmB,CAUnG"}
|
|
@@ -1,206 +1,170 @@
|
|
|
1
|
-
import GL from '@luma.gl/constants';
|
|
2
|
-
import { convertCompareFunction, convertToCompareFunction } from
|
|
1
|
+
import { GL } from '@luma.gl/constants';
|
|
2
|
+
import { convertCompareFunction, convertToCompareFunction } from "./device-parameters.js";
|
|
3
3
|
export function convertSamplerParametersToWebGL(props) {
|
|
4
4
|
const params = {};
|
|
5
|
-
|
|
6
5
|
if (props.addressModeU) {
|
|
7
6
|
params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);
|
|
8
7
|
}
|
|
9
|
-
|
|
10
8
|
if (props.addressModeV) {
|
|
11
9
|
params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);
|
|
12
10
|
}
|
|
13
|
-
|
|
14
11
|
if (props.addressModeW) {
|
|
15
12
|
params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
if (props.magFilter) {
|
|
19
15
|
params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);
|
|
20
16
|
}
|
|
21
|
-
|
|
22
17
|
if (props.minFilter || props.mipmapFilter) {
|
|
23
18
|
params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);
|
|
24
19
|
}
|
|
25
|
-
|
|
26
20
|
if (props.lodMinClamp !== undefined) {
|
|
27
21
|
params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;
|
|
28
22
|
}
|
|
29
|
-
|
|
30
23
|
if (props.lodMaxClamp !== undefined) {
|
|
31
24
|
params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;
|
|
32
25
|
}
|
|
33
|
-
|
|
34
|
-
if (props.compare) {
|
|
26
|
+
if (props.type === 'comparison-sampler') {
|
|
35
27
|
params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;
|
|
28
|
+
}
|
|
29
|
+
if (props.compare) {
|
|
36
30
|
params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);
|
|
37
31
|
}
|
|
38
|
-
|
|
39
32
|
if (props.maxAnisotropy) {
|
|
40
|
-
|
|
33
|
+
params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;
|
|
41
34
|
}
|
|
42
|
-
|
|
43
35
|
return params;
|
|
44
36
|
}
|
|
45
|
-
|
|
46
37
|
function convertAddressMode(addressMode) {
|
|
47
38
|
switch (addressMode) {
|
|
48
39
|
case 'clamp-to-edge':
|
|
49
40
|
return GL.CLAMP_TO_EDGE;
|
|
50
|
-
|
|
51
41
|
case 'repeat':
|
|
52
42
|
return GL.REPEAT;
|
|
53
|
-
|
|
54
43
|
case 'mirror-repeat':
|
|
55
44
|
return GL.MIRRORED_REPEAT;
|
|
56
45
|
}
|
|
57
46
|
}
|
|
58
|
-
|
|
59
47
|
function convertMaxFilterMode(maxFilter) {
|
|
60
48
|
switch (maxFilter) {
|
|
61
49
|
case 'nearest':
|
|
62
50
|
return GL.NEAREST;
|
|
63
|
-
|
|
64
51
|
case 'linear':
|
|
65
52
|
return GL.LINEAR;
|
|
66
53
|
}
|
|
67
54
|
}
|
|
68
|
-
|
|
69
55
|
function convertMinFilterMode(minFilter, mipmapFilter) {
|
|
70
56
|
if (!mipmapFilter) {
|
|
71
57
|
return convertMaxFilterMode(minFilter);
|
|
72
58
|
}
|
|
73
|
-
|
|
74
59
|
switch (minFilter) {
|
|
75
60
|
case 'nearest':
|
|
76
61
|
return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;
|
|
77
|
-
|
|
78
62
|
case 'linear':
|
|
79
63
|
return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;
|
|
80
64
|
}
|
|
81
65
|
}
|
|
82
|
-
|
|
83
66
|
export function convertToSamplerParameters(params) {
|
|
84
67
|
const props = {};
|
|
85
|
-
|
|
86
68
|
if (params[GL.TEXTURE_WRAP_S]) {
|
|
87
69
|
props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);
|
|
88
70
|
}
|
|
89
|
-
|
|
90
71
|
if (params[GL.TEXTURE_WRAP_T]) {
|
|
91
72
|
props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);
|
|
92
73
|
}
|
|
93
|
-
|
|
94
74
|
if (params[GL.TEXTURE_WRAP_R]) {
|
|
95
75
|
props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);
|
|
96
76
|
}
|
|
97
|
-
|
|
98
77
|
if (params[GL.TEXTURE_MAG_FILTER]) {
|
|
99
78
|
props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);
|
|
100
79
|
}
|
|
101
|
-
|
|
102
80
|
if (params[GL.TEXTURE_MIN_FILTER]) {
|
|
103
81
|
props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);
|
|
104
82
|
}
|
|
105
|
-
|
|
106
83
|
if (params[GL.TEXTURE_MIN_FILTER]) {
|
|
107
84
|
props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);
|
|
108
85
|
}
|
|
109
|
-
|
|
110
86
|
if (params[GL.TEXTURE_MIN_LOD]) {
|
|
111
87
|
props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];
|
|
112
88
|
}
|
|
113
|
-
|
|
114
89
|
if (params[GL.TEXTURE_MAX_LOD]) {
|
|
115
90
|
props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];
|
|
116
91
|
}
|
|
117
|
-
|
|
118
|
-
|
|
92
|
+
if (params[GL.TEXTURE_COMPARE_MODE]) {
|
|
93
|
+
props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';
|
|
94
|
+
}
|
|
95
|
+
if (params[GL.TEXTURE_COMPARE_FUNC]) {
|
|
119
96
|
props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);
|
|
120
97
|
}
|
|
121
|
-
|
|
122
98
|
if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {
|
|
123
99
|
props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];
|
|
124
100
|
}
|
|
125
|
-
|
|
126
101
|
return props;
|
|
127
102
|
}
|
|
128
|
-
|
|
129
103
|
function convertToAddressMode(addressMode) {
|
|
130
104
|
switch (addressMode) {
|
|
131
105
|
case GL.CLAMP_TO_EDGE:
|
|
132
106
|
return 'clamp-to-edge';
|
|
133
|
-
|
|
134
107
|
case GL.REPEAT:
|
|
135
108
|
return 'repeat';
|
|
136
|
-
|
|
137
109
|
case GL.MIRRORED_REPEAT:
|
|
138
110
|
return 'mirror-repeat';
|
|
111
|
+
default:
|
|
112
|
+
throw new Error('address');
|
|
139
113
|
}
|
|
140
114
|
}
|
|
141
|
-
|
|
142
115
|
function convertToMaxFilterMode(filterMode) {
|
|
143
116
|
switch (filterMode) {
|
|
144
117
|
case GL.NEAREST:
|
|
145
118
|
return 'nearest';
|
|
146
|
-
|
|
147
119
|
case GL.LINEAR:
|
|
148
120
|
return 'linear';
|
|
121
|
+
default:
|
|
122
|
+
throw new Error('maxfilter');
|
|
149
123
|
}
|
|
150
124
|
}
|
|
151
|
-
|
|
152
125
|
function convertToMinFilterMode(filterMode) {
|
|
153
126
|
switch (filterMode) {
|
|
154
127
|
case GL.NEAREST:
|
|
155
128
|
return 'nearest';
|
|
156
|
-
|
|
157
129
|
case GL.LINEAR:
|
|
158
130
|
return 'linear';
|
|
159
|
-
|
|
160
131
|
case GL.NEAREST_MIPMAP_NEAREST:
|
|
161
132
|
return 'nearest';
|
|
162
|
-
|
|
163
133
|
case GL.LINEAR_MIPMAP_NEAREST:
|
|
164
134
|
return 'linear';
|
|
165
|
-
|
|
166
135
|
case GL.NEAREST_MIPMAP_LINEAR:
|
|
167
136
|
return 'nearest';
|
|
168
|
-
|
|
169
137
|
case GL.LINEAR_MIPMAP_LINEAR:
|
|
170
138
|
return 'linear';
|
|
139
|
+
default:
|
|
140
|
+
throw new Error('minfilter');
|
|
171
141
|
}
|
|
172
142
|
}
|
|
173
|
-
|
|
174
143
|
function convertToMipmapFilterMode(filterMode) {
|
|
175
144
|
switch (filterMode) {
|
|
176
145
|
case GL.NEAREST:
|
|
177
146
|
return 'nearest';
|
|
178
|
-
|
|
179
147
|
case GL.LINEAR:
|
|
180
148
|
return 'linear';
|
|
181
|
-
|
|
182
149
|
case GL.NEAREST_MIPMAP_NEAREST:
|
|
183
150
|
return 'nearest';
|
|
184
|
-
|
|
185
151
|
case GL.LINEAR_MIPMAP_NEAREST:
|
|
186
152
|
return 'nearest';
|
|
187
|
-
|
|
188
153
|
case GL.NEAREST_MIPMAP_LINEAR:
|
|
189
154
|
return 'linear';
|
|
190
|
-
|
|
191
155
|
case GL.LINEAR_MIPMAP_LINEAR:
|
|
192
156
|
return 'linear';
|
|
157
|
+
default:
|
|
158
|
+
throw new Error('mipmap');
|
|
193
159
|
}
|
|
194
160
|
}
|
|
195
|
-
|
|
196
161
|
export function updateSamplerParametersForNPOT(parameters) {
|
|
197
|
-
const newParameters = {
|
|
162
|
+
const newParameters = {
|
|
163
|
+
...parameters
|
|
198
164
|
};
|
|
199
|
-
|
|
200
165
|
if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {
|
|
201
166
|
newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;
|
|
202
167
|
}
|
|
203
|
-
|
|
204
168
|
newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;
|
|
205
169
|
newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;
|
|
206
170
|
return newParameters;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"names":["GL","convertCompareFunction","convertToCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","TEXTURE_WRAP_S","convertAddressMode","addressModeV","TEXTURE_WRAP_T","addressModeW","TEXTURE_WRAP_R","magFilter","TEXTURE_MAG_FILTER","convertMaxFilterMode","minFilter","mipmapFilter","TEXTURE_MIN_FILTER","convertMinFilterMode","lodMinClamp","undefined","TEXTURE_MIN_LOD","lodMaxClamp","TEXTURE_MAX_LOD","compare","TEXTURE_COMPARE_MODE","COMPARE_REF_TO_TEXTURE","TEXTURE_COMPARE_FUNC","maxAnisotropy","TEXTURE_MAX_ANISOTROPY_EXT","addressMode","CLAMP_TO_EDGE","REPEAT","MIRRORED_REPEAT","maxFilter","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","convertToSamplerParameters","convertToAddressMode","convertToMaxFilterMode","convertToMinFilterMode","convertToMipmapFilterMode","filterMode","updateSamplerParametersForNPOT","parameters","newParameters"],"mappings":"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","sourcesContent":["// SAMPLER FILTERS\nimport {SamplerParameters} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {WebGLSamplerParameters} from '../../types/webgl';\nimport {convertCompareFunction, convertToCompareFunction} from './device-parameters';\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerParameters): WebGLSamplerParameters {\n const params: Record<number, number> = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.compare) {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n props[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL {\n switch (addressMode) {\n case 'clamp-to-edge': return GL.CLAMP_TO_EDGE;\n case 'repeat': return GL.REPEAT;\n case 'mirror-repeat': return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL {\n switch (maxFilter) {\n case 'nearest': return GL.NEAREST;\n case 'linear': return GL.LINEAR;\n }\n}\n\n/** \n * WebGPU has separate min filter and mipmap filter, \n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'nearest' | 'linear'): GL {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest': return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear': return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n\n// Convert from WebGL to WebGPU\n\n/**\n * Convert WebGL-style sampler props to WebGPU\n * @param props\n * @returns\n */\n export function convertToSamplerParameters(params: WebGLSamplerParameters): SamplerParameters {\n const props: SamplerParameters = {};\n if (params[GL.TEXTURE_WRAP_S]) {\n props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);\n }\n if (params[GL.TEXTURE_WRAP_T]) {\n props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);\n }\n if (params[GL.TEXTURE_WRAP_R]) {\n props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);\n }\n if (params[GL.TEXTURE_MAG_FILTER]) {\n props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_LOD]) {\n props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];\n }\n if (params[GL.TEXTURE_MAX_LOD]) {\n props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];\n }\n if (params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE) {\n props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);\n }\n // NOTE depends on extension (very common)\n if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {\n props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];\n }\n return props;\n}\n\n/** Convert address more */\nfunction convertToAddressMode(addressMode: number): 'clamp-to-edge' | 'repeat' | 'mirror-repeat' {\n switch (addressMode) {\n case GL.CLAMP_TO_EDGE: return 'clamp-to-edge';\n case GL.REPEAT: return 'repeat';\n case GL.MIRRORED_REPEAT: return 'mirror-repeat';\n }\n}\n\nfunction convertToMaxFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n }\n}\n\n/** WebGPU has separate min filter and mipmap filter, WebGL is combined */\nfunction convertToMinFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'linear';\n case GL.NEAREST_MIPMAP_LINEAR: return 'nearest';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n }\n}\n\nfunction convertToMipmapFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'nearest';\n case GL.NEAREST_MIPMAP_LINEAR: return 'linear';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n }\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n*/\nexport function updateSamplerParametersForNPOT(parameters: WebGLSamplerParameters): WebGLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n"],"file":"sampler-parameters.js"}
|
|
1
|
+
{"version":3,"file":"sampler-parameters.js","names":["GL","convertCompareFunction","convertToCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","TEXTURE_WRAP_S","convertAddressMode","addressModeV","TEXTURE_WRAP_T","addressModeW","TEXTURE_WRAP_R","magFilter","TEXTURE_MAG_FILTER","convertMaxFilterMode","minFilter","mipmapFilter","TEXTURE_MIN_FILTER","convertMinFilterMode","lodMinClamp","undefined","TEXTURE_MIN_LOD","lodMaxClamp","TEXTURE_MAX_LOD","type","TEXTURE_COMPARE_MODE","COMPARE_REF_TO_TEXTURE","compare","TEXTURE_COMPARE_FUNC","maxAnisotropy","TEXTURE_MAX_ANISOTROPY_EXT","addressMode","CLAMP_TO_EDGE","REPEAT","MIRRORED_REPEAT","maxFilter","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","convertToSamplerParameters","convertToAddressMode","convertToMaxFilterMode","convertToMinFilterMode","convertToMipmapFilterMode","Error","filterMode","updateSamplerParametersForNPOT","parameters","newParameters"],"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"sourcesContent":["// SAMPLER FILTERS\nimport {SamplerParameters} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertCompareFunction, convertToCompareFunction} from './device-parameters';\n\n/* eslint-disable consistent-return */\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerParameters): GLSamplerParameters {\n const params: Record<number, number> = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n }\n if (props.compare) {\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL {\n switch (addressMode) {\n case 'clamp-to-edge': return GL.CLAMP_TO_EDGE;\n case 'repeat': return GL.REPEAT;\n case 'mirror-repeat': return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL {\n switch (maxFilter) {\n case 'nearest': return GL.NEAREST;\n case 'linear': return GL.LINEAR;\n }\n}\n\n/** \n * WebGPU has separate min filter and mipmap filter, \n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'nearest' | 'linear'): GL {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest': return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear': return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n\n// Convert from WebGL to WebGPU\n\n/**\n * Convert WebGL-style sampler props to WebGPU\n * @param props\n * @returns\n */\nexport function convertToSamplerParameters(params: GLSamplerParameters): SamplerParameters {\n const props: SamplerParameters = {};\n if (params[GL.TEXTURE_WRAP_S]) {\n props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);\n }\n if (params[GL.TEXTURE_WRAP_T]) {\n props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);\n }\n if (params[GL.TEXTURE_WRAP_R]) {\n props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);\n }\n if (params[GL.TEXTURE_MAG_FILTER]) {\n props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_LOD]) {\n props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];\n }\n if (params[GL.TEXTURE_MAX_LOD]) {\n props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];\n }\n if (params[GL.TEXTURE_COMPARE_MODE]) {\n props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';\n }\n if (params[GL.TEXTURE_COMPARE_FUNC]) {\n props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);\n }\n // NOTE depends on extension (very common)\n if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {\n props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];\n }\n return props;\n}\n\n/** Convert address more */\nfunction convertToAddressMode(addressMode: number): 'clamp-to-edge' | 'repeat' | 'mirror-repeat' {\n switch (addressMode) {\n case GL.CLAMP_TO_EDGE: return 'clamp-to-edge';\n case GL.REPEAT: return 'repeat';\n case GL.MIRRORED_REPEAT: return 'mirror-repeat';\n default: throw new Error('address');\n }\n}\n\nfunction convertToMaxFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n default: throw new Error('maxfilter');\n }\n}\n\n/** WebGPU has separate min filter and mipmap filter, WebGL is combined */\nfunction convertToMinFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'linear';\n case GL.NEAREST_MIPMAP_LINEAR: return 'nearest';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('minfilter');\n }\n}\n\nfunction convertToMipmapFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'nearest';\n case GL.NEAREST_MIPMAP_LINEAR: return 'linear';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('mipmap');\n }\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n*/\nexport function updateSamplerParametersForNPOT(parameters: GLSamplerParameters): GLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n"],"mappings":"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"}
|