@babylonjs/lite 0.2.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{_mat4-storage-f64-Bvh5TymE.js → _mat4-storage-f64-BW9sTaVh.js} +3 -2
- package/_mat4-storage-f64-BW9sTaVh.js.map +1 -0
- package/{alpha-test-fragment-BCChpzaV.js → alpha-test-fragment-eUG971h3.js} +2 -2
- package/{alpha-test-fragment-BCChpzaV.js.map → alpha-test-fragment-eUG971h3.js.map} +1 -1
- package/assets/splat-sort-worker-DT3eybMZ.js.map +1 -0
- package/{background-dds-skybox-ZjrSIxrT.js → background-dds-skybox-BwG0kYQP.js} +13 -13
- package/background-dds-skybox-BwG0kYQP.js.map +1 -0
- package/{background-ground-B2Mie-MI.js → background-ground-DiFpKJzF.js} +19 -19
- package/background-ground-DiFpKJzF.js.map +1 -0
- package/{background-hdr-skybox-DDRJYuT2.js → background-hdr-skybox-DIgJhvfj.js} +10 -10
- package/background-hdr-skybox-DIgJhvfj.js.map +1 -0
- package/{background-solid-skybox-fjXlnWaD.js → background-solid-skybox--fqHdan_.js} +11 -12
- package/background-solid-skybox--fqHdan_.js.map +1 -0
- package/{billboard-renderable-DKmlOgbM.js → billboard-renderable-HY2XCd52.js} +46 -10
- package/billboard-renderable-HY2XCd52.js.map +1 -0
- package/{clamp-block-CxRBPlUq.js → clamp-block-XHdUk2Va.js} +2 -2
- package/{clamp-block-CxRBPlUq.js.map → clamp-block-XHdUk2Va.js.map} +1 -1
- package/{clearcoat-fragment-KbZAa0TA.js → clearcoat-fragment-CHYw8MPB.js} +2 -2
- package/{clearcoat-fragment-KbZAa0TA.js.map → clearcoat-fragment-CHYw8MPB.js.map} +1 -1
- package/{create-skeleton-BBI5urcj.js → create-skeleton-9tdiUjRP.js} +9 -9
- package/create-skeleton-9tdiUjRP.js.map +1 -0
- package/{cubemap-skybox-material-DvW81drX.js → cubemap-skybox-material-DqQ0dyz8.js} +6 -7
- package/cubemap-skybox-material-DqQ0dyz8.js.map +1 -0
- package/{curve-block-Dh_xdUj-.js → curve-block-S27sXrJQ.js} +2 -2
- package/{curve-block-Dh_xdUj-.js.map → curve-block-S27sXrJQ.js.map} +1 -1
- package/{emissive-fragment-DD8cvHyx.js → emissive-fragment-CZMQ0_bF.js} +3 -3
- package/emissive-fragment-CZMQ0_bF.js.map +1 -0
- package/{esm-shadow-view-DHVS9r7H.js → esm-shadow-view-CUwxbnMR.js} +2 -2
- package/{esm-shadow-view-DHVS9r7H.js.map → esm-shadow-view-CUwxbnMR.js.map} +1 -1
- package/{esm-shadow-view-15S4JK6p.js → esm-shadow-view-Cl36rOrK.js} +2 -2
- package/{esm-shadow-view-15S4JK6p.js.map → esm-shadow-view-Cl36rOrK.js.map} +1 -1
- package/{esm-shadow-view-DYAc62Kl.js → esm-shadow-view-DKQ-FSoV.js} +2 -2
- package/{esm-shadow-view-DYAc62Kl.js.map → esm-shadow-view-DKQ-FSoV.js.map} +1 -1
- package/{gaussian-splatting-pipeline-sh-BvkUhA9V.js → gaussian-splatting-pipeline-sh-DDo7QQ8l.js} +19 -19
- package/gaussian-splatting-pipeline-sh-DDo7QQ8l.js.map +1 -0
- package/geometry-texture-output-BmuAquio.js +41 -0
- package/geometry-texture-output-BmuAquio.js.map +1 -0
- package/geometry-view-xWZmq799.js +404 -0
- package/geometry-view-xWZmq799.js.map +1 -0
- package/{gltf-animation-KnPzeOIY.js → gltf-animation-Bq7k_5HA.js} +6 -6
- package/gltf-animation-Bq7k_5HA.js.map +1 -0
- package/{gltf-ext-basisu-kmth3UWX.js → gltf-ext-basisu-C5teqxzQ.js} +43 -211
- package/gltf-ext-basisu-C5teqxzQ.js.map +1 -0
- package/{gltf-ext-node-visibility-BjRRd6si.js → gltf-ext-node-visibility-DnGTKkMf.js} +2 -2
- package/{gltf-ext-node-visibility-BjRRd6si.js.map → gltf-ext-node-visibility-DnGTKkMf.js.map} +1 -1
- package/{gltf-ext-quantization-CpZyLDIz.js → gltf-ext-quantization-DheC7FhB.js} +4 -3
- package/gltf-ext-quantization-DheC7FhB.js.map +1 -0
- package/{gltf-ext-uv-transform-MHmR-YyM.js → gltf-ext-uv-transform-DljdVllE.js} +2 -2
- package/{gltf-ext-uv-transform-MHmR-YyM.js.map → gltf-ext-uv-transform-DljdVllE.js.map} +1 -1
- package/{gltf-feature-animation-pointer-rFqLfbO_.js → gltf-feature-animation-pointer-DVhymFLK.js} +9 -9
- package/gltf-feature-animation-pointer-DVhymFLK.js.map +1 -0
- package/{gltf-feature-animations-DikONdzi.js → gltf-feature-animations-hxC3y3bJ.js} +2 -2
- package/{gltf-feature-animations-DikONdzi.js.map → gltf-feature-animations-hxC3y3bJ.js.map} +1 -1
- package/{gltf-feature-draco-yGSMGTE3.js → gltf-feature-draco-B7Q_cMUv.js} +6 -5
- package/gltf-feature-draco-B7Q_cMUv.js.map +1 -0
- package/{gltf-feature-gpu-instancing-Cj1XjmM6.js → gltf-feature-gpu-instancing-C7sRzWv7.js} +4 -4
- package/gltf-feature-gpu-instancing-C7sRzWv7.js.map +1 -0
- package/{gltf-feature-lights-punctual-C-0SlGmD.js → gltf-feature-lights-punctual-DF7kya14.js} +5 -5
- package/{gltf-feature-lights-punctual-C-0SlGmD.js.map → gltf-feature-lights-punctual-DF7kya14.js.map} +1 -1
- package/{gltf-feature-meshopt-Des96YFI.js → gltf-feature-meshopt-DRG9hEqT.js} +7 -6
- package/gltf-feature-meshopt-DRG9hEqT.js.map +1 -0
- package/{gltf-feature-morph-BAcY14XU.js → gltf-feature-morph-DZydYgWp.js} +4 -4
- package/gltf-feature-morph-DZydYgWp.js.map +1 -0
- package/{gltf-feature-registry-97sY_x5O.js → gltf-feature-registry-DeYdy3DV.js} +15 -15
- package/{gltf-feature-registry-97sY_x5O.js.map → gltf-feature-registry-DeYdy3DV.js.map} +1 -1
- package/{gltf-feature-skeleton-lVjkDfIU.js → gltf-feature-skeleton-B9och1W0.js} +3 -3
- package/{gltf-feature-skeleton-lVjkDfIU.js.map → gltf-feature-skeleton-B9och1W0.js.map} +1 -1
- package/{gltf-feature-variants-BphF4JmV.js → gltf-feature-variants-CY_Qft7f.js} +2 -2
- package/{gltf-feature-variants-BphF4JmV.js.map → gltf-feature-variants-CY_Qft7f.js.map} +1 -1
- package/{gltf-glb-parser-D6UZWFuC.js → gltf-glb-parser-CqOeXFOz.js} +5 -4
- package/gltf-glb-parser-CqOeXFOz.js.map +1 -0
- package/{gltf-interleave-C9eBqH_F.js → gltf-interleave-DWf27t-h.js} +14 -15
- package/gltf-interleave-DWf27t-h.js.map +1 -0
- package/{gltf-pbr-builder-ext-DPC0zg_u.js → gltf-pbr-builder-ext-DvFxuOqN.js} +5 -5
- package/gltf-pbr-builder-ext-DvFxuOqN.js.map +1 -0
- package/{gltf-variants-CnBEZr0o.js → gltf-variants-CUvzYGYX.js} +4 -4
- package/{gltf-variants-CnBEZr0o.js.map → gltf-variants-CUvzYGYX.js.map} +1 -1
- package/gpu-task-timer-Dgkff80h.js +236 -0
- package/gpu-task-timer-Dgkff80h.js.map +1 -0
- package/gpu-timer-CUpqT_hK.js +55 -0
- package/gpu-timer-CUpqT_hK.js.map +1 -0
- package/{gs-picking-pipeline-Bx8LTav6.js → gs-picking-pipeline-55sM5LzV.js} +14 -14
- package/gs-picking-pipeline-55sM5LzV.js.map +1 -0
- package/havok-floating-origin-5xp32P-C.js +198 -0
- package/havok-floating-origin-5xp32P-C.js.map +1 -0
- package/index-C-tEgwbZ.js +41056 -0
- package/index-C-tEgwbZ.js.map +1 -0
- package/index-CYZDclhF.js +918 -0
- package/index-CYZDclhF.js.map +1 -0
- package/index-SMJ67XwT.js +3330 -0
- package/index-SMJ67XwT.js.map +1 -0
- package/index.d.ts +2490 -108
- package/index.js +476 -323
- package/{input-block-Coi_aZwl.js → input-block-DbRYCnet.js} +2 -2
- package/{input-block-Coi_aZwl.js.map → input-block-DbRYCnet.js.map} +1 -1
- package/{iridescence-fragment-DwZcCTdD.js → iridescence-fragment-S3Ko1jvC.js} +2 -2
- package/{iridescence-fragment-DwZcCTdD.js.map → iridescence-fragment-S3Ko1jvC.js.map} +1 -1
- package/{light-block-Np_h5gPI.js → light-block-CAqWkucp.js} +2 -2
- package/{light-block-Np_h5gPI.js.map → light-block-CAqWkucp.js.map} +1 -1
- package/{loop-block-BFkLFYGm.js → loop-block-ch-biPFY.js} +2 -2
- package/{loop-block-BFkLFYGm.js.map → loop-block-ch-biPFY.js.map} +1 -1
- package/{morph-fragment-DqH-w61u.js → morph-fragment-D9he3Ksk.js} +2 -2
- package/{morph-fragment-DqH-w61u.js.map → morph-fragment-D9he3Ksk.js.map} +1 -1
- package/{multilight-wgsl-B9Mf9d-q.js → multilight-wgsl-74aXpcJG.js} +2 -2
- package/{multilight-wgsl-B9Mf9d-q.js.map → multilight-wgsl-74aXpcJG.js.map} +1 -1
- package/{node-env-BPZXZzBf.js → node-env-B2bjGcMS.js} +6 -5
- package/node-env-B2bjGcMS.js.map +1 -0
- package/node-geometry-view-CSXlEAhG.js +291 -0
- package/node-geometry-view-CSXlEAhG.js.map +1 -0
- package/{node-registry-extra-compat-Ch7ApZHF.js → node-registry-extra-compat-BEQH_ksg.js} +2 -2
- package/{node-registry-extra-compat-Ch7ApZHF.js.map → node-registry-extra-compat-BEQH_ksg.js.map} +1 -1
- package/{node-registry-extra-math-6ezzTkPj.js → node-registry-extra-math-Bm32WBAa.js} +2 -2
- package/{node-registry-extra-math-6ezzTkPj.js.map → node-registry-extra-math-Bm32WBAa.js.map} +1 -1
- package/{node-renderable-CS0CmsSp.js → node-renderable-BMHny4tC.js} +15 -13
- package/node-renderable-BMHny4tC.js.map +1 -0
- package/{node-shadow-CpnrdvtJ.js → node-shadow-BRiz7CT1.js} +7 -7
- package/node-shadow-BRiz7CT1.js.map +1 -0
- package/{normal-map-fragment-DradEMl-.js → normal-map-fragment-sE3TjF4U.js} +2 -2
- package/{normal-map-fragment-DradEMl-.js.map → normal-map-fragment-sE3TjF4U.js.map} +1 -1
- package/package.json +3 -10
- package/{parse-camera-CgV4bWc0.js → parse-camera-CmZBS423.js} +2 -2
- package/{parse-camera-CgV4bWc0.js.map → parse-camera-CmZBS423.js.map} +1 -1
- package/pbr-geometry-view-T3vMABM8.js +491 -0
- package/pbr-geometry-view-T3vMABM8.js.map +1 -0
- package/{pbr-metallic-roughness-block-BFwZj2Nw.js → pbr-metallic-roughness-block-DbozMlHU.js} +2 -2
- package/{pbr-metallic-roughness-block-BFwZj2Nw.js.map → pbr-metallic-roughness-block-DbozMlHU.js.map} +1 -1
- package/{pbr-metallic-roughness-block-full-5t0HT3xl.js → pbr-metallic-roughness-block-full-CHC8w-Uv.js} +2 -2
- package/{pbr-metallic-roughness-block-full-5t0HT3xl.js.map → pbr-metallic-roughness-block-full-CHC8w-Uv.js.map} +1 -1
- package/{pbr-mr-helper-core-R5tOZ8Ap.js → pbr-mr-helper-core-DGRgbRXl.js} +2 -2
- package/{pbr-mr-helper-core-R5tOZ8Ap.js.map → pbr-mr-helper-core-DGRgbRXl.js.map} +1 -1
- package/{pbr-refraction-Dd11HnaI.js → pbr-refraction-CquDP9JO.js} +2 -2
- package/{pbr-refraction-Dd11HnaI.js.map → pbr-refraction-CquDP9JO.js.map} +1 -1
- package/{pbr-renderable-BHAdF5Vw.js → pbr-renderable-CaHKHU0g.js} +60 -42
- package/pbr-renderable-CaHKHU0g.js.map +1 -0
- package/{pbr-shadow-fragment-BxUrFJYZ.js → pbr-shadow-fragment-DmnNe6yz.js} +2 -2
- package/{pbr-shadow-fragment-BxUrFJYZ.js.map → pbr-shadow-fragment-DmnNe6yz.js.map} +1 -1
- package/{pbr-tracking-D6i3yPb7.js → pbr-tracking-Bo7RTANK.js} +2 -2
- package/{pbr-tracking-D6i3yPb7.js.map → pbr-tracking-Bo7RTANK.js.map} +1 -1
- package/{pbr-transmission-ext-Dll8EYwE.js → pbr-transmission-ext-CoGcJBGE.js} +2 -2
- package/{pbr-transmission-ext-Dll8EYwE.js.map → pbr-transmission-ext-CoGcJBGE.js.map} +1 -1
- package/recast-navigation.wasm-DG_0AFuk.js +8706 -0
- package/recast-navigation.wasm-DG_0AFuk.js.map +1 -0
- package/recast-navigation.wasm-compat-C-Bf2ylB.js +8692 -0
- package/recast-navigation.wasm-compat-C-Bf2ylB.js.map +1 -0
- package/{reflectance-fragment-ejMJ4O1o.js → reflectance-fragment-CExe6qDY.js} +2 -2
- package/{reflectance-fragment-ejMJ4O1o.js.map → reflectance-fragment-CExe6qDY.js.map} +1 -1
- package/{rgbd-decode-DCvzUYeI.js → rgbd-decode-DkiiiIlt.js} +7 -6
- package/rgbd-decode-DkiiiIlt.js.map +1 -0
- package/{scene-material-swap-C2ykv55W.js → scene-material-swap-4qM0tpBK.js} +11 -5
- package/scene-material-swap-4qM0tpBK.js.map +1 -0
- package/screenshot-readback-avr_tYGZ.js +92 -0
- package/screenshot-readback-avr_tYGZ.js.map +1 -0
- package/{mesh-features-BAJpbMog.js → shader-composer-CZagsJDS.js} +3 -54
- package/shader-composer-CZagsJDS.js.map +1 -0
- package/{shader-renderable-BMf_vvO0.js → shader-renderable-D5sbgzxt.js} +62 -24
- package/shader-renderable-D5sbgzxt.js.map +1 -0
- package/{shader-thin-instance-5_WUfi3m.js → shader-thin-instance-CkQ8rrfH.js} +4 -4
- package/shader-thin-instance-CkQ8rrfH.js.map +1 -0
- package/{sheen-fragment-CS6z29Fs.js → sheen-fragment-BEigjpTX.js} +2 -2
- package/{sheen-fragment-CS6z29Fs.js.map → sheen-fragment-BEigjpTX.js.map} +1 -1
- package/{singlelight-directional-wgsl-4MIgZMeC.js → singlelight-directional-wgsl-Ccsk-ys3.js} +2 -2
- package/{singlelight-directional-wgsl-4MIgZMeC.js.map → singlelight-directional-wgsl-Ccsk-ys3.js.map} +1 -1
- package/{singlelight-hemispheric-wgsl-CK-GUYWe.js → singlelight-hemispheric-wgsl-DL-jpc97.js} +2 -2
- package/{singlelight-hemispheric-wgsl-CK-GUYWe.js.map → singlelight-hemispheric-wgsl-DL-jpc97.js.map} +1 -1
- package/{singlelight-point-wgsl-CYtzqCbP.js → singlelight-point-wgsl-hYmiP6ys.js} +2 -2
- package/{singlelight-point-wgsl-CYtzqCbP.js.map → singlelight-point-wgsl-hYmiP6ys.js.map} +1 -1
- package/{singlelight-spot-wgsl-DVbaVufF.js → singlelight-spot-wgsl-DSjp1p1C.js} +2 -2
- package/{singlelight-spot-wgsl-DVbaVufF.js.map → singlelight-spot-wgsl-DSjp1p1C.js.map} +1 -1
- package/{skeleton-fragment-BOVmc8YS.js → skeleton-fragment-B__bUbPK.js} +2 -2
- package/{skeleton-fragment-BOVmc8YS.js.map → skeleton-fragment-B__bUbPK.js.map} +1 -1
- package/{skybox-renderable-DDcCPSly.js → skybox-renderable-BH6uUkal.js} +7 -8
- package/skybox-renderable-BH6uUkal.js.map +1 -0
- package/{splat-ply-compressed-BahdBG1r.js → splat-ply-compressed-BGNK6dnh.js} +9 -8
- package/splat-ply-compressed-BGNK6dnh.js.map +1 -0
- package/{standard-renderable-D1bhoF0K.js → standard-pipeline-BvFynkwL.js} +11 -202
- package/standard-pipeline-BvFynkwL.js.map +1 -0
- package/standard-renderable-1Q3zemys.js +191 -0
- package/standard-renderable-1Q3zemys.js.map +1 -0
- package/{std-ambient-fragment-C6WNm8dQ.js → std-ambient-fragment-__F1KTEu.js} +2 -2
- package/{std-ambient-fragment-C6WNm8dQ.js.map → std-ambient-fragment-__F1KTEu.js.map} +1 -1
- package/{std-cube-reflection-fragment-Bqutpy2q.js → std-cube-reflection-fragment-DidM0byH.js} +2 -2
- package/{std-cube-reflection-fragment-Bqutpy2q.js.map → std-cube-reflection-fragment-DidM0byH.js.map} +1 -1
- package/{std-emissive-fragment-B-A83rqX.js → std-emissive-fragment-Bj62X4Np.js} +2 -2
- package/{std-emissive-fragment-B-A83rqX.js.map → std-emissive-fragment-Bj62X4Np.js.map} +1 -1
- package/{std-lightmap-fragment-Df7KJezh.js → std-lightmap-fragment-DXvfWvKc.js} +2 -2
- package/{std-lightmap-fragment-Df7KJezh.js.map → std-lightmap-fragment-DXvfWvKc.js.map} +1 -1
- package/{std-opacity-fragment-D9et2jip.js → std-opacity-fragment-BzMMb1K_.js} +2 -2
- package/{std-opacity-fragment-D9et2jip.js.map → std-opacity-fragment-BzMMb1K_.js.map} +1 -1
- package/{std-reflection-fragment-DBJeT-yg.js → std-reflection-fragment-DC9Kvu1C.js} +2 -2
- package/{std-reflection-fragment-DBJeT-yg.js.map → std-reflection-fragment-DC9Kvu1C.js.map} +1 -1
- package/{std-shadow-fragment-C6fD8rW-.js → std-shadow-fragment-BnMHeF1-.js} +2 -2
- package/{std-shadow-fragment-C6fD8rW-.js.map → std-shadow-fragment-BnMHeF1-.js.map} +1 -1
- package/{std-specular-fragment-C2ZOss-t.js → std-specular-fragment-Bio681OG.js} +2 -2
- package/{std-specular-fragment-C2ZOss-t.js.map → std-specular-fragment-Bio681OG.js.map} +1 -1
- package/{std-tracking-C4L4nQGc.js → std-tracking-BTcrry2o.js} +2 -2
- package/{std-tracking-C4L4nQGc.js.map → std-tracking-BTcrry2o.js.map} +1 -1
- package/{subsurface-fragment-C1H4ytqK.js → subsurface-fragment-DpKib445.js} +2 -2
- package/{subsurface-fragment-C1H4ytqK.js.map → subsurface-fragment-DpKib445.js.map} +1 -1
- package/swapchain-overlay-UCLilhbq.js +37 -0
- package/swapchain-overlay-UCLilhbq.js.map +1 -0
- package/{thin-instance-cull-binding-CCxrPNO6.js → thin-instance-cull-binding-DwZi7mlE.js} +12 -12
- package/thin-instance-cull-binding-DwZi7mlE.js.map +1 -0
- package/{thin-instance-gpu-E8DBd8XL.js → thin-instance-gpu-uY2NOv0J.js} +15 -7
- package/thin-instance-gpu-uY2NOv0J.js.map +1 -0
- package/{tracking-primitives-w4BVV9p9.js → tracking-primitives-Ck5bgCuo.js} +2 -2
- package/{tracking-primitives-w4BVV9p9.js.map → tracking-primitives-Ck5bgCuo.js.map} +1 -1
- package/{unlit-fragment-DU9_mhzZ.js → unlit-fragment-nc6hu3Mw.js} +2 -2
- package/{unlit-fragment-DU9_mhzZ.js.map → unlit-fragment-nc6hu3Mw.js.map} +1 -1
- package/_mat4-storage-f64-Bvh5TymE.js.map +0 -1
- package/assets/splat-sort-worker-Crg3CaCc.js.map +0 -1
- package/background-dds-skybox-ZjrSIxrT.js.map +0 -1
- package/background-ground-B2Mie-MI.js.map +0 -1
- package/background-hdr-skybox-DDRJYuT2.js.map +0 -1
- package/background-solid-skybox-fjXlnWaD.js.map +0 -1
- package/billboard-renderable-DKmlOgbM.js.map +0 -1
- package/create-skeleton-BBI5urcj.js.map +0 -1
- package/cubemap-skybox-material-DvW81drX.js.map +0 -1
- package/emissive-fragment-DD8cvHyx.js.map +0 -1
- package/gaussian-splatting-pipeline-sh-BvkUhA9V.js.map +0 -1
- package/gltf-animation-KnPzeOIY.js.map +0 -1
- package/gltf-ext-basisu-kmth3UWX.js.map +0 -1
- package/gltf-ext-quantization-CpZyLDIz.js.map +0 -1
- package/gltf-feature-animation-pointer-rFqLfbO_.js.map +0 -1
- package/gltf-feature-draco-yGSMGTE3.js.map +0 -1
- package/gltf-feature-gpu-instancing-Cj1XjmM6.js.map +0 -1
- package/gltf-feature-meshopt-Des96YFI.js.map +0 -1
- package/gltf-feature-morph-BAcY14XU.js.map +0 -1
- package/gltf-glb-parser-D6UZWFuC.js.map +0 -1
- package/gltf-interleave-C9eBqH_F.js.map +0 -1
- package/gltf-pbr-builder-ext-DPC0zg_u.js.map +0 -1
- package/gs-picking-pipeline-Bx8LTav6.js.map +0 -1
- package/index-B7Qhw0xL.js +0 -21232
- package/index-B7Qhw0xL.js.map +0 -1
- package/mesh-features-BAJpbMog.js.map +0 -1
- package/no-color-view-DsyLSL-W.js +0 -8
- package/no-color-view-DsyLSL-W.js.map +0 -1
- package/node-env-BPZXZzBf.js.map +0 -1
- package/node-registry-Bd-AlrgC.js +0 -190
- package/node-registry-Bd-AlrgC.js.map +0 -1
- package/node-renderable-CS0CmsSp.js.map +0 -1
- package/node-shadow-CpnrdvtJ.js.map +0 -1
- package/pbr-renderable-BHAdF5Vw.js.map +0 -1
- package/rgbd-decode-DCvzUYeI.js.map +0 -1
- package/scene-material-swap-C2ykv55W.js.map +0 -1
- package/shader-renderable-BMf_vvO0.js.map +0 -1
- package/shader-thin-instance-5_WUfi3m.js.map +0 -1
- package/skybox-renderable-DDcCPSly.js.map +0 -1
- package/splat-ply-compressed-BahdBG1r.js.map +0 -1
- package/standard-renderable-D1bhoF0K.js.map +0 -1
- package/swapchain-overlay-DcCSFDp7.js +0 -35
- package/swapchain-overlay-DcCSFDp7.js.map +0 -1
- package/thin-instance-cull-binding-CCxrPNO6.js.map +0 -1
- package/thin-instance-gpu-E8DBd8XL.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { aK as PBR_HAS_METALLIC_REFLECTANCE_MAP, aL as PBR_HAS_REFLECTANCE_MAP, aM as PBR2_HAS_REFLECTANCE_FACTORS, aN as PBR2_HAS_UV2, aO as PBR_HAS_USE_ALPHA_ONLY_MR } from "./index-C-tEgwbZ.js";
|
|
2
2
|
const STAGE_FRAGMENT = 2;
|
|
3
3
|
function writeReflectanceUBO(data, material, offsets) {
|
|
4
4
|
if (!offsets.has("occlusionStrength")) {
|
|
@@ -140,4 +140,4 @@ export {
|
|
|
140
140
|
pbrExt,
|
|
141
141
|
writeReflectanceUBO
|
|
142
142
|
};
|
|
143
|
-
//# sourceMappingURL=reflectance-fragment-
|
|
143
|
+
//# sourceMappingURL=reflectance-fragment-CExe6qDY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflectance-fragment-ejMJ4O1o.js","sources":["../src/material/pbr/fragments/reflectance-fragment.ts"],"sourcesContent":["/**\n * Metallic Reflectance Fragment\n *\n * Advanced F0 computation with metallicReflectanceTexture and/or reflectanceTexture.\n * Only bundled when a scene uses these textures.\n *\n * Provides: UBO fields (occlusionStrength, metallicF0Factor, specularWeight, metallicReflectanceColor),\n * conditional texture bindings, F0 computation, and occlusion handling.\n */\n\nimport type { ShaderFragment, BindingDecl } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { PBR_HAS_METALLIC_REFLECTANCE_MAP, PBR_HAS_REFLECTANCE_MAP, PBR_HAS_USE_ALPHA_ONLY_MR, PBR2_HAS_REFLECTANCE_FACTORS, PBR2_HAS_UV2 } from \"../pbr-flag-bits.js\";\n\n// WebGPU shader stage constants\nconst STAGE_FRAGMENT = 0x2;\n\n/** Write the reflectance-extension material-UBO slice\n * (occlusionStrength, metallicF0Factor, specularWeight, metallicReflectanceColor).\n * Gated by the presence of the `occlusionStrength` field in the UBO spec,\n * which is added only when a metallic-reflectance or reflectance texture\n * is in use. */\nexport function writeReflectanceUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n if (!offsets.has(\"occlusionStrength\")) {\n return;\n }\n const off = offsets.get(\"occlusionStrength\")! / 4;\n data[off] = material.occlusionStrength ?? 1.0;\n data[off + 1] = material.metallicF0Factor ?? 1.0;\n data[off + 2] = material.specularWeight ?? material.metallicF0Factor ?? 1.0;\n const mrc = material.metallicReflectanceColor;\n data[off + 4] = mrc ? mrc[0]! : 1.0;\n data[off + 5] = mrc ? mrc[1]! : 1.0;\n data[off + 6] = mrc ? mrc[2]! : 1.0;\n}\n\n/**\n * Create a metallic reflectance fragment.\n * @param hasMetallicReflectanceMap - Whether the material has a metallicReflectanceTexture.\n * @param hasReflectanceMap - Whether the material has a reflectanceTexture.\n * @param useAlphaOnlyMR - Whether to use only the alpha channel from the metallic reflectance map.\n */\nexport function createReflectanceFragment(\n hasMetallicReflectanceMap: boolean,\n hasReflectanceMap: boolean,\n useAlphaOnlyMR: boolean,\n hasOcclusionUv2: boolean = false\n): ShaderFragment {\n const bindings: BindingDecl[] = [];\n if (hasMetallicReflectanceMap) {\n bindings.push(\n { _name: \"metallicReflectanceMap\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"metallicReflectanceMapSampler\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n if (hasReflectanceMap) {\n bindings.push(\n { _name: \"reflectanceMap\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"reflectanceMapSampler\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n\n // Build F0 computation code\n let f0Code = `var mrFactors = vec4<f32>(material.metallicReflectanceColor, material.metallicF0Factor);\nvar specularWeight = material.specularWeight;`;\n if (hasReflectanceMap) {\n f0Code += `\n{ let rSample = textureSample(reflectanceMap, reflectanceMapSampler, input.uv);\n let rLinear = pow(rSample.rgb, vec3<f32>(2.2));\n mrFactors = vec4<f32>(mrFactors.rgb * rLinear, mrFactors.a); }`;\n }\n if (hasMetallicReflectanceMap) {\n if (!useAlphaOnlyMR) {\n f0Code += `\n{ let mrSample = textureSample(metallicReflectanceMap, metallicReflectanceMapSampler, input.uv);\n let mrLinear = pow(mrSample.rgb, vec3<f32>(2.2));\n mrFactors = vec4<f32>(mrFactors.rgb * mrLinear, mrFactors.a * mrSample.a);\n specularWeight *= mrSample.a; }`;\n } else {\n f0Code += `\n{ let mrSample = textureSample(metallicReflectanceMap, metallicReflectanceMapSampler, input.uv);\n mrFactors = vec4<f32>(mrFactors.rgb, mrFactors.a * mrSample.a);\n specularWeight *= mrSample.a; }`;\n }\n }\n f0Code += `\nlet dielectricF0 = material.reflectance * mrFactors.a;\nlet surfaceReflectivityColor = mrFactors.rgb;\nlet dielectricColorF0 = vec3<f32>(dielectricF0) * surfaceReflectivityColor;\nlet metallicColorF0 = baseColor;\nvar colorF0 = mix(dielectricColorF0, metallicColorF0, metallic);\nlet colorF90 = vec3<f32>(mix(specularWeight, 1.0, metallic));\nlet surfaceAlbedo = baseColor * (vec3<f32>(1.0) - vec3<f32>(dielectricF0) * surfaceReflectivityColor) * (1.0 - metallic);`;\n\n return {\n _id: \"reflectance\",\n\n _uboFields: [\n { _name: \"occlusionStrength\", _type: \"f32\" },\n { _name: \"metallicF0Factor\", _type: \"f32\" },\n { _name: \"specularWeight\", _type: \"f32\" },\n { _name: \"_mrPad1\", _type: \"f32\" },\n { _name: \"metallicReflectanceColor\", _type: \"vec3<f32>\" },\n { _name: \"_mrPad2\", _type: \"f32\" },\n ],\n\n _bindings: bindings,\n\n _fragmentSlots: {\n MF: f0Code,\n AT: hasOcclusionUv2\n ? `let occlusion = mix(1.0, textureSample(occlusionTexture, occlusionSampler_, input.uv2).r, material.occlusionStrength);`\n : `let occlusion = mix(1.0, orm.r, material.occlusionStrength);`,\n },\n };\n}\n\n/** Create the reflectance PBR extension (group 1, fragment phase). */\nexport const pbrExt: PbrExt = {\n id: \"reflectance\",\n phase: \"fragment\",\n detect(mat) {\n const m = mat as PbrMaterialProps;\n let f = 0;\n let f2 = 0;\n if (m.metallicReflectanceTexture) {\n f |= PBR_HAS_METALLIC_REFLECTANCE_MAP;\n }\n if (m.reflectanceTexture) {\n f |= PBR_HAS_REFLECTANCE_MAP;\n }\n if (f === 0) {\n const hasNonDefaultF0 = m.metallicF0Factor != null && Math.abs(m.metallicF0Factor - 1) > 1e-6;\n const mrc = m.metallicReflectanceColor;\n const hasNonDefaultColor = mrc != null && (mrc[0] !== 1 || mrc[1] !== 1 || mrc[2] !== 1);\n if (hasNonDefaultF0 || hasNonDefaultColor) {\n f2 |= PBR2_HAS_REFLECTANCE_FACTORS;\n }\n }\n if ((f !== 0 || f2 & PBR2_HAS_REFLECTANCE_FACTORS) && m.useOnlyMetallicFromMetallicReflectanceTexture) {\n f |= PBR_HAS_USE_ALPHA_ONLY_MR;\n }\n return { f, f2 };\n },\n frag(ctx) {\n const hasMR = (ctx._features & PBR_HAS_METALLIC_REFLECTANCE_MAP) !== 0;\n const hasR = (ctx._features & PBR_HAS_REFLECTANCE_MAP) !== 0;\n const hasFactors = (ctx._features2 & PBR2_HAS_REFLECTANCE_FACTORS) !== 0;\n if (!hasMR && !hasR && !hasFactors) {\n return null;\n }\n return createReflectanceFragment(hasMR, hasR, (ctx._features & PBR_HAS_USE_ALPHA_ONLY_MR) !== 0, (ctx._features2 & PBR2_HAS_UV2) !== 0);\n },\n writeUbo: writeReflectanceUBO as PbrExt[\"writeUbo\"],\n bind(ctx, entries, b) {\n if ((ctx._features & (PBR_HAS_METALLIC_REFLECTANCE_MAP | PBR_HAS_REFLECTANCE_MAP)) === 0) {\n return b;\n }\n const m = ctx._material as PbrMaterialProps;\n if (m.metallicReflectanceTexture) {\n entries.push({ binding: b++, resource: m.metallicReflectanceTexture.view });\n entries.push({ binding: b++, resource: m.metallicReflectanceTexture.sampler });\n }\n if (m.reflectanceTexture) {\n entries.push({ binding: b++, resource: m.reflectanceTexture.view });\n entries.push({ binding: b++, resource: m.reflectanceTexture.sampler });\n }\n return b;\n },\n textures(mat, t) {\n const m = mat as PbrMaterialProps;\n if (m.metallicReflectanceTexture) {\n t.push(m.metallicReflectanceTexture);\n }\n if (m.reflectanceTexture) {\n t.push(m.reflectanceTexture);\n }\n },\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reflectance-fragment-CExe6qDY.js","sources":["../src/material/pbr/fragments/reflectance-fragment.ts"],"sourcesContent":["/**\n * Metallic Reflectance Fragment\n *\n * Advanced F0 computation with metallicReflectanceTexture and/or reflectanceTexture.\n * Only bundled when a scene uses these textures.\n *\n * Provides: UBO fields (occlusionStrength, metallicF0Factor, specularWeight, metallicReflectanceColor),\n * conditional texture bindings, F0 computation, and occlusion handling.\n */\n\nimport type { ShaderFragment, BindingDecl } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { PBR_HAS_METALLIC_REFLECTANCE_MAP, PBR_HAS_REFLECTANCE_MAP, PBR_HAS_USE_ALPHA_ONLY_MR, PBR2_HAS_REFLECTANCE_FACTORS, PBR2_HAS_UV2 } from \"../pbr-flag-bits.js\";\n\n// WebGPU shader stage constants\nconst STAGE_FRAGMENT = 0x2;\n\n/** Write the reflectance-extension material-UBO slice\n * (occlusionStrength, metallicF0Factor, specularWeight, metallicReflectanceColor).\n * Gated by the presence of the `occlusionStrength` field in the UBO spec,\n * which is added only when a metallic-reflectance or reflectance texture\n * is in use. */\nexport function writeReflectanceUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n if (!offsets.has(\"occlusionStrength\")) {\n return;\n }\n const off = offsets.get(\"occlusionStrength\")! / 4;\n data[off] = material.occlusionStrength ?? 1.0;\n data[off + 1] = material.metallicF0Factor ?? 1.0;\n data[off + 2] = material.specularWeight ?? material.metallicF0Factor ?? 1.0;\n const mrc = material.metallicReflectanceColor;\n data[off + 4] = mrc ? mrc[0]! : 1.0;\n data[off + 5] = mrc ? mrc[1]! : 1.0;\n data[off + 6] = mrc ? mrc[2]! : 1.0;\n}\n\n/**\n * Create a metallic reflectance fragment.\n * @param hasMetallicReflectanceMap - Whether the material has a metallicReflectanceTexture.\n * @param hasReflectanceMap - Whether the material has a reflectanceTexture.\n * @param useAlphaOnlyMR - Whether to use only the alpha channel from the metallic reflectance map.\n */\nexport function createReflectanceFragment(\n hasMetallicReflectanceMap: boolean,\n hasReflectanceMap: boolean,\n useAlphaOnlyMR: boolean,\n hasOcclusionUv2: boolean = false\n): ShaderFragment {\n const bindings: BindingDecl[] = [];\n if (hasMetallicReflectanceMap) {\n bindings.push(\n { _name: \"metallicReflectanceMap\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"metallicReflectanceMapSampler\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n if (hasReflectanceMap) {\n bindings.push(\n { _name: \"reflectanceMap\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"reflectanceMapSampler\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n\n // Build F0 computation code\n let f0Code = `var mrFactors = vec4<f32>(material.metallicReflectanceColor, material.metallicF0Factor);\nvar specularWeight = material.specularWeight;`;\n if (hasReflectanceMap) {\n f0Code += `\n{ let rSample = textureSample(reflectanceMap, reflectanceMapSampler, input.uv);\n let rLinear = pow(rSample.rgb, vec3<f32>(2.2));\n mrFactors = vec4<f32>(mrFactors.rgb * rLinear, mrFactors.a); }`;\n }\n if (hasMetallicReflectanceMap) {\n if (!useAlphaOnlyMR) {\n f0Code += `\n{ let mrSample = textureSample(metallicReflectanceMap, metallicReflectanceMapSampler, input.uv);\n let mrLinear = pow(mrSample.rgb, vec3<f32>(2.2));\n mrFactors = vec4<f32>(mrFactors.rgb * mrLinear, mrFactors.a * mrSample.a);\n specularWeight *= mrSample.a; }`;\n } else {\n f0Code += `\n{ let mrSample = textureSample(metallicReflectanceMap, metallicReflectanceMapSampler, input.uv);\n mrFactors = vec4<f32>(mrFactors.rgb, mrFactors.a * mrSample.a);\n specularWeight *= mrSample.a; }`;\n }\n }\n f0Code += `\nlet dielectricF0 = material.reflectance * mrFactors.a;\nlet surfaceReflectivityColor = mrFactors.rgb;\nlet dielectricColorF0 = vec3<f32>(dielectricF0) * surfaceReflectivityColor;\nlet metallicColorF0 = baseColor;\nvar colorF0 = mix(dielectricColorF0, metallicColorF0, metallic);\nlet colorF90 = vec3<f32>(mix(specularWeight, 1.0, metallic));\nlet surfaceAlbedo = baseColor * (vec3<f32>(1.0) - vec3<f32>(dielectricF0) * surfaceReflectivityColor) * (1.0 - metallic);`;\n\n return {\n _id: \"reflectance\",\n\n _uboFields: [\n { _name: \"occlusionStrength\", _type: \"f32\" },\n { _name: \"metallicF0Factor\", _type: \"f32\" },\n { _name: \"specularWeight\", _type: \"f32\" },\n { _name: \"_mrPad1\", _type: \"f32\" },\n { _name: \"metallicReflectanceColor\", _type: \"vec3<f32>\" },\n { _name: \"_mrPad2\", _type: \"f32\" },\n ],\n\n _bindings: bindings,\n\n _fragmentSlots: {\n MF: f0Code,\n AT: hasOcclusionUv2\n ? `let occlusion = mix(1.0, textureSample(occlusionTexture, occlusionSampler_, input.uv2).r, material.occlusionStrength);`\n : `let occlusion = mix(1.0, orm.r, material.occlusionStrength);`,\n },\n };\n}\n\n/** Create the reflectance PBR extension (group 1, fragment phase). */\nexport const pbrExt: PbrExt = {\n id: \"reflectance\",\n phase: \"fragment\",\n detect(mat) {\n const m = mat as PbrMaterialProps;\n let f = 0;\n let f2 = 0;\n if (m.metallicReflectanceTexture) {\n f |= PBR_HAS_METALLIC_REFLECTANCE_MAP;\n }\n if (m.reflectanceTexture) {\n f |= PBR_HAS_REFLECTANCE_MAP;\n }\n if (f === 0) {\n const hasNonDefaultF0 = m.metallicF0Factor != null && Math.abs(m.metallicF0Factor - 1) > 1e-6;\n const mrc = m.metallicReflectanceColor;\n const hasNonDefaultColor = mrc != null && (mrc[0] !== 1 || mrc[1] !== 1 || mrc[2] !== 1);\n if (hasNonDefaultF0 || hasNonDefaultColor) {\n f2 |= PBR2_HAS_REFLECTANCE_FACTORS;\n }\n }\n if ((f !== 0 || f2 & PBR2_HAS_REFLECTANCE_FACTORS) && m.useOnlyMetallicFromMetallicReflectanceTexture) {\n f |= PBR_HAS_USE_ALPHA_ONLY_MR;\n }\n return { f, f2 };\n },\n frag(ctx) {\n const hasMR = (ctx._features & PBR_HAS_METALLIC_REFLECTANCE_MAP) !== 0;\n const hasR = (ctx._features & PBR_HAS_REFLECTANCE_MAP) !== 0;\n const hasFactors = (ctx._features2 & PBR2_HAS_REFLECTANCE_FACTORS) !== 0;\n if (!hasMR && !hasR && !hasFactors) {\n return null;\n }\n return createReflectanceFragment(hasMR, hasR, (ctx._features & PBR_HAS_USE_ALPHA_ONLY_MR) !== 0, (ctx._features2 & PBR2_HAS_UV2) !== 0);\n },\n writeUbo: writeReflectanceUBO as PbrExt[\"writeUbo\"],\n bind(ctx, entries, b) {\n if ((ctx._features & (PBR_HAS_METALLIC_REFLECTANCE_MAP | PBR_HAS_REFLECTANCE_MAP)) === 0) {\n return b;\n }\n const m = ctx._material as PbrMaterialProps;\n if (m.metallicReflectanceTexture) {\n entries.push({ binding: b++, resource: m.metallicReflectanceTexture.view });\n entries.push({ binding: b++, resource: m.metallicReflectanceTexture.sampler });\n }\n if (m.reflectanceTexture) {\n entries.push({ binding: b++, resource: m.reflectanceTexture.view });\n entries.push({ binding: b++, resource: m.reflectanceTexture.sampler });\n }\n return b;\n },\n textures(mat, t) {\n const m = mat as PbrMaterialProps;\n if (m.metallicReflectanceTexture) {\n t.push(m.metallicReflectanceTexture);\n }\n if (m.reflectanceTexture) {\n t.push(m.reflectanceTexture);\n }\n },\n};\n"],"names":[],"mappings":";AAgBA,MAAM,iBAAiB;AAOhB,SAAS,oBAAoB,MAAoB,UAA4B,SAA4C;AAC5H,MAAI,CAAC,QAAQ,IAAI,mBAAmB,GAAG;AACnC;AAAA,EACJ;AACA,QAAM,MAAM,QAAQ,IAAI,mBAAmB,IAAK;AAChD,OAAK,GAAG,IAAI,SAAS,qBAAqB;AAC1C,OAAK,MAAM,CAAC,IAAI,SAAS,oBAAoB;AAC7C,OAAK,MAAM,CAAC,IAAI,SAAS,kBAAkB,SAAS,oBAAoB;AACxE,QAAM,MAAM,SAAS;AACrB,OAAK,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAK;AAChC,OAAK,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAK;AAChC,OAAK,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAK;AACpC;AAQO,SAAS,0BACZ,2BACA,mBACA,gBACA,kBAA2B,OACb;AACd,QAAM,WAA0B,CAAA;AAChC,MAAI,2BAA2B;AAC3B,aAAS;AAAA,MACL,EAAE,OAAO,0BAA0B,OAAO,EAAE,OAAO,WAAW,cAAc,kBAAA,GAAqB,aAAa,eAAA;AAAA,MAC9G,EAAE,OAAO,iCAAiC,OAAO,EAAE,OAAO,WAAW,cAAc,aAAa,aAAa,eAAA;AAAA,IAAe;AAAA,EAEpI;AACA,MAAI,mBAAmB;AACnB,aAAS;AAAA,MACL,EAAE,OAAO,kBAAkB,OAAO,EAAE,OAAO,WAAW,cAAc,kBAAA,GAAqB,aAAa,eAAA;AAAA,MACtG,EAAE,OAAO,yBAAyB,OAAO,EAAE,OAAO,WAAW,cAAc,aAAa,aAAa,eAAA;AAAA,IAAe;AAAA,EAE5H;AAGA,MAAI,SAAS;AAAA;AAEb,MAAI,mBAAmB;AACnB,cAAU;AAAA;AAAA;AAAA;AAAA,EAId;AACA,MAAI,2BAA2B;AAC3B,QAAI,CAAC,gBAAgB;AACjB,gBAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKd,OAAO;AACH,gBAAU;AAAA;AAAA;AAAA;AAAA,IAId;AAAA,EACJ;AACA,YAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASV,SAAO;AAAA,IACH,KAAK;AAAA,IAEL,YAAY;AAAA,MACR,EAAE,OAAO,qBAAqB,OAAO,MAAA;AAAA,MACrC,EAAE,OAAO,oBAAoB,OAAO,MAAA;AAAA,MACpC,EAAE,OAAO,kBAAkB,OAAO,MAAA;AAAA,MAClC,EAAE,OAAO,WAAW,OAAO,MAAA;AAAA,MAC3B,EAAE,OAAO,4BAA4B,OAAO,YAAA;AAAA,MAC5C,EAAE,OAAO,WAAW,OAAO,MAAA;AAAA,IAAM;AAAA,IAGrC,WAAW;AAAA,IAEX,gBAAgB;AAAA,MACZ,IAAI;AAAA,MACJ,IAAI,kBACE,2HACA;AAAA,IAAA;AAAA,EACV;AAER;AAGO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO,KAAK;AACR,UAAM,IAAI;AACV,QAAI,IAAI;AACR,QAAI,KAAK;AACT,QAAI,EAAE,4BAA4B;AAC9B,WAAK;AAAA,IACT;AACA,QAAI,EAAE,oBAAoB;AACtB,WAAK;AAAA,IACT;AACA,QAAI,MAAM,GAAG;AACT,YAAM,kBAAkB,EAAE,oBAAoB,QAAQ,KAAK,IAAI,EAAE,mBAAmB,CAAC,IAAI;AACzF,YAAM,MAAM,EAAE;AACd,YAAM,qBAAqB,OAAO,SAAS,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;AACtF,UAAI,mBAAmB,oBAAoB;AACvC,cAAM;AAAA,MACV;AAAA,IACJ;AACA,SAAK,MAAM,KAAK,KAAK,iCAAiC,EAAE,+CAA+C;AACnG,WAAK;AAAA,IACT;AACA,WAAO,EAAE,GAAG,GAAA;AAAA,EAChB;AAAA,EACA,KAAK,KAAK;AACN,UAAM,SAAS,IAAI,YAAY,sCAAsC;AACrE,UAAM,QAAQ,IAAI,YAAY,6BAA6B;AAC3D,UAAM,cAAc,IAAI,aAAa,kCAAkC;AACvE,QAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY;AAChC,aAAO;AAAA,IACX;AACA,WAAO,0BAA0B,OAAO,OAAO,IAAI,YAAY,+BAA+B,IAAI,IAAI,aAAa,kBAAkB,CAAC;AAAA,EAC1I;AAAA,EACA,UAAU;AAAA,EACV,KAAK,KAAK,SAAS,GAAG;AAClB,SAAK,IAAI,aAAa,mCAAmC,8BAA8B,GAAG;AACtF,aAAO;AAAA,IACX;AACA,UAAM,IAAI,IAAI;AACd,QAAI,EAAE,4BAA4B;AAC9B,cAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,EAAE,2BAA2B,MAAM;AAC1E,cAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,EAAE,2BAA2B,SAAS;AAAA,IACjF;AACA,QAAI,EAAE,oBAAoB;AACtB,cAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,EAAE,mBAAmB,MAAM;AAClE,cAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,EAAE,mBAAmB,SAAS;AAAA,IACzE;AACA,WAAO;AAAA,EACX;AAAA,EACA,SAAS,KAAK,GAAG;AACb,UAAM,IAAI;AACV,QAAI,EAAE,4BAA4B;AAC9B,QAAE,KAAK,EAAE,0BAA0B;AAAA,IACvC;AACA,QAAI,EAAE,oBAAoB;AACtB,QAAE,KAAK,EAAE,kBAAkB;AAAA,IAC/B;AAAA,EACJ;AACJ;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { T as TU } from "./index-C-tEgwbZ.js";
|
|
1
2
|
const WGSL = `override f:bool=false;@group(0)@binding(0)var t:texture_2d<f32>;@group(0)@binding(1)var o:texture_storage_2d<rgba16float,write>;@compute @workgroup_size(8,8)fn main(@builtin(global_invocation_id)g:vec3u){let d=textureDimensions(t);if(any(g.xy>=d)){return;}let c=textureLoad(t,vec2u(g.x,select(g.y,d.y-1u-g.y,f)),0);textureStore(o,g.xy,vec4f(pow(c.rgb,vec3f(2.2))/max(c.a,1.0/255.0),1));}`;
|
|
2
3
|
let _device = null;
|
|
3
4
|
let _module = null;
|
|
@@ -49,13 +50,13 @@ function decodeBrdfPng(engine, image) {
|
|
|
49
50
|
const inputTex = device.createTexture({
|
|
50
51
|
size: { width: w, height: h },
|
|
51
52
|
format: "rgba8unorm",
|
|
52
|
-
usage:
|
|
53
|
+
usage: TU.TEXTURE_BINDING | TU.COPY_DST | TU.RENDER_ATTACHMENT
|
|
53
54
|
});
|
|
54
55
|
device.queue.copyExternalImageToTexture({ source: image, flipY: false }, { texture: inputTex, premultipliedAlpha: false }, { width: w, height: h });
|
|
55
56
|
const texture = device.createTexture({
|
|
56
57
|
size: { width: w, height: h },
|
|
57
58
|
format: "rgba16float",
|
|
58
|
-
usage:
|
|
59
|
+
usage: TU.TEXTURE_BINDING | TU.STORAGE_BINDING
|
|
59
60
|
});
|
|
60
61
|
const bg = makeBindGroup(device, pipeline, inputTex.createView(), texture.createView());
|
|
61
62
|
const enc = device.createCommandEncoder();
|
|
@@ -71,7 +72,7 @@ function uploadCubemapRGBD(engine, images, width, mipCount) {
|
|
|
71
72
|
size: { width, height: width, depthOrArrayLayers: 6 },
|
|
72
73
|
format: "rgba16float",
|
|
73
74
|
mipLevelCount: mipCount,
|
|
74
|
-
usage:
|
|
75
|
+
usage: TU.TEXTURE_BINDING | TU.COPY_DST | TU.COPY_SRC | TU.RENDER_ATTACHMENT,
|
|
75
76
|
dimension: "2d"
|
|
76
77
|
});
|
|
77
78
|
for (let mip = 0; mip < mipCount; mip++) {
|
|
@@ -79,12 +80,12 @@ function uploadCubemapRGBD(engine, images, width, mipCount) {
|
|
|
79
80
|
const inputTex = device.createTexture({
|
|
80
81
|
size: { width: mipSize, height: mipSize },
|
|
81
82
|
format: "rgba8unorm",
|
|
82
|
-
usage:
|
|
83
|
+
usage: TU.TEXTURE_BINDING | TU.COPY_DST | TU.RENDER_ATTACHMENT
|
|
83
84
|
});
|
|
84
85
|
const outputTex = device.createTexture({
|
|
85
86
|
size: { width: mipSize, height: mipSize },
|
|
86
87
|
format: "rgba16float",
|
|
87
|
-
usage:
|
|
88
|
+
usage: TU.STORAGE_BINDING | TU.COPY_SRC
|
|
88
89
|
});
|
|
89
90
|
const bindGroup = makeBindGroup(device, pipeline, inputTex.createView(), outputTex.createView());
|
|
90
91
|
for (let face = 0; face < 6; face++) {
|
|
@@ -107,4 +108,4 @@ export {
|
|
|
107
108
|
decodeBrdfPng,
|
|
108
109
|
uploadCubemapRGBD
|
|
109
110
|
};
|
|
110
|
-
//# sourceMappingURL=rgbd-decode-
|
|
111
|
+
//# sourceMappingURL=rgbd-decode-DkiiiIlt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rgbd-decode-DkiiiIlt.js","sources":["../src/loader-env/rgbd-decode.ts"],"sourcesContent":["/** RGBD decoder — decodes Babylon BRDF PNG and .env cubemap faces into rgba16float. */\n\nimport { TU } from \"../engine/gpu-flags.js\";\nimport type { EngineContext } from \"../engine/engine.js\";\n\nconst WGSL = `override f:bool=false;@group(0)@binding(0)var t:texture_2d<f32>;@group(0)@binding(1)var o:texture_storage_2d<rgba16float,write>;@compute @workgroup_size(8,8)fn main(@builtin(global_invocation_id)g:vec3u){let d=textureDimensions(t);if(any(g.xy>=d)){return;}let c=textureLoad(t,vec2u(g.x,select(g.y,d.y-1u-g.y,f)),0);textureStore(o,g.xy,vec4f(pow(c.rgb,vec3f(2.2))/max(c.a,1.0/255.0),1));}`;\n\nlet _device: GPUDevice | null = null;\nlet _module: GPUShaderModule | null = null;\nlet _noFlip: GPUComputePipeline | null = null;\nlet _flip: GPUComputePipeline | null = null;\n\nfunction getPipeline(device: GPUDevice, flipY: boolean): GPUComputePipeline {\n if (device !== _device) {\n _device = device;\n _module = device.createShaderModule({ code: WGSL });\n _noFlip = null;\n _flip = null;\n }\n const slot = flipY ? _flip : _noFlip;\n if (slot) {\n return slot;\n }\n const p = device.createComputePipeline({\n layout: \"auto\",\n compute: { module: _module!, entryPoint: \"main\", constants: { f: flipY ? 1 : 0 } },\n });\n if (flipY) {\n _flip = p;\n } else {\n _noFlip = p;\n }\n return p;\n}\n\nfunction makeBindGroup(device: GPUDevice, pipeline: GPUComputePipeline, inView: GPUTextureView, outView: GPUTextureView): GPUBindGroup {\n return device.createBindGroup({\n layout: pipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: inView },\n { binding: 1, resource: outView },\n ],\n });\n}\n\nfunction encodeDispatch(encoder: GPUCommandEncoder, pipeline: GPUComputePipeline, bg: GPUBindGroup, w: number, h: number): void {\n const pass = encoder.beginComputePass();\n pass.setPipeline(pipeline);\n pass.setBindGroup(0, bg);\n pass.dispatchWorkgroups(Math.ceil(w / 8), Math.ceil(h / 8));\n pass.end();\n}\n\n/** Decode a single RGBD PNG (e.g. BRDF LUT) `->` rgba16float 2D texture. No Y-flip. */\nexport function decodeBrdfPng(engine: EngineContext, image: ImageBitmap): GPUTexture {\n const device = engine._device;\n const pipeline = getPipeline(device, false);\n const w = image.width;\n const h = image.height;\n const inputTex = device.createTexture({\n size: { width: w, height: h },\n format: \"rgba8unorm\",\n usage: TU.TEXTURE_BINDING | TU.COPY_DST | TU.RENDER_ATTACHMENT,\n });\n device.queue.copyExternalImageToTexture({ source: image, flipY: false }, { texture: inputTex, premultipliedAlpha: false }, { width: w, height: h });\n const texture = device.createTexture({\n size: { width: w, height: h },\n format: \"rgba16float\",\n usage: TU.TEXTURE_BINDING | TU.STORAGE_BINDING,\n });\n const bg = makeBindGroup(device, pipeline, inputTex.createView(), texture.createView());\n const enc = device.createCommandEncoder();\n encodeDispatch(enc, pipeline, bg, w, h);\n device.queue.submit([enc.finish()]);\n inputTex.destroy();\n return texture;\n}\n\n/** Decode and upload a RGBD cubemap (6 faces × N mips) → rgba16float cube texture.\n * Y-flipped on read (BJS uploads cubemap faces with invertY=true). */\nexport function uploadCubemapRGBD(engine: EngineContext, images: ImageBitmap[], width: number, mipCount: number): GPUTexture {\n const device = engine._device;\n const pipeline = getPipeline(device, true);\n\n const texture = device.createTexture({\n size: { width, height: width, depthOrArrayLayers: 6 },\n format: \"rgba16float\",\n mipLevelCount: mipCount,\n usage: TU.TEXTURE_BINDING | TU.COPY_DST | TU.COPY_SRC | TU.RENDER_ATTACHMENT,\n dimension: \"2d\",\n });\n\n for (let mip = 0; mip < mipCount; mip++) {\n const mipSize = Math.max(1, width >> mip);\n\n const inputTex = device.createTexture({\n size: { width: mipSize, height: mipSize },\n format: \"rgba8unorm\",\n usage: TU.TEXTURE_BINDING | TU.COPY_DST | TU.RENDER_ATTACHMENT,\n });\n\n const outputTex = device.createTexture({\n size: { width: mipSize, height: mipSize },\n format: \"rgba16float\",\n usage: TU.STORAGE_BINDING | TU.COPY_SRC,\n });\n\n const bindGroup = makeBindGroup(device, pipeline, inputTex.createView(), outputTex.createView());\n\n for (let face = 0; face < 6; face++) {\n const idx = mip * 6 + face;\n if (idx >= images.length) {\n break;\n }\n\n device.queue.copyExternalImageToTexture({ source: images[idx]!, flipY: false }, { texture: inputTex, premultipliedAlpha: false }, { width: mipSize, height: mipSize });\n\n const encoder = device.createCommandEncoder();\n encodeDispatch(encoder, pipeline, bindGroup, mipSize, mipSize);\n encoder.copyTextureToTexture({ texture: outputTex }, { texture, origin: { x: 0, y: 0, z: face }, mipLevel: mip }, { width: mipSize, height: mipSize });\n\n // One submit per face ensures sequential hazards on the reused input/output.\n device.queue.submit([encoder.finish()]);\n }\n\n inputTex.destroy();\n outputTex.destroy();\n }\n\n return texture;\n}\n"],"names":[],"mappings":";AAKA,MAAM,OAAO;AAEb,IAAI,UAA4B;AAChC,IAAI,UAAkC;AACtC,IAAI,UAAqC;AACzC,IAAI,QAAmC;AAEvC,SAAS,YAAY,QAAmB,OAAoC;AACxE,MAAI,WAAW,SAAS;AACpB,cAAU;AACV,cAAU,OAAO,mBAAmB,EAAE,MAAM,MAAM;AAClD,cAAU;AACV,YAAQ;AAAA,EACZ;AACA,QAAM,OAAO,QAAQ,QAAQ;AAC7B,MAAI,MAAM;AACN,WAAO;AAAA,EACX;AACA,QAAM,IAAI,OAAO,sBAAsB;AAAA,IACnC,QAAQ;AAAA,IACR,SAAS,EAAE,QAAQ,SAAU,YAAY,QAAQ,WAAW,EAAE,GAAG,QAAQ,IAAI,EAAA,EAAE;AAAA,EAAE,CACpF;AACD,MAAI,OAAO;AACP,YAAQ;AAAA,EACZ,OAAO;AACH,cAAU;AAAA,EACd;AACA,SAAO;AACX;AAEA,SAAS,cAAc,QAAmB,UAA8B,QAAwB,SAAuC;AACnI,SAAO,OAAO,gBAAgB;AAAA,IAC1B,QAAQ,SAAS,mBAAmB,CAAC;AAAA,IACrC,SAAS;AAAA,MACL,EAAE,SAAS,GAAG,UAAU,OAAA;AAAA,MACxB,EAAE,SAAS,GAAG,UAAU,QAAA;AAAA,IAAQ;AAAA,EACpC,CACH;AACL;AAEA,SAAS,eAAe,SAA4B,UAA8B,IAAkB,GAAW,GAAiB;AAC5H,QAAM,OAAO,QAAQ,iBAAA;AACrB,OAAK,YAAY,QAAQ;AACzB,OAAK,aAAa,GAAG,EAAE;AACvB,OAAK,mBAAmB,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC;AAC1D,OAAK,IAAA;AACT;AAGO,SAAS,cAAc,QAAuB,OAAgC;AACjF,QAAM,SAAS,OAAO;AACtB,QAAM,WAAW,YAAY,QAAQ,KAAK;AAC1C,QAAM,IAAI,MAAM;AAChB,QAAM,IAAI,MAAM;AAChB,QAAM,WAAW,OAAO,cAAc;AAAA,IAClC,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAA;AAAA,IAC1B,QAAQ;AAAA,IACR,OAAO,GAAG,kBAAkB,GAAG,WAAW,GAAG;AAAA,EAAA,CAChD;AACD,SAAO,MAAM,2BAA2B,EAAE,QAAQ,OAAO,OAAO,SAAS,EAAE,SAAS,UAAU,oBAAoB,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG;AAClJ,QAAM,UAAU,OAAO,cAAc;AAAA,IACjC,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAA;AAAA,IAC1B,QAAQ;AAAA,IACR,OAAO,GAAG,kBAAkB,GAAG;AAAA,EAAA,CAClC;AACD,QAAM,KAAK,cAAc,QAAQ,UAAU,SAAS,WAAA,GAAc,QAAQ,YAAY;AACtF,QAAM,MAAM,OAAO,qBAAA;AACnB,iBAAe,KAAK,UAAU,IAAI,GAAG,CAAC;AACtC,SAAO,MAAM,OAAO,CAAC,IAAI,OAAA,CAAQ,CAAC;AAClC,WAAS,QAAA;AACT,SAAO;AACX;AAIO,SAAS,kBAAkB,QAAuB,QAAuB,OAAe,UAA8B;AACzH,QAAM,SAAS,OAAO;AACtB,QAAM,WAAW,YAAY,QAAQ,IAAI;AAEzC,QAAM,UAAU,OAAO,cAAc;AAAA,IACjC,MAAM,EAAE,OAAO,QAAQ,OAAO,oBAAoB,EAAA;AAAA,IAClD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,OAAO,GAAG,kBAAkB,GAAG,WAAW,GAAG,WAAW,GAAG;AAAA,IAC3D,WAAW;AAAA,EAAA,CACd;AAED,WAAS,MAAM,GAAG,MAAM,UAAU,OAAO;AACrC,UAAM,UAAU,KAAK,IAAI,GAAG,SAAS,GAAG;AAExC,UAAM,WAAW,OAAO,cAAc;AAAA,MAClC,MAAM,EAAE,OAAO,SAAS,QAAQ,QAAA;AAAA,MAChC,QAAQ;AAAA,MACR,OAAO,GAAG,kBAAkB,GAAG,WAAW,GAAG;AAAA,IAAA,CAChD;AAED,UAAM,YAAY,OAAO,cAAc;AAAA,MACnC,MAAM,EAAE,OAAO,SAAS,QAAQ,QAAA;AAAA,MAChC,QAAQ;AAAA,MACR,OAAO,GAAG,kBAAkB,GAAG;AAAA,IAAA,CAClC;AAED,UAAM,YAAY,cAAc,QAAQ,UAAU,SAAS,WAAA,GAAc,UAAU,YAAY;AAE/F,aAAS,OAAO,GAAG,OAAO,GAAG,QAAQ;AACjC,YAAM,MAAM,MAAM,IAAI;AACtB,UAAI,OAAO,OAAO,QAAQ;AACtB;AAAA,MACJ;AAEA,aAAO,MAAM,2BAA2B,EAAE,QAAQ,OAAO,GAAG,GAAI,OAAO,MAAA,GAAS,EAAE,SAAS,UAAU,oBAAoB,MAAA,GAAS,EAAE,OAAO,SAAS,QAAQ,SAAS;AAErK,YAAM,UAAU,OAAO,qBAAA;AACvB,qBAAe,SAAS,UAAU,WAAW,SAAS,OAAO;AAC7D,cAAQ,qBAAqB,EAAE,SAAS,UAAA,GAAa,EAAE,SAAS,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,UAAU,IAAA,GAAO,EAAE,OAAO,SAAS,QAAQ,SAAS;AAGrJ,aAAO,MAAM,OAAO,CAAC,QAAQ,OAAA,CAAQ,CAAC;AAAA,IAC1C;AAEA,aAAS,QAAA;AACT,cAAU,QAAA;AAAA,EACd;AAEA,SAAO;AACX;"}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
function processMaterialSwaps(scene) {
|
|
2
2
|
const q = scene._materialSwapQueue;
|
|
3
|
+
const device = scene.surface.engine._device;
|
|
3
4
|
for (const mesh of q) {
|
|
4
|
-
mesh._materialDirty = false;
|
|
5
5
|
const old = scene._meshDisposables.get(mesh);
|
|
6
6
|
if (old) {
|
|
7
|
-
for (const fn of old) {
|
|
8
|
-
fn();
|
|
9
|
-
}
|
|
10
7
|
scene._meshDisposables.delete(mesh);
|
|
8
|
+
void device.queue.onSubmittedWorkDone().then(() => {
|
|
9
|
+
try {
|
|
10
|
+
for (const fn of old) {
|
|
11
|
+
fn();
|
|
12
|
+
}
|
|
13
|
+
} catch {
|
|
14
|
+
}
|
|
15
|
+
}).catch(() => {
|
|
16
|
+
});
|
|
11
17
|
}
|
|
12
18
|
const mat = mesh.material;
|
|
13
19
|
const builder = mat == null ? void 0 : mat._buildGroup;
|
|
@@ -31,4 +37,4 @@ function processMaterialSwaps(scene) {
|
|
|
31
37
|
export {
|
|
32
38
|
processMaterialSwaps
|
|
33
39
|
};
|
|
34
|
-
//# sourceMappingURL=scene-material-swap-
|
|
40
|
+
//# sourceMappingURL=scene-material-swap-4qM0tpBK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-material-swap-4qM0tpBK.js","sources":["../src/scene/scene-material-swap.ts"],"sourcesContent":["import type { SceneContext } from \"./scene-core.js\";\n\n/** @internal Drain _materialSwapQueue: dispose old resources and rebuild renderables. */\nexport function processMaterialSwaps(scene: SceneContext): void {\n const q = scene._materialSwapQueue;\n const device = scene.surface.engine._device;\n for (const mesh of q) {\n const old = scene._meshDisposables.get(mesh);\n if (old) {\n scene._meshDisposables.delete(mesh);\n // These disposables free the OLD renderable's GPU resources (per-mesh/material UBOs, the\n // GPU-cull state buffers, texture releases). They must NOT run synchronously: the old buffers\n // may still be referenced by a frame already submitted to the GPU this tick, and destroying\n // them now hits the validation error \"Buffer used in submit while destroyed\" (seen when a\n // plugin / shadow-receiver variant change swaps a planted mesh's material — e.g. planting a\n // fern or agave). The new renderable is rebuilt below and replaces the old one, so nothing\n // records the old resources again; defer the teardown until the GPU has drained the\n // currently-submitted work (onSubmittedWorkDone). Mirrors resizeMeshGeometry.\n void device.queue\n .onSubmittedWorkDone()\n .then(() => {\n try {\n for (const fn of old) {\n fn();\n }\n } catch {\n // Device may have been lost/disposed before the deferred teardown ran.\n }\n })\n .catch(() => {});\n }\n\n const mat = mesh.material;\n const builder = mat?._buildGroup;\n if (!builder) {\n continue;\n }\n const rebuild = builder._rebuildSingle;\n if (!rebuild) {\n continue;\n }\n const renderable = rebuild(scene, mesh);\n // Insert by `order` so the renderable list stays sorted (frame-graph\n // tasks bucket opaque/direct/transparent at bind time).\n let i = scene._renderables.length;\n while (i > 0 && scene._renderables[i - 1]!.order > renderable.order) {\n i--;\n }\n scene._renderables.splice(i, 0, renderable);\n }\n q.length = 0;\n scene._renderableVersion++;\n}\n"],"names":[],"mappings":"AAGO,SAAS,qBAAqB,OAA2B;AAC5D,QAAM,IAAI,MAAM;AAChB,QAAM,SAAS,MAAM,QAAQ,OAAO;AACpC,aAAW,QAAQ,GAAG;AAClB,UAAM,MAAM,MAAM,iBAAiB,IAAI,IAAI;AAC3C,QAAI,KAAK;AACL,YAAM,iBAAiB,OAAO,IAAI;AASlC,WAAK,OAAO,MACP,oBAAA,EACA,KAAK,MAAM;AACR,YAAI;AACA,qBAAW,MAAM,KAAK;AAClB,eAAA;AAAA,UACJ;AAAA,QACJ,QAAQ;AAAA,QAER;AAAA,MACJ,CAAC,EACA,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACvB;AAEA,UAAM,MAAM,KAAK;AACjB,UAAM,UAAU,2BAAK;AACrB,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AACA,UAAM,UAAU,QAAQ;AACxB,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AACA,UAAM,aAAa,QAAQ,OAAO,IAAI;AAGtC,QAAI,IAAI,MAAM,aAAa;AAC3B,WAAO,IAAI,KAAK,MAAM,aAAa,IAAI,CAAC,EAAG,QAAQ,WAAW,OAAO;AACjE;AAAA,IACJ;AACA,UAAM,aAAa,OAAO,GAAG,GAAG,UAAU;AAAA,EAC9C;AACA,IAAE,SAAS;AACX,QAAM;AACV;"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { B as BU, T as TU } from "./index-C-tEgwbZ.js";
|
|
2
|
+
function alignBytesPerRow(width) {
|
|
3
|
+
return Math.ceil(width * 4 / 256) * 256;
|
|
4
|
+
}
|
|
5
|
+
function preFrame(surface) {
|
|
6
|
+
const queue = surface._captureQueue;
|
|
7
|
+
if (!queue || queue.length === 0 || surface._swapchainCopySrc) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
surface._swapchainCopySrc = true;
|
|
11
|
+
surface._context.configure({ device: surface.engine._device, format: surface.format, alphaMode: surface._alphaMode, usage: TU.RENDER_ATTACHMENT | TU.COPY_SRC });
|
|
12
|
+
}
|
|
13
|
+
function service(surface, encoder) {
|
|
14
|
+
const queue = surface._captureQueue;
|
|
15
|
+
if (!queue || queue.length === 0) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (!surface._swapchainCopySrc) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
surface._captureQueue = void 0;
|
|
22
|
+
const tex = surface.scRT._colorTexture;
|
|
23
|
+
if (!tex) {
|
|
24
|
+
const err = new Error("captureScreenshot: no swapchain texture available");
|
|
25
|
+
for (const r of queue) {
|
|
26
|
+
r.reject(err);
|
|
27
|
+
}
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const width = surface.scRT._width;
|
|
31
|
+
const height = surface.scRT._height;
|
|
32
|
+
const bytesPerRow = alignBytesPerRow(width);
|
|
33
|
+
const buffer = surface.engine._device.createBuffer({
|
|
34
|
+
label: "screenshot-readback",
|
|
35
|
+
size: bytesPerRow * height,
|
|
36
|
+
usage: BU.COPY_DST | BU.MAP_READ
|
|
37
|
+
});
|
|
38
|
+
encoder.copyTextureToBuffer({ texture: tex }, { buffer, bytesPerRow, rowsPerImage: height }, { width, height, depthOrArrayLayers: 1 });
|
|
39
|
+
void finish({ buffer, width, height, bytesPerRow, bgra: surface.format.startsWith("bgra"), reqs: queue });
|
|
40
|
+
}
|
|
41
|
+
async function finish(pend) {
|
|
42
|
+
const { buffer, width, height, bytesPerRow, bgra, reqs } = pend;
|
|
43
|
+
try {
|
|
44
|
+
await Promise.resolve();
|
|
45
|
+
await buffer.mapAsync(GPUMapMode.READ);
|
|
46
|
+
const src = new Uint8Array(buffer.getMappedRange());
|
|
47
|
+
const out = new Uint8ClampedArray(width * height * 4);
|
|
48
|
+
for (let y = 0; y < height; y++) {
|
|
49
|
+
const srcRow = y * bytesPerRow;
|
|
50
|
+
const dstRow = y * width * 4;
|
|
51
|
+
for (let x = 0; x < width; x++) {
|
|
52
|
+
const s = srcRow + x * 4;
|
|
53
|
+
const d = dstRow + x * 4;
|
|
54
|
+
if (bgra) {
|
|
55
|
+
out[d] = src[s + 2];
|
|
56
|
+
out[d + 1] = src[s + 1];
|
|
57
|
+
out[d + 2] = src[s];
|
|
58
|
+
} else {
|
|
59
|
+
out[d] = src[s];
|
|
60
|
+
out[d + 1] = src[s + 1];
|
|
61
|
+
out[d + 2] = src[s + 2];
|
|
62
|
+
}
|
|
63
|
+
out[d + 3] = 255;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
buffer.unmap();
|
|
67
|
+
buffer.destroy();
|
|
68
|
+
const shot = { width, height, data: out };
|
|
69
|
+
for (const r of reqs) {
|
|
70
|
+
r.resolve(shot);
|
|
71
|
+
}
|
|
72
|
+
} catch (e) {
|
|
73
|
+
try {
|
|
74
|
+
buffer.destroy();
|
|
75
|
+
} catch {
|
|
76
|
+
}
|
|
77
|
+
for (const r of reqs) {
|
|
78
|
+
r.reject(e);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function createCaptureService() {
|
|
83
|
+
return service;
|
|
84
|
+
}
|
|
85
|
+
function createCapturePreFrame() {
|
|
86
|
+
return preFrame;
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
createCapturePreFrame,
|
|
90
|
+
createCaptureService
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=screenshot-readback-avr_tYGZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot-readback-avr_tYGZ.js","sources":["../src/engine/screenshot-readback.ts"],"sourcesContent":["import type { SurfaceContext } from \"./surface.js\";\nimport type { Screenshot } from \"./screenshot.js\";\nimport { BU, TU } from \"./gpu-flags.js\";\n\n/** @internal Per-frame readback hook driven by `renderFrame` once `captureScreenshot` has\n * lazily loaded this module and installed it on `surface._captureService`. Records the\n * surface's swapchain copy for any queued capture requests into the frame's encoder. */\nexport type CaptureService = (surface: SurfaceContext, encoder: GPUCommandEncoder) => void;\n\n/** @internal Pre-acquire hook driven by `renderFrame` (installed alongside `_captureService`).\n * Called before a surface's frame swapchain texture is acquired; reconfigures that surface's\n * swapchain with COPY_SRC the first time a capture is queued. */\nexport type CapturePreFrame = (surface: SurfaceContext) => void;\n\n/** A single readback in flight: the buffer the frame's copy lands in, plus the dimensions /\n * padding needed to unpack it, and the requests waiting on this frame. */\ninterface PendingReadback {\n buffer: GPUBuffer;\n width: number;\n height: number;\n bytesPerRow: number;\n bgra: boolean;\n reqs: ReadonlyArray<{ resolve: (s: Screenshot) => void; reject: (e: unknown) => void }>;\n}\n\n/** copyTextureToBuffer requires the per-row stride to be a multiple of 256 bytes. */\nfunction alignBytesPerRow(width: number): number {\n return Math.ceil((width * 4) / 256) * 256;\n}\n\n/** Pre-acquire hook. Called by `renderFrame` for each surface BEFORE `_refreshScRT` acquires\n * that surface's frame swapchain texture. On the first queued capture it reconfigures the\n * surface's swapchain with COPY_SRC so the just-acquired texture is copyable. Reconfiguring\n * here (not after the scene has recorded) is mandatory: `configure()` expires the current\n * canvas texture, so doing it mid-frame would invalidate the recorded texture and fail the\n * submit. */\nfunction preFrame(surface: SurfaceContext): void {\n const queue = surface._captureQueue;\n if (!queue || queue.length === 0 || surface._swapchainCopySrc) {\n return;\n }\n surface._swapchainCopySrc = true;\n surface._context.configure({ device: surface.engine._device, format: surface.format, alphaMode: surface._alphaMode, usage: TU.RENDER_ATTACHMENT | TU.COPY_SRC });\n}\n\n/** The readback hook. Called once per surface per frame after the contexts have recorded (so the\n * surface's swapchain texture holds this frame) and before the encoder is finished.\n *\n * By the time this runs the swapchain is already COPY_SRC-capable: `preFrame` reconfigured it\n * before the frame's texture was acquired, so the copy can be recorded straight into this\n * frame's encoder. */\nfunction service(surface: SurfaceContext, encoder: GPUCommandEncoder): void {\n const queue = surface._captureQueue;\n if (!queue || queue.length === 0) {\n return;\n }\n // The swapchain only becomes copyable once `preFrame` has reconfigured it and `renderFrame`\n // has acquired a COPY_SRC texture; until then there is nothing copyable, so wait for the next\n // frame (the request stays queued).\n if (!surface._swapchainCopySrc) {\n return;\n }\n\n surface._captureQueue = undefined;\n\n const tex = surface.scRT._colorTexture;\n if (!tex) {\n const err = new Error(\"captureScreenshot: no swapchain texture available\");\n for (const r of queue) {\n r.reject(err);\n }\n return;\n }\n\n const width = surface.scRT._width;\n const height = surface.scRT._height;\n const bytesPerRow = alignBytesPerRow(width);\n const buffer = surface.engine._device.createBuffer({\n label: \"screenshot-readback\",\n size: bytesPerRow * height,\n usage: BU.COPY_DST | BU.MAP_READ,\n });\n encoder.copyTextureToBuffer({ texture: tex }, { buffer, bytesPerRow, rowsPerImage: height }, { width, height, depthOrArrayLayers: 1 });\n void finish({ buffer, width, height, bytesPerRow, bgra: surface.format.startsWith(\"bgra\"), reqs: queue });\n}\n\n/** Maps the staging buffer after submit, unpacks it into tightly-packed opaque RGBA8, and\n * resolves the waiting requests. Fire-and-forget: the map is async and resolves later. */\nasync function finish(pend: PendingReadback): Promise<void> {\n const { buffer, width, height, bytesPerRow, bgra, reqs } = pend;\n try {\n // Yield one microtask so `renderFrame` submits this frame's encoder (which holds the copy)\n // BEFORE we map the buffer: mapAsync moves the buffer to a pending-map state synchronously,\n // and a buffer pending map cannot be used by a command buffer in a submit — calling it before\n // the submit would invalidate the whole frame and read back an empty (all-black) buffer.\n await Promise.resolve();\n await buffer.mapAsync(GPUMapMode.READ);\n const src = new Uint8Array(buffer.getMappedRange());\n const out = new Uint8ClampedArray(width * height * 4);\n for (let y = 0; y < height; y++) {\n const srcRow = y * bytesPerRow;\n const dstRow = y * width * 4;\n for (let x = 0; x < width; x++) {\n const s = srcRow + x * 4;\n const d = dstRow + x * 4;\n if (bgra) {\n out[d] = src[s + 2]!;\n out[d + 1] = src[s + 1]!;\n out[d + 2] = src[s]!;\n } else {\n out[d] = src[s]!;\n out[d + 1] = src[s + 1]!;\n out[d + 2] = src[s + 2]!;\n }\n out[d + 3] = 255;\n }\n }\n buffer.unmap();\n buffer.destroy();\n const shot: Screenshot = { width, height, data: out };\n for (const r of reqs) {\n r.resolve(shot);\n }\n } catch (e) {\n try {\n buffer.destroy();\n } catch {\n /* already destroyed */\n }\n for (const r of reqs) {\n r.reject(e);\n }\n }\n}\n\n/** @internal Factory invoked by `captureScreenshot` after this module is dynamically imported.\n * Returns the per-frame readback hook installed on `surface._captureService`. */\nexport function createCaptureService(): CaptureService {\n return service;\n}\n\n/** @internal Factory invoked by `captureScreenshot` after this module is dynamically imported.\n * Returns the pre-acquire hook installed on `engine._capturePreFrame`. */\nexport function createCapturePreFrame(): CapturePreFrame {\n return preFrame;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { o as computeUboLayout, q as SCENE_UBO_WGSL } from "./index-C-tEgwbZ.js";
|
|
2
2
|
const STAGE_VERTEX = 1;
|
|
3
3
|
const STAGE_FRAGMENT = 2;
|
|
4
4
|
function topoSort(fragments) {
|
|
@@ -287,58 +287,7 @@ ${varyBody}
|
|
|
287
287
|
_fragmentKey
|
|
288
288
|
};
|
|
289
289
|
}
|
|
290
|
-
const MSH_HAS_TANGENTS = 1 << 0;
|
|
291
|
-
const MSH_HAS_SKELETON = 1 << 1;
|
|
292
|
-
const MSH_HAS_SKELETON_8 = 1 << 2;
|
|
293
|
-
const MSH_HAS_MORPH_TARGETS = 1 << 3;
|
|
294
|
-
const MSH_HAS_THIN_INSTANCES = 1 << 4;
|
|
295
|
-
const MSH_HAS_INSTANCE_COLOR = 1 << 5;
|
|
296
|
-
const MSH_HAS_VERTEX_COLOR = 1 << 6;
|
|
297
|
-
const MSH_HAS_UV2 = 1 << 7;
|
|
298
|
-
const MSH_RECEIVE_SHADOWS = 1 << 8;
|
|
299
|
-
function _computeMeshFeatures(mesh, receiveShadows = false) {
|
|
300
|
-
const gpu = mesh._gpu;
|
|
301
|
-
let features = 0;
|
|
302
|
-
if (gpu.tangentBuffer) {
|
|
303
|
-
features |= MSH_HAS_TANGENTS;
|
|
304
|
-
}
|
|
305
|
-
if (mesh.skeleton) {
|
|
306
|
-
features |= MSH_HAS_SKELETON;
|
|
307
|
-
if (mesh.skeleton.joints1Buffer) {
|
|
308
|
-
features |= MSH_HAS_SKELETON_8;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
if (mesh.morphTargets) {
|
|
312
|
-
features |= MSH_HAS_MORPH_TARGETS;
|
|
313
|
-
}
|
|
314
|
-
if (mesh.thinInstances) {
|
|
315
|
-
features |= MSH_HAS_THIN_INSTANCES;
|
|
316
|
-
if (mesh.thinInstances.colors) {
|
|
317
|
-
features |= MSH_HAS_INSTANCE_COLOR;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
if (gpu.colorBuffer) {
|
|
321
|
-
features |= MSH_HAS_VERTEX_COLOR;
|
|
322
|
-
}
|
|
323
|
-
if (gpu.uv2Buffer) {
|
|
324
|
-
features |= MSH_HAS_UV2;
|
|
325
|
-
}
|
|
326
|
-
if (receiveShadows) {
|
|
327
|
-
features |= MSH_RECEIVE_SHADOWS;
|
|
328
|
-
}
|
|
329
|
-
return features;
|
|
330
|
-
}
|
|
331
290
|
export {
|
|
332
|
-
|
|
333
|
-
_computeMeshFeatures as _,
|
|
334
|
-
MSH_HAS_SKELETON_8 as a,
|
|
335
|
-
MSH_HAS_MORPH_TARGETS as b,
|
|
336
|
-
MSH_HAS_UV2 as c,
|
|
337
|
-
MSH_HAS_TANGENTS as d,
|
|
338
|
-
composeShader as e,
|
|
339
|
-
MSH_RECEIVE_SHADOWS as f,
|
|
340
|
-
MSH_HAS_THIN_INSTANCES as g,
|
|
341
|
-
MSH_HAS_VERTEX_COLOR as h,
|
|
342
|
-
MSH_HAS_INSTANCE_COLOR as i
|
|
291
|
+
composeShader as c
|
|
343
292
|
};
|
|
344
|
-
//# sourceMappingURL=
|
|
293
|
+
//# sourceMappingURL=shader-composer-CZagsJDS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-composer-CZagsJDS.js","sources":["../src/shader/shader-composer.ts"],"sourcesContent":["/**\n * Shader Composer — assembles ShaderFragment[] + ShaderTemplate into\n * final WGSL source + GPU layout descriptors. Pure function, no global state.\n * All shader text comes from template + fragment modules.\n */\nimport type { BindingDecl, ComposedShader, FragmentSlot, ShaderFragment, ShaderTemplate, VertexAttribute, VertexSlot, Varying } from \"./fragment-types.js\";\nimport { computeUboLayout } from \"./ubo-layout.js\";\nimport { SCENE_UBO_WGSL } from \"./scene-uniforms.js\";\n\nconst STAGE_VERTEX = 0x1;\nconst STAGE_FRAGMENT = 0x2;\n\nfunction topoSort(fragments: readonly ShaderFragment[]): ShaderFragment[] {\n const byId = new Map<string, ShaderFragment>();\n for (const f of fragments) {\n if (byId.has(f._id)) {\n throw Error();\n }\n byId.set(f._id, f);\n }\n const inDeg = new Map<string, number>();\n const deps = new Map<string, string[]>();\n for (const f of fragments) {\n if (!inDeg.has(f._id)) {\n inDeg.set(f._id, 0);\n }\n for (const d of f._dependencies ?? []) {\n if (!byId.has(d)) {\n throw Error();\n }\n inDeg.set(f._id, (inDeg.get(f._id) ?? 0) + 1);\n let arr = deps.get(d);\n if (!arr) {\n arr = [];\n deps.set(d, arr);\n }\n arr.push(f._id);\n }\n }\n const q: string[] = [];\n for (const [id, d] of inDeg) {\n if (d === 0) {\n q.push(id);\n }\n }\n q.sort();\n const out: ShaderFragment[] = [];\n let qi = 0;\n while (qi < q.length) {\n const id = q[qi++]!;\n out.push(byId.get(id)!);\n for (const d of deps.get(id) ?? []) {\n const nd = (inDeg.get(d) ?? 1) - 1;\n inDeg.set(d, nd);\n if (nd === 0) {\n let i = qi;\n while (i < q.length && q[i]! < d) {\n i++;\n }\n q.splice(i, 0, d);\n }\n }\n }\n if (out.length !== fragments.length) {\n throw Error();\n }\n return out;\n}\n\nfunction dedup<T extends { _name: string }>(base: readonly T[], extra: readonly T[]): T[] {\n const seen = new Set<string>();\n const all: T[] = [];\n for (const v of base) {\n if (!seen.has(v._name)) {\n seen.add(v._name);\n all.push(v);\n }\n }\n for (const v of extra) {\n if (!seen.has(v._name)) {\n seen.add(v._name);\n all.push(v);\n }\n }\n return all;\n}\n\nfunction bglEntry(binding: number, decl: BindingDecl): GPUBindGroupLayoutEntry {\n const e: GPUBindGroupLayoutEntry = { binding, visibility: decl._visibility };\n switch (decl._type._kind) {\n case \"uniform-buffer\":\n e.buffer = { type: \"uniform\" };\n break;\n case \"texture\": {\n const def = decl._type._textureType === \"texture_depth_2d\" ? \"depth\" : decl._type._textureType === \"texture_2d<u32>\" ? \"uint\" : \"float\";\n e.texture = {\n sampleType: (decl._type._sampleType ?? def) as GPUTextureSampleType,\n viewDimension: decl._type._textureType.includes(\"array\") ? \"2d-array\" : decl._type._textureType.includes(\"cube\") ? \"cube\" : \"2d\",\n };\n break;\n }\n case \"sampler\":\n e.sampler = {\n type: decl._type._samplerType === \"sampler_comparison\" ? \"comparison\" : decl._type._samplerType === \"sampler_non_filtering\" ? \"non-filtering\" : \"filtering\",\n };\n break;\n case \"storage-texture\":\n e.storageTexture = { access: decl._type._access as GPUStorageTextureAccess, format: decl._type._format as GPUTextureFormat };\n break;\n }\n return e;\n}\n\nfunction declWGSL(g: number, b: number, d: BindingDecl): string {\n switch (d._type._kind) {\n case \"uniform-buffer\":\n return `@group(${g})@binding(${b}) var<uniform> ${d._name}:${d._name}Uniforms;`;\n case \"texture\":\n return `@group(${g})@binding(${b}) var ${d._name}:${d._type._textureType};`;\n case \"sampler\":\n return `@group(${g})@binding(${b}) var ${d._name}:${d._type._samplerType === \"sampler_non_filtering\" ? \"sampler\" : d._type._samplerType};`;\n case \"storage-texture\":\n return `@group(${g})@binding(${b}) var ${d._name}:texture_storage_2d<${d._type._format},${d._type._access}>;`;\n }\n}\n\nconst SLOT_RE = /\\/\\*([A-Z_0-9]+)\\*\\//g;\nfunction injectSlots(tpl: string, sorted: readonly ShaderFragment[], key: \"_fragmentSlots\" | \"_vertexSlots\"): string {\n return tpl.replace(SLOT_RE, (_, slot: string) => {\n const parts: string[] = [];\n for (const f of sorted) {\n const s = f[key] as Partial<Record<FragmentSlot | VertexSlot, string>> | undefined;\n if (s?.[slot as FragmentSlot | VertexSlot]) {\n parts.push(s[slot as FragmentSlot | VertexSlot]!);\n }\n }\n return parts.join(\"\\n\");\n });\n}\n\nexport function composeShader(template: ShaderTemplate, fragments: readonly ShaderFragment[]): ComposedShader {\n const sorted = topoSort(fragments);\n\n // Collect fragment data\n const fragAttrs: VertexAttribute[] = [];\n const fragVaryings: Varying[] = [];\n const helpers: string[] = [];\n const vHelpers: string[] = [];\n const vBuiltins: string[] = [];\n for (const f of sorted) {\n if (f._vertexAttributes) {\n fragAttrs.push(...f._vertexAttributes);\n }\n if (f._varyings) {\n fragVaryings.push(...f._varyings);\n }\n if (f._helperFunctions) {\n helpers.push(f._helperFunctions);\n }\n if (f._vertexHelperFunctions) {\n vHelpers.push(f._vertexHelperFunctions);\n }\n for (const b of f._vertexBuiltins ?? []) {\n vBuiltins.push(`@builtin(${b._builtin}) ${b._name}:${b._type},`);\n }\n }\n\n // Vertex attributes + layouts\n const allAttrs = dedup(template._baseVertexAttributes, fragAttrs);\n const inputLines: string[] = [];\n const _vertexBufferLayouts: GPUVertexBufferLayout[] = [];\n const groups = new Map<string, { loc: number; off: number; fmt: GPUVertexFormat }[]>();\n const firstOfGroup = new Map<string, VertexAttribute>();\n for (let i = 0; i < allAttrs.length; i++) {\n const a = allAttrs[i]!;\n inputLines.push(`@location(${i}) ${a._name}:${a._type},`);\n if (a._bufferGroup) {\n if (!groups.has(a._bufferGroup)) {\n groups.set(a._bufferGroup, []);\n firstOfGroup.set(a._bufferGroup, a);\n }\n groups.get(a._bufferGroup)!.push({ loc: i, off: a._offset ?? 0, fmt: a._gpuFormat });\n } else {\n _vertexBufferLayouts.push({\n arrayStride: a._arrayStride,\n stepMode: a._stepMode ?? \"vertex\",\n attributes: [{ shaderLocation: i, offset: a._offset ?? 0, format: a._gpuFormat }],\n });\n }\n }\n for (const [grp, attrs] of groups) {\n const f = firstOfGroup.get(grp)!;\n _vertexBufferLayouts.push({\n arrayStride: f._arrayStride,\n stepMode: f._stepMode ?? \"vertex\",\n attributes: attrs.map((a) => ({ shaderLocation: a.loc, offset: a.off, format: a.fmt })),\n });\n }\n let nextLoc = allAttrs.length;\n for (const f of sorted) {\n if (f._pipelineVertexBuffers) {\n const r = f._pipelineVertexBuffers(nextLoc);\n _vertexBufferLayouts.push(...r._buffers);\n nextLoc = r._nextLoc;\n }\n }\n\n // Varyings\n const allVary = dedup(template._baseVaryings, fragVaryings);\n const varyBody = `@builtin(position) clipPos:vec4f,\\n` + allVary.map((v, i) => `@location(${i}) ${v._name}:${v._type},`).join(\"\\n\");\n\n // UBO layouts\n const hasMaterialUbo = !!(template._baseMaterialUboFields && template._baseMaterialUboFields.length > 0);\n const meshFields = [...template._baseMeshUboFields];\n const materialFields = hasMaterialUbo ? [...template._baseMaterialUboFields] : [];\n for (const f of sorted) {\n if (f._uboFields?.length) {\n (hasMaterialUbo ? materialFields : meshFields).push(...f._uboFields);\n }\n }\n const _meshUboSpec = computeUboLayout(meshFields);\n const _materialUboSpec = hasMaterialUbo ? computeUboLayout(materialFields) : undefined;\n\n // Bindings\n const meshBGL: GPUBindGroupLayoutEntry[] = [{ binding: 0, visibility: STAGE_VERTEX | STAGE_FRAGMENT, buffer: { type: \"uniform\" } }];\n if (hasMaterialUbo) {\n meshBGL.push({ binding: 1, visibility: STAGE_FRAGMENT, buffer: { type: \"uniform\" } });\n }\n const shadowBGL: GPUBindGroupLayoutEntry[] = [];\n const vDecls: string[] = [];\n const fDecls: string[] = [];\n let mb = hasMaterialUbo ? 2 : 1,\n sb = 0;\n\n function addBinding(d: BindingDecl, _isVertex: boolean) {\n const isShadow = d._group === \"shadow\";\n const b = isShadow ? sb++ : mb++;\n const g = isShadow ? 2 : 1;\n (isShadow ? shadowBGL : meshBGL).push(bglEntry(b, d));\n const w = declWGSL(g, b, d);\n if (d._visibility & STAGE_VERTEX) {\n vDecls.push(w);\n }\n if (d._visibility & STAGE_FRAGMENT) {\n fDecls.push(w);\n }\n }\n\n for (const d of template._baseVertexBindings ?? []) {\n addBinding(d, true);\n }\n for (const f of sorted) {\n for (const d of f._vertexBindings ?? []) {\n addBinding(d, true);\n }\n }\n for (const d of template._baseBindings ?? []) {\n addBinding(d, false);\n }\n for (const f of sorted) {\n for (const d of (f._bindings ?? []).filter((b) => (b._group ?? \"mesh\") === \"mesh\")) {\n addBinding(d, false);\n }\n }\n for (const f of sorted) {\n for (const d of (f._bindings ?? []).filter((b) => b._group === \"shadow\")) {\n addBinding(d, false);\n }\n }\n\n const _fragmentKey = sorted.map((f) => f._id).join(\"|\");\n const vParams = (vBuiltins.length ? vBuiltins.join(\"\\n\") + \"\\n\" : \"\") + inputLines.join(\"\\n\");\n const meshStruct = `struct MeshUniforms{\\n${_meshUboSpec._structBody}\\n}`;\n const materialStruct = _materialUboSpec ? `\\nstruct MaterialUniforms{\\n${_materialUboSpec._structBody}\\n}\\n@group(1)@binding(1) var<uniform> material:MaterialUniforms;` : \"\";\n\n let _vertexWGSL = template._vertexTemplate;\n _vertexWGSL = _vertexWGSL.replace(\"/*SU*/\", SCENE_UBO_WGSL);\n _vertexWGSL = _vertexWGSL.replace(\"/*MU*/\", meshStruct);\n _vertexWGSL = _vertexWGSL.replace(\"/*VI*/\", `struct VertexInput{\\n${inputLines.join(\"\\n\")}\\n}`);\n _vertexWGSL = _vertexWGSL.replace(\"/*VO*/\", `struct VertexOutput{\\n${varyBody}\\n}`);\n _vertexWGSL = _vertexWGSL.replace(\"/*VD*/\", vDecls.join(\"\\n\"));\n _vertexWGSL = _vertexWGSL.replace(\"/*VP*/\", vParams);\n _vertexWGSL = _vertexWGSL.replace(\"/*VH*/\", vHelpers.join(\"\\n\"));\n // These dynamic keys are reserved from Terser property mangling in bundle-scenes-core.ts.\n _vertexWGSL = injectSlots(_vertexWGSL, sorted, \"_vertexSlots\");\n\n let _fragmentWGSL = template._fragmentTemplate;\n _fragmentWGSL = _fragmentWGSL.replace(\"/*SU*/\", SCENE_UBO_WGSL);\n _fragmentWGSL = _fragmentWGSL.replace(\"/*MU*/\", meshStruct + materialStruct);\n _fragmentWGSL = _fragmentWGSL.replace(\"/*FI*/\", `struct FragmentInput{\\n${varyBody}\\n}`);\n _fragmentWGSL = _fragmentWGSL.replace(\"/*HF*/\", helpers.join(\"\\n\"));\n _fragmentWGSL = _fragmentWGSL.replace(\"/*FB*/\", fDecls.join(\"\\n\"));\n _fragmentWGSL = injectSlots(_fragmentWGSL, sorted, \"_fragmentSlots\");\n\n const _meshBGLDescriptor = { entries: meshBGL };\n const _shadowBGLDescriptor = shadowBGL.length ? { entries: shadowBGL } : null;\n\n return {\n _vertexWGSL,\n _fragmentWGSL,\n _meshBGLDescriptor,\n _shadowBGLDescriptor,\n _vertexBufferLayouts,\n _meshUboSpec,\n _materialUboSpec,\n _fragmentKey,\n };\n}\n"],"names":[],"mappings":"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"}
|