@babylonjs/lite 0.1.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/_math-factory-C-QqW-Wi.js +55 -0
- package/_math-factory-C-QqW-Wi.js.map +1 -0
- package/add-block-CikX5gWy.js +6 -0
- package/add-block-CikX5gWy.js.map +1 -0
- package/alpha-test-fragment-CUiHCw7W.js +22 -0
- package/alpha-test-fragment-CUiHCw7W.js.map +1 -0
- package/ambient-occlusion-block-DForhWL3.js +77 -0
- package/ambient-occlusion-block-DForhWL3.js.map +1 -0
- package/anisotropy-block-D5fXH_OY.js +12 -0
- package/anisotropy-block-D5fXH_OY.js.map +1 -0
- package/anisotropy-fragment-HgasXS7l.js +89 -0
- package/anisotropy-fragment-HgasXS7l.js.map +1 -0
- package/arc-tan2-block-d8sWt_x0.js +12 -0
- package/arc-tan2-block-d8sWt_x0.js.map +1 -0
- package/assets/splat-sort-worker-Crg3CaCc.js.map +1 -0
- package/background-dds-skybox-yHTqabU3.js +221 -0
- package/background-dds-skybox-yHTqabU3.js.map +1 -0
- package/background-ground-DIw6D3qf.js +235 -0
- package/background-ground-DIw6D3qf.js.map +1 -0
- package/background-hdr-skybox-c4uuTmkP.js +179 -0
- package/background-hdr-skybox-c4uuTmkP.js.map +1 -0
- package/background-solid-skybox-DPGBpPbm.js +235 -0
- package/background-solid-skybox-DPGBpPbm.js.map +1 -0
- package/bake-local-matrix-Dfpd3b06.js +28 -0
- package/bake-local-matrix-Dfpd3b06.js.map +1 -0
- package/billboard-renderable-D8mlVGCd.js +242 -0
- package/billboard-renderable-D8mlVGCd.js.map +1 -0
- package/biplanar-block-DZnKuV81.js +115 -0
- package/biplanar-block-DZnKuV81.js.map +1 -0
- package/bones-block-D6IhqUVV.js +31 -0
- package/bones-block-D6IhqUVV.js.map +1 -0
- package/clamp-block-BdII67hT.js +21 -0
- package/clamp-block-BdII67hT.js.map +1 -0
- package/clearcoat-block-BGML4npi.js +12 -0
- package/clearcoat-block-BGML4npi.js.map +1 -0
- package/clearcoat-fragment-LCiG98Rf.js +256 -0
- package/clearcoat-fragment-LCiG98Rf.js.map +1 -0
- package/clip-planes-block-BPfFJrbf.js +26 -0
- package/clip-planes-block-BPfFJrbf.js.map +1 -0
- package/cloud-block-BeVrangc.js +90 -0
- package/cloud-block-BeVrangc.js.map +1 -0
- package/color-converter-block-CvwKiW4k.js +123 -0
- package/color-converter-block-CvwKiW4k.js.map +1 -0
- package/color-merger-CCu21ZII.js +57 -0
- package/color-merger-CCu21ZII.js.map +1 -0
- package/color-splitter-CGn1G4ow.js +33 -0
- package/color-splitter-CGn1G4ow.js.map +1 -0
- package/conditional-block-Cd2pbejI.js +51 -0
- package/conditional-block-Cd2pbejI.js.map +1 -0
- package/create-skeleton-C9JdIJnb.js +44 -0
- package/create-skeleton-C9JdIJnb.js.map +1 -0
- package/cross-block-DCrLwCpt.js +12 -0
- package/cross-block-DCrLwCpt.js.map +1 -0
- package/cubemap-skybox-material-DvXMVc4k.js +79 -0
- package/cubemap-skybox-material-DvXMVc4k.js.map +1 -0
- package/curve-block-BlJpXVYv.js +89 -0
- package/curve-block-BlJpXVYv.js.map +1 -0
- package/debug-block-D2pg4Yf6.js +14 -0
- package/debug-block-D2pg4Yf6.js.map +1 -0
- package/derivative-block-B8KjtaWs.js +20 -0
- package/derivative-block-B8KjtaWs.js.map +1 -0
- package/desaturate-block-C1RghNSB.js +15 -0
- package/desaturate-block-C1RghNSB.js.map +1 -0
- package/discard-block-B2jKjaEL.js +21 -0
- package/discard-block-B2jKjaEL.js.map +1 -0
- package/distance-block-3NkgFZ3f.js +16 -0
- package/distance-block-3NkgFZ3f.js.map +1 -0
- package/divide-block-ZyepIg_-.js +6 -0
- package/divide-block-ZyepIg_-.js.map +1 -0
- package/dot-block-VlfAC6cD.js +16 -0
- package/dot-block-VlfAC6cD.js.map +1 -0
- package/elbow-block-NEOiIxzO.js +10 -0
- package/elbow-block-NEOiIxzO.js.map +1 -0
- package/emissive-fragment-BnNvbBCw.js +39 -0
- package/emissive-fragment-BnNvbBCw.js.map +1 -0
- package/esm-shadow-view-DGKdF1NI.js +18 -0
- package/esm-shadow-view-DGKdF1NI.js.map +1 -0
- package/esm-shadow-view-DN9HIaM4.js +15 -0
- package/esm-shadow-view-DN9HIaM4.js.map +1 -0
- package/esm-shadow-view-Dk9NFtLq.js +15 -0
- package/esm-shadow-view-Dk9NFtLq.js.map +1 -0
- package/fog-block-DJ9hEolm.js +41 -0
- package/fog-block-DJ9hEolm.js.map +1 -0
- package/frag-coord-block-DzXfFgfV.js +25 -0
- package/frag-coord-block-DzXfFgfV.js.map +1 -0
- package/frag-depth-block-UQbeKP2D.js +34 -0
- package/frag-depth-block-UQbeKP2D.js.map +1 -0
- package/fragment-output-BOphkIeh.js +26 -0
- package/fragment-output-BOphkIeh.js.map +1 -0
- package/fresnel-block-DefHWeO-.js +20 -0
- package/fresnel-block-DefHWeO-.js.map +1 -0
- package/front-facing-0d6aiyrv.js +11 -0
- package/front-facing-0d6aiyrv.js.map +1 -0
- package/gaussian-splatting-pipeline-sh-DgJl7l56.js +500 -0
- package/gaussian-splatting-pipeline-sh-DgJl7l56.js.map +1 -0
- package/gltf-animation-D7uyTyO3.js +245 -0
- package/gltf-animation-D7uyTyO3.js.map +1 -0
- package/gltf-ext-anisotropy-CknJiJK8.js +22 -0
- package/gltf-ext-anisotropy-CknJiJK8.js.map +1 -0
- package/gltf-ext-basisu-CPg5kPrx.js +452 -0
- package/gltf-ext-basisu-CPg5kPrx.js.map +1 -0
- package/gltf-ext-clearcoat-CLH2SVph.js +31 -0
- package/gltf-ext-clearcoat-CLH2SVph.js.map +1 -0
- package/gltf-ext-dielectric-qHzlnvdl.js +105 -0
- package/gltf-ext-dielectric-qHzlnvdl.js.map +1 -0
- package/gltf-ext-emissive-strength-nzGZXZVK.js +19 -0
- package/gltf-ext-emissive-strength-nzGZXZVK.js.map +1 -0
- package/gltf-ext-iridescence-C6bq7jiM.js +26 -0
- package/gltf-ext-iridescence-C6bq7jiM.js.map +1 -0
- package/gltf-ext-node-visibility-MafA9ot2.js +25 -0
- package/gltf-ext-node-visibility-MafA9ot2.js.map +1 -0
- package/gltf-ext-orm-CT18G_vQ.js +33 -0
- package/gltf-ext-orm-CT18G_vQ.js.map +1 -0
- package/gltf-ext-quantization-CpZyLDIz.js +94 -0
- package/gltf-ext-quantization-CpZyLDIz.js.map +1 -0
- package/gltf-ext-sheen-BgIxUzyZ.js +25 -0
- package/gltf-ext-sheen-BgIxUzyZ.js.map +1 -0
- package/gltf-ext-spec-gloss-D0LJLBUM.js +24 -0
- package/gltf-ext-spec-gloss-D0LJLBUM.js.map +1 -0
- package/gltf-ext-unlit-D2ANui0V.js +16 -0
- package/gltf-ext-unlit-D2ANui0V.js.map +1 -0
- package/gltf-ext-uv-transform-CE_-T1Tr.js +38 -0
- package/gltf-ext-uv-transform-CE_-T1Tr.js.map +1 -0
- package/gltf-feature-animation-pointer-BjpwOOqo.js +88 -0
- package/gltf-feature-animation-pointer-BjpwOOqo.js.map +1 -0
- package/gltf-feature-animations-CCizegp8.js +15 -0
- package/gltf-feature-animations-CCizegp8.js.map +1 -0
- package/gltf-feature-draco-yGSMGTE3.js +124 -0
- package/gltf-feature-draco-yGSMGTE3.js.map +1 -0
- package/gltf-feature-gpu-instancing-2e_CFQnl.js +151 -0
- package/gltf-feature-gpu-instancing-2e_CFQnl.js.map +1 -0
- package/gltf-feature-lights-punctual-DDDg4j0U.js +71 -0
- package/gltf-feature-lights-punctual-DDDg4j0U.js.map +1 -0
- package/gltf-feature-meshopt-Des96YFI.js +84 -0
- package/gltf-feature-meshopt-Des96YFI.js.map +1 -0
- package/gltf-feature-morph-CKCw6tkX.js +29 -0
- package/gltf-feature-morph-CKCw6tkX.js.map +1 -0
- package/gltf-feature-skeleton-D8hWLqi2.js +36 -0
- package/gltf-feature-skeleton-D8hWLqi2.js.map +1 -0
- package/gltf-feature-variants-Ds6v9byg.js +17 -0
- package/gltf-feature-variants-Ds6v9byg.js.map +1 -0
- package/gltf-feature-xmp-BUfq_IVG.js +15 -0
- package/gltf-feature-xmp-BUfq_IVG.js.map +1 -0
- package/gltf-glb-parser-D6UZWFuC.js +27 -0
- package/gltf-glb-parser-D6UZWFuC.js.map +1 -0
- package/gltf-interleave-DGnUlz28.js +241 -0
- package/gltf-interleave-DGnUlz28.js.map +1 -0
- package/gltf-pbr-builder-ext-BFOxOCnQ.js +85 -0
- package/gltf-pbr-builder-ext-BFOxOCnQ.js.map +1 -0
- package/gltf-variants-DFbr8EES.js +88 -0
- package/gltf-variants-DFbr8EES.js.map +1 -0
- package/gradient-block-DL_60sDc.js +50 -0
- package/gradient-block-DL_60sDc.js.map +1 -0
- package/gs-picking-pipeline-DzfMASL9.js +280 -0
- package/gs-picking-pipeline-DzfMASL9.js.map +1 -0
- package/height-to-normal-block-DhPHkDFg.js +65 -0
- package/height-to-normal-block-DhPHkDFg.js.map +1 -0
- package/ibl-fragment-DqQVi8k0.js +91 -0
- package/ibl-fragment-DqQVi8k0.js.map +1 -0
- package/ibl-skybox-wgsl-DCah0kWV.js +13 -0
- package/ibl-skybox-wgsl-DCah0kWV.js.map +1 -0
- package/image-processing-block-DwrhhmuF.js +40 -0
- package/image-processing-block-DwrhhmuF.js.map +1 -0
- package/image-source-BuMJgd9-.js +17 -0
- package/image-source-BuMJgd9-.js.map +1 -0
- package/index-C8HOR2sB.js +19222 -0
- package/index-C8HOR2sB.js.map +1 -0
- package/index.d.ts +4611 -0
- package/index.js +309 -0
- package/index.js.map +1 -0
- package/input-block-DgAJBzN_.js +109 -0
- package/input-block-DgAJBzN_.js.map +1 -0
- package/instances-block-BaSSiz8m.js +12 -0
- package/instances-block-BaSSiz8m.js.map +1 -0
- package/iridescence-block-B0pRFoOU.js +67 -0
- package/iridescence-block-B0pRFoOU.js.map +1 -0
- package/iridescence-fragment-Gymp7or5.js +243 -0
- package/iridescence-fragment-Gymp7or5.js.map +1 -0
- package/length-block-ChOkeiHR.js +11 -0
- package/length-block-ChOkeiHR.js.map +1 -0
- package/lerp-block-DjI2SfmI.js +18 -0
- package/lerp-block-DjI2SfmI.js.map +1 -0
- package/light-block-B11ew7FA.js +123 -0
- package/light-block-B11ew7FA.js.map +1 -0
- package/light-information-VJbW0jbs.js +19 -0
- package/light-information-VJbW0jbs.js.map +1 -0
- package/loop-block-Bb23EOMb.js +71 -0
- package/loop-block-Bb23EOMb.js.map +1 -0
- package/manifold-AS8POaOr.js +3022 -0
- package/manifold-AS8POaOr.js.map +1 -0
- package/manifold-RCa7RkKz.js +5 -0
- package/manifold-RCa7RkKz.js.map +1 -0
- package/matrix-blocks-acWn_V6g.js +51 -0
- package/matrix-blocks-acWn_V6g.js.map +1 -0
- package/max-block-CjFgljZ7.js +6 -0
- package/max-block-CjFgljZ7.js.map +1 -0
- package/mesh-attribute-exists-block-BfK8UiSL.js +44 -0
- package/mesh-attribute-exists-block-BfK8UiSL.js.map +1 -0
- package/mesh-features-BLENkYVt.js +341 -0
- package/mesh-features-BLENkYVt.js.map +1 -0
- package/min-block-CHtBngNl.js +6 -0
- package/min-block-CHtBngNl.js.map +1 -0
- package/mod-block-Ceizv8Y7.js +6 -0
- package/mod-block-Ceizv8Y7.js.map +1 -0
- package/morph-fragment-DOVo70gP.js +59 -0
- package/morph-fragment-DOVo70gP.js.map +1 -0
- package/morph-targets-55z342ZB.js +35 -0
- package/morph-targets-55z342ZB.js.map +1 -0
- package/multilight-wgsl-BGyiIOp3.js +112 -0
- package/multilight-wgsl-BGyiIOp3.js.map +1 -0
- package/multiply-block-DaXLJ7Ud.js +6 -0
- package/multiply-block-DaXLJ7Ud.js.map +1 -0
- package/negate-block-9CSLc5pM.js +6 -0
- package/negate-block-9CSLc5pM.js.map +1 -0
- package/nlerp-block-BNK1adIb.js +21 -0
- package/nlerp-block-BNK1adIb.js.map +1 -0
- package/node-env-BPZXZzBf.js +39 -0
- package/node-env-BPZXZzBf.js.map +1 -0
- package/node-registry-DwgC4yth.js +190 -0
- package/node-registry-DwgC4yth.js.map +1 -0
- package/node-registry-extra-advanced-2DJVt67-.js +45 -0
- package/node-registry-extra-advanced-2DJVt67-.js.map +1 -0
- package/node-registry-extra-compat-Dhrw8fDQ.js +41 -0
- package/node-registry-extra-compat-Dhrw8fDQ.js.map +1 -0
- package/node-registry-extra-math-CsAHvIZo.js +49 -0
- package/node-registry-extra-math-CsAHvIZo.js.map +1 -0
- package/node-registry-extra-procedural-5pLQ3Bhz.js +45 -0
- package/node-registry-extra-procedural-5pLQ3Bhz.js.map +1 -0
- package/node-renderable-DlLIdBmd.js +269 -0
- package/node-renderable-DlLIdBmd.js.map +1 -0
- package/node-shadow-DKrcqmNg.js +122 -0
- package/node-shadow-DKrcqmNg.js.map +1 -0
- package/node-snippet-DUMm9qEO.js +22 -0
- package/node-snippet-DUMm9qEO.js.map +1 -0
- package/normal-blend-block-BfH_nBoj.js +29 -0
- package/normal-blend-block-BfH_nBoj.js.map +1 -0
- package/normal-map-fragment-DpsIXrJf.js +38 -0
- package/normal-map-fragment-DpsIXrJf.js.map +1 -0
- package/normalize-block-F2bLNj9K.js +6 -0
- package/normalize-block-F2bLNj9K.js.map +1 -0
- package/oneminus-block-BP9x4Dc3.js +6 -0
- package/oneminus-block-BP9x4Dc3.js.map +1 -0
- package/opposite-block-Cnqmm-lH.js +6 -0
- package/opposite-block-Cnqmm-lH.js.map +1 -0
- package/package.json +26 -0
- package/panner-block-BwMQq-6Y.js +13 -0
- package/panner-block-BwMQq-6Y.js.map +1 -0
- package/parse-camera-DM3oJJeT.js +23 -0
- package/parse-camera-DM3oJJeT.js.map +1 -0
- package/pbr-aces-wgsl-HpiQHGN_.js +13 -0
- package/pbr-aces-wgsl-HpiQHGN_.js.map +1 -0
- package/pbr-metallic-roughness-block-full-6vMm1Jk6.js +763 -0
- package/pbr-metallic-roughness-block-full-6vMm1Jk6.js.map +1 -0
- package/pbr-metallic-roughness-block-h_KAOZrW.js +104 -0
- package/pbr-metallic-roughness-block-h_KAOZrW.js.map +1 -0
- package/pbr-mr-helper-core-CIwm-T1G.js +237 -0
- package/pbr-mr-helper-core-CIwm-T1G.js.map +1 -0
- package/pbr-refraction-DGmMSa2v.js +17 -0
- package/pbr-refraction-DGmMSa2v.js.map +1 -0
- package/pbr-renderable-BJxUtPBb.js +961 -0
- package/pbr-renderable-BJxUtPBb.js.map +1 -0
- package/pbr-shadow-fragment-LO9SlbJj.js +14 -0
- package/pbr-shadow-fragment-LO9SlbJj.js.map +1 -0
- package/pbr-template-ext-8q7BcTDf.js +88 -0
- package/pbr-template-ext-8q7BcTDf.js.map +1 -0
- package/pbr-tracking-B3alzn91.js +31 -0
- package/pbr-tracking-B3alzn91.js.map +1 -0
- package/pbr-transmission-ext-BxW4CEGu.js +581 -0
- package/pbr-transmission-ext-BxW4CEGu.js.map +1 -0
- package/perturb-normal-0Q8EM9ig.js +39 -0
- package/perturb-normal-0Q8EM9ig.js.map +1 -0
- package/posterize-block-DfdKsbEf.js +28 -0
- package/posterize-block-DfdKsbEf.js.map +1 -0
- package/pow-block-DI5ICzhc.js +13 -0
- package/pow-block-DI5ICzhc.js.map +1 -0
- package/random-number-block-2OyRYljF.js +15 -0
- package/random-number-block-2OyRYljF.js.map +1 -0
- package/reciprocal-block-Ck3CW-j-.js +14 -0
- package/reciprocal-block-Ck3CW-j-.js.map +1 -0
- package/reflect-block-CizpzrX4.js +12 -0
- package/reflect-block-CizpzrX4.js.map +1 -0
- package/reflectance-fragment-BCrgPmrt.js +143 -0
- package/reflectance-fragment-BCrgPmrt.js.map +1 -0
- package/reflection-block-DqcwyYqr.js +12 -0
- package/reflection-block-DqcwyYqr.js.map +1 -0
- package/reflection-texture-base-block-1xmJ0HDj.js +10 -0
- package/reflection-texture-base-block-1xmJ0HDj.js.map +1 -0
- package/reflection-texture-block-C3QtzoV8.js +60 -0
- package/reflection-texture-block-C3QtzoV8.js.map +1 -0
- package/refract-block-HHiAk-7U.js +13 -0
- package/refract-block-HHiAk-7U.js.map +1 -0
- package/refraction-block-U8y6XiXs.js +11 -0
- package/refraction-block-U8y6XiXs.js.map +1 -0
- package/refraction-dispersion-wgsl-DdQCyyO1.js +16 -0
- package/refraction-dispersion-wgsl-DdQCyyO1.js.map +1 -0
- package/remap-block-DxK1W1vp.js +27 -0
- package/remap-block-DxK1W1vp.js.map +1 -0
- package/replace-color-block-1m--hiru.js +17 -0
- package/replace-color-block-1m--hiru.js.map +1 -0
- package/rgbd-decode-DCvzUYeI.js +110 -0
- package/rgbd-decode-DCvzUYeI.js.map +1 -0
- package/rotate2d-block-nEe1N2MJ.js +15 -0
- package/rotate2d-block-nEe1N2MJ.js.map +1 -0
- package/scale-block-C5Z8159G.js +13 -0
- package/scale-block-C5Z8159G.js.map +1 -0
- package/scene-material-swap-C2ykv55W.js +34 -0
- package/scene-material-swap-C2ykv55W.js.map +1 -0
- package/screen-size-block-BVNnOvE8.js +21 -0
- package/screen-size-block-BVNnOvE8.js.map +1 -0
- package/screen-space-block-CwaxdfSe.js +28 -0
- package/screen-space-block-CwaxdfSe.js.map +1 -0
- package/shader-renderable-D-6796KR.js +531 -0
- package/shader-renderable-D-6796KR.js.map +1 -0
- package/shadow-fragment-core-DHN2G6FI.js +110 -0
- package/shadow-fragment-core-DHN2G6FI.js.map +1 -0
- package/shadow-map-CQNQC-Fw.js +13 -0
- package/shadow-map-CQNQC-Fw.js.map +1 -0
- package/sheen-block-BugfJqK3.js +12 -0
- package/sheen-block-BugfJqK3.js.map +1 -0
- package/sheen-fragment-Dze2f7XJ.js +215 -0
- package/sheen-fragment-Dze2f7XJ.js.map +1 -0
- package/simplex-perlin-3d-block-CcMtofzV.js +58 -0
- package/simplex-perlin-3d-block-CcMtofzV.js.map +1 -0
- package/singlelight-directional-wgsl-CmUDZxwz.js +39 -0
- package/singlelight-directional-wgsl-CmUDZxwz.js.map +1 -0
- package/singlelight-hemispheric-wgsl-t-83IP_s.js +40 -0
- package/singlelight-hemispheric-wgsl-t-83IP_s.js.map +1 -0
- package/singlelight-point-wgsl-CLzULIYV.js +45 -0
- package/singlelight-point-wgsl-CLzULIYV.js.map +1 -0
- package/singlelight-spot-wgsl-DEEUrfVM.js +47 -0
- package/singlelight-spot-wgsl-DEEUrfVM.js.map +1 -0
- package/skeleton-fragment-B_XlFbtx.js +71 -0
- package/skeleton-fragment-B_XlFbtx.js.map +1 -0
- package/skybox-renderable-DDwzu-PT.js +92 -0
- package/skybox-renderable-DDwzu-PT.js.map +1 -0
- package/skybox.vertex-DJgi072W.js +5 -0
- package/skybox.vertex-DJgi072W.js.map +1 -0
- package/smoothstep-block-Di4t37x-.js +15 -0
- package/smoothstep-block-Di4t37x-.js.map +1 -0
- package/splat-ply-compressed-BahdBG1r.js +394 -0
- package/splat-ply-compressed-BahdBG1r.js.map +1 -0
- package/standard-renderable-GjxL9xSf.js +636 -0
- package/standard-renderable-GjxL9xSf.js.map +1 -0
- package/std-ambient-fragment-BoUsD06w.js +37 -0
- package/std-ambient-fragment-BoUsD06w.js.map +1 -0
- package/std-cube-reflection-fragment-ulqc3bsP.js +31 -0
- package/std-cube-reflection-fragment-ulqc3bsP.js.map +1 -0
- package/std-emissive-fragment-DNGj1HdQ.js +40 -0
- package/std-emissive-fragment-DNGj1HdQ.js.map +1 -0
- package/std-lightmap-fragment-Bqj89aIe.js +37 -0
- package/std-lightmap-fragment-Bqj89aIe.js.map +1 -0
- package/std-opacity-fragment-KuPh5N2Z.js +37 -0
- package/std-opacity-fragment-KuPh5N2Z.js.map +1 -0
- package/std-reflection-fragment-BA5Ghn_M.js +57 -0
- package/std-reflection-fragment-BA5Ghn_M.js.map +1 -0
- package/std-shadow-fragment-FNQfrJuC.js +8 -0
- package/std-shadow-fragment-FNQfrJuC.js.map +1 -0
- package/std-specular-fragment-CE-6scqd.js +37 -0
- package/std-specular-fragment-CE-6scqd.js.map +1 -0
- package/std-tracking-CNKZ-hJN.js +15 -0
- package/std-tracking-CNKZ-hJN.js.map +1 -0
- package/step-block-BkywzTYm.js +13 -0
- package/step-block-BkywzTYm.js.map +1 -0
- package/storage-read-block-BdzhJfln.js +25 -0
- package/storage-read-block-BdzhJfln.js.map +1 -0
- package/storage-write-block-DjLKZ0Ro.js +11 -0
- package/storage-write-block-DjLKZ0Ro.js.map +1 -0
- package/subsurface-block-CBhxT9ui.js +12 -0
- package/subsurface-block-CBhxT9ui.js.map +1 -0
- package/subsurface-fragment-liM3y2-P.js +158 -0
- package/subsurface-fragment-liM3y2-P.js.map +1 -0
- package/subtract-block-NPfKvzQP.js +6 -0
- package/subtract-block-NPfKvzQP.js.map +1 -0
- package/swapchain-overlay-DcCSFDp7.js +35 -0
- package/swapchain-overlay-DcCSFDp7.js.map +1 -0
- package/tbn-block-ByOI6Y43.js +43 -0
- package/tbn-block-ByOI6Y43.js.map +1 -0
- package/teleport-in-block-BMa17cqq.js +10 -0
- package/teleport-in-block-BMa17cqq.js.map +1 -0
- package/teleport-out-block-5AkB25H6.js +19 -0
- package/teleport-out-block-5AkB25H6.js.map +1 -0
- package/texture-block-rr21KIL_.js +70 -0
- package/texture-block-rr21KIL_.js.map +1 -0
- package/thin-instance-fragment-hsv-RyDs.js +69 -0
- package/thin-instance-fragment-hsv-RyDs.js.map +1 -0
- package/thin-instance-gpu-C9Gv_Z1w.js +62 -0
- package/thin-instance-gpu-C9Gv_Z1w.js.map +1 -0
- package/tracking-primitives-wgdBY85t.js +82 -0
- package/tracking-primitives-wgdBY85t.js.map +1 -0
- package/transform-block-DbRph9JI.js +32 -0
- package/transform-block-DbRph9JI.js.map +1 -0
- package/trigonometry-block-BYQcTHiD.js +36 -0
- package/trigonometry-block-BYQcTHiD.js.map +1 -0
- package/triplanar-block-BZHkD9hX.js +148 -0
- package/triplanar-block-BZHkD9hX.js.map +1 -0
- package/twirl-block-78WtdiBd.js +39 -0
- package/twirl-block-78WtdiBd.js.map +1 -0
- package/unlit-fragment-BIlhJpz6.js +43 -0
- package/unlit-fragment-BIlhJpz6.js.map +1 -0
- package/uv-transform-fragment-hYujGpZg.js +47 -0
- package/uv-transform-fragment-hYujGpZg.js.map +1 -0
- package/vector-merger-CrW-ONB0.js +43 -0
- package/vector-merger-CrW-ONB0.js.map +1 -0
- package/vector-splitter-BoJuHrAU.js +34 -0
- package/vector-splitter-BoJuHrAU.js.map +1 -0
- package/vertex-output-Cvft64y0.js +14 -0
- package/vertex-output-Cvft64y0.js.map +1 -0
- package/view-direction-CWVucfnT.js +12 -0
- package/view-direction-CWVucfnT.js.map +1 -0
- package/voronoi-noise-block-iNQxa_Ls.js +43 -0
- package/voronoi-noise-block-iNQxa_Ls.js.map +1 -0
- package/wave-block-CY_mk1ec.js +41 -0
- package/wave-block-CY_mk1ec.js.map +1 -0
- package/wgsl-helpers-DyzNzCeE.js +48 -0
- package/wgsl-helpers-DyzNzCeE.js.map +1 -0
- package/worley-noise-3d-block-CyR2-k4s.js +58 -0
- package/worley-noise-3d-block-CyR2-k4s.js.map +1 -0
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
import { a_ as _isShaderSystemUniform, aV as computeUboLayout, D as targetSignatureKey, F as getSceneBindGroupLayout, aW as SCENE_UBO_WGSL, _ as createEmptyUniformBuffer, aU as acquireTexture, a$ as getEffectiveAspectRatio, K as getViewMatrix, L as getProjectionMatrix, b0 as getViewProjectionMatrix, l as mat4MultiplyInto, b1 as releaseTexture } from "./index-C8HOR2sB.js";
|
|
2
|
+
const SHADER_STAGE_ALL = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;
|
|
3
|
+
function getOrCreateShaderPipelineBindings(engine, material) {
|
|
4
|
+
const state = material;
|
|
5
|
+
if (state._shaderBindings && state._shaderDevice === engine._device) {
|
|
6
|
+
return state._shaderBindings;
|
|
7
|
+
}
|
|
8
|
+
state._shaderDevice = engine._device;
|
|
9
|
+
const systemFields = material.uniformDecls.filter((u) => _isShaderSystemUniform(u.name)).map(toUboField);
|
|
10
|
+
const customFields = material.uniformDecls.filter((u) => !_isShaderSystemUniform(u.name)).map(toUboField);
|
|
11
|
+
const systemSpec = computeUboLayout(systemFields.length > 0 ? systemFields : [{ _name: "_pad", _type: "vec4<f32>" }]);
|
|
12
|
+
const customSpec = customFields.length > 0 ? computeUboLayout(customFields) : null;
|
|
13
|
+
const group1BGL = engine._device.createBindGroupLayout({
|
|
14
|
+
label: "shader-material-group1",
|
|
15
|
+
entries: buildBindGroupLayoutEntries(material.samplerDecls, customSpec !== null)
|
|
16
|
+
});
|
|
17
|
+
const bindings = {
|
|
18
|
+
group1BGL,
|
|
19
|
+
systemSpec,
|
|
20
|
+
customSpec,
|
|
21
|
+
vertexBuffers: material.attributes.map(attributeLayout),
|
|
22
|
+
pipelines: /* @__PURE__ */ new Map()
|
|
23
|
+
};
|
|
24
|
+
state._shaderBindings = bindings;
|
|
25
|
+
state._shaderCustomSpec = customSpec;
|
|
26
|
+
state._shaderCustomUbo = null;
|
|
27
|
+
state._shaderCustomData = null;
|
|
28
|
+
state._shaderCustomVersion = -1;
|
|
29
|
+
return bindings;
|
|
30
|
+
}
|
|
31
|
+
function getOrCreateShaderPipeline(engine, sig, material, bindings) {
|
|
32
|
+
const key = targetSignatureKey(sig);
|
|
33
|
+
const cached = bindings.pipelines.get(key);
|
|
34
|
+
if (cached) {
|
|
35
|
+
return cached;
|
|
36
|
+
}
|
|
37
|
+
const device = engine._device;
|
|
38
|
+
const prelude = buildShaderPrelude(material, bindings.systemSpec, bindings.customSpec);
|
|
39
|
+
const vertModule = device.createShaderModule({ label: `${material.name ?? "shader"}-vertex`, code: `${prelude}
|
|
40
|
+
${material.vertexSource}` });
|
|
41
|
+
const fragModule = sig._colorFormat ? device.createShaderModule({ label: `${material.name ?? "shader"}-fragment`, code: `${prelude}
|
|
42
|
+
${material.fragmentSource}` }) : null;
|
|
43
|
+
const colorTarget = sig._colorFormat ? {
|
|
44
|
+
format: sig._colorFormat,
|
|
45
|
+
...material.needAlphaBlending ? {
|
|
46
|
+
blend: material.blendMode === "additive" ? {
|
|
47
|
+
color: { srcFactor: "src-alpha", dstFactor: "one", operation: "add" },
|
|
48
|
+
alpha: { srcFactor: "one", dstFactor: "one", operation: "add" }
|
|
49
|
+
} : {
|
|
50
|
+
color: { srcFactor: "src-alpha", dstFactor: "one-minus-src-alpha", operation: "add" },
|
|
51
|
+
alpha: { srcFactor: "one", dstFactor: "one-minus-src-alpha", operation: "add" }
|
|
52
|
+
}
|
|
53
|
+
} : {}
|
|
54
|
+
} : null;
|
|
55
|
+
const pipeline = device.createRenderPipeline({
|
|
56
|
+
label: `${material.name ?? "shader"}-pipeline`,
|
|
57
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [getSceneBindGroupLayout(engine), bindings.group1BGL] }),
|
|
58
|
+
vertex: { module: vertModule, entryPoint: "mainVertex", buffers: bindings.vertexBuffers },
|
|
59
|
+
...fragModule && colorTarget ? { fragment: { module: fragModule, entryPoint: "mainFragment", targets: [colorTarget] } } : {},
|
|
60
|
+
...sig._depthStencilFormat ? {
|
|
61
|
+
depthStencil: {
|
|
62
|
+
format: sig._depthStencilFormat,
|
|
63
|
+
depthCompare: material.depthCompare,
|
|
64
|
+
depthWriteEnabled: material.needAlphaBlending ? false : material.depthWrite
|
|
65
|
+
}
|
|
66
|
+
} : {},
|
|
67
|
+
multisample: { count: sig._sampleCount },
|
|
68
|
+
primitive: { topology: "triangle-list", cullMode: material.backFaceCulling ? "back" : "none", frontFace: sig._flipY ? "cw" : "ccw" }
|
|
69
|
+
});
|
|
70
|
+
bindings.pipelines.set(key, pipeline);
|
|
71
|
+
return pipeline;
|
|
72
|
+
}
|
|
73
|
+
function toUboField(decl) {
|
|
74
|
+
return { _name: decl.name, _type: decl.type };
|
|
75
|
+
}
|
|
76
|
+
function buildBindGroupLayoutEntries(samplers, hasCustomUbo) {
|
|
77
|
+
const entries = [{ binding: 0, visibility: SHADER_STAGE_ALL, buffer: { type: "uniform" } }];
|
|
78
|
+
let nextBinding = 1;
|
|
79
|
+
if (hasCustomUbo) {
|
|
80
|
+
entries.push({ binding: nextBinding++, visibility: SHADER_STAGE_ALL, buffer: { type: "uniform" } });
|
|
81
|
+
}
|
|
82
|
+
for (const sampler of samplers) {
|
|
83
|
+
const sampleType = sampler.sampleType ?? "float";
|
|
84
|
+
entries.push({
|
|
85
|
+
binding: nextBinding++,
|
|
86
|
+
visibility: SHADER_STAGE_ALL,
|
|
87
|
+
texture: {
|
|
88
|
+
sampleType,
|
|
89
|
+
viewDimension: "2d"
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
entries.push({
|
|
93
|
+
binding: nextBinding++,
|
|
94
|
+
visibility: SHADER_STAGE_ALL,
|
|
95
|
+
sampler: { type: sampleType === "float" ? "filtering" : "non-filtering" }
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return entries;
|
|
99
|
+
}
|
|
100
|
+
function attributeLayout(name, shaderLocation) {
|
|
101
|
+
switch (name) {
|
|
102
|
+
case "position":
|
|
103
|
+
case "normal":
|
|
104
|
+
return { arrayStride: 12, attributes: [{ shaderLocation, offset: 0, format: "float32x3" }] };
|
|
105
|
+
case "uv":
|
|
106
|
+
case "uv2":
|
|
107
|
+
return { arrayStride: 8, attributes: [{ shaderLocation, offset: 0, format: "float32x2" }] };
|
|
108
|
+
case "tangent":
|
|
109
|
+
case "color":
|
|
110
|
+
return { arrayStride: 16, attributes: [{ shaderLocation, offset: 0, format: "float32x4" }] };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function buildShaderPrelude(material, systemSpec, customSpec) {
|
|
114
|
+
let wgsl = `${SCENE_UBO_WGSL}
|
|
115
|
+
struct ShaderSystemUniforms {
|
|
116
|
+
${systemSpec._structBody}
|
|
117
|
+
}
|
|
118
|
+
@group(1) @binding(0) var<uniform> shaderSystem: ShaderSystemUniforms;
|
|
119
|
+
`;
|
|
120
|
+
if (customSpec) {
|
|
121
|
+
wgsl += `struct ShaderUniforms {
|
|
122
|
+
${customSpec._structBody}
|
|
123
|
+
}
|
|
124
|
+
@group(1) @binding(1) var<uniform> shaderUniforms: ShaderUniforms;
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
127
|
+
let nextBinding = customSpec ? 2 : 1;
|
|
128
|
+
for (const sampler of material.samplerDecls) {
|
|
129
|
+
const texType = sampler.sampleType === "depth" ? "texture_depth_2d" : "texture_2d<f32>";
|
|
130
|
+
wgsl += `@group(1) @binding(${nextBinding++}) var ${sampler.name}: ${texType};
|
|
131
|
+
@group(1) @binding(${nextBinding++}) var ${sampler.name}Sampler: sampler;
|
|
132
|
+
`;
|
|
133
|
+
}
|
|
134
|
+
for (const define of material.defines) {
|
|
135
|
+
wgsl += `const ${define.name}: ${typeof define.value === "boolean" ? "bool" : "f32"} = ${formatDefineValue(define.value)};
|
|
136
|
+
`;
|
|
137
|
+
}
|
|
138
|
+
wgsl += `struct VertexInput {
|
|
139
|
+
`;
|
|
140
|
+
for (let i = 0; i < material.attributes.length; i++) {
|
|
141
|
+
const attr = material.attributes[i];
|
|
142
|
+
wgsl += `@location(${i}) ${attr}: ${attributeWgslType(attr)},
|
|
143
|
+
`;
|
|
144
|
+
}
|
|
145
|
+
wgsl += `};
|
|
146
|
+
`;
|
|
147
|
+
return wgsl;
|
|
148
|
+
}
|
|
149
|
+
function formatDefineValue(value) {
|
|
150
|
+
if (typeof value === "boolean") {
|
|
151
|
+
return value ? "true" : "false";
|
|
152
|
+
}
|
|
153
|
+
if (Number.isInteger(value)) {
|
|
154
|
+
return `${value}.0`;
|
|
155
|
+
}
|
|
156
|
+
return String(value);
|
|
157
|
+
}
|
|
158
|
+
function attributeWgslType(name) {
|
|
159
|
+
switch (name) {
|
|
160
|
+
case "position":
|
|
161
|
+
case "normal":
|
|
162
|
+
return "vec3<f32>";
|
|
163
|
+
case "uv":
|
|
164
|
+
case "uv2":
|
|
165
|
+
return "vec2<f32>";
|
|
166
|
+
case "tangent":
|
|
167
|
+
case "color":
|
|
168
|
+
return "vec4<f32>";
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function buildShaderMaterialRenderables(scene, meshes) {
|
|
172
|
+
const renderables = [];
|
|
173
|
+
const rebuildSingle = (s, mesh, materialOverride) => buildSingleShaderRenderable(s, mesh, materialOverride ?? mesh.material, materialOverride != null);
|
|
174
|
+
const byMaterial = /* @__PURE__ */ new Map();
|
|
175
|
+
for (const mesh of meshes) {
|
|
176
|
+
const material = mesh.material;
|
|
177
|
+
let list = byMaterial.get(material);
|
|
178
|
+
if (!list) {
|
|
179
|
+
list = [];
|
|
180
|
+
byMaterial.set(material, list);
|
|
181
|
+
}
|
|
182
|
+
list.push(mesh);
|
|
183
|
+
}
|
|
184
|
+
for (const [material, matMeshes] of byMaterial) {
|
|
185
|
+
const built = buildMaterialRenderables(scene, material, matMeshes);
|
|
186
|
+
renderables.push(...built);
|
|
187
|
+
}
|
|
188
|
+
return { renderables, rebuildSingle };
|
|
189
|
+
}
|
|
190
|
+
function buildSingleShaderRenderable(scene, mesh, material, isOverride) {
|
|
191
|
+
return buildMaterialRenderables(scene, material, [mesh], isOverride)[0];
|
|
192
|
+
}
|
|
193
|
+
function buildMaterialRenderables(scene, material, meshes, isOverride = false) {
|
|
194
|
+
const engine = scene.engine;
|
|
195
|
+
const bindings = getOrCreateShaderPipelineBindings(engine, material);
|
|
196
|
+
ensureCustomUbo(engine, material, bindings.customSpec);
|
|
197
|
+
const packets = meshes.map((mesh) => createPacket(scene, material, bindings.systemSpec, mesh));
|
|
198
|
+
const isTransparent = material.needAlphaBlending;
|
|
199
|
+
if (isTransparent) {
|
|
200
|
+
return packets.map((packet) => createTransparentRenderable(scene, material, packet, isOverride));
|
|
201
|
+
}
|
|
202
|
+
return [createOpaqueRenderable(scene, material, packets, isOverride)];
|
|
203
|
+
}
|
|
204
|
+
function createPacket(scene, material, systemSpec, mesh) {
|
|
205
|
+
const engine = scene.engine;
|
|
206
|
+
const systemUBO = createEmptyUniformBuffer(engine, systemSpec._totalBytes, "shader-system-ubo");
|
|
207
|
+
const systemData = new Float32Array(systemSpec._totalBytes / 4);
|
|
208
|
+
writeSystemUniforms(systemData, systemSpec, material, mesh, scene.camera, engine.canvas.width || 1, engine.canvas.height || 1);
|
|
209
|
+
engine._device.queue.writeBuffer(systemUBO, 0, systemData);
|
|
210
|
+
const packet = {
|
|
211
|
+
mesh,
|
|
212
|
+
systemUBO,
|
|
213
|
+
systemData,
|
|
214
|
+
_bindGroup: createShaderBindGroup(engine, material, systemUBO),
|
|
215
|
+
_lastResourceVersion: material._resourceVersion,
|
|
216
|
+
_boundTextures: collectShaderTextures(material)
|
|
217
|
+
};
|
|
218
|
+
for (const tex of packet._boundTextures) {
|
|
219
|
+
acquireTexture(tex);
|
|
220
|
+
}
|
|
221
|
+
registerMeshTextureDisposer(scene, mesh, packet);
|
|
222
|
+
return packet;
|
|
223
|
+
}
|
|
224
|
+
function createOpaqueRenderable(scene, material, packets, isOverride) {
|
|
225
|
+
if (packets.length > 1) {
|
|
226
|
+
for (const packet of packets) {
|
|
227
|
+
packet._owner = packets;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
const update = (context) => {
|
|
231
|
+
updateCustomUbo(scene.engine, material);
|
|
232
|
+
for (const packet of packets) {
|
|
233
|
+
if (packet._disposed) {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if (!isOverride && packet.mesh.material !== material) {
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
updatePacket(scene, material, packet, context);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const draw = (pass, engine) => {
|
|
243
|
+
let draws = 0;
|
|
244
|
+
for (const packet of packets) {
|
|
245
|
+
if (packet._disposed) {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (!isOverride && packet.mesh.material !== material) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
drawPacket(pass, engine, material, packet);
|
|
252
|
+
draws++;
|
|
253
|
+
}
|
|
254
|
+
return draws;
|
|
255
|
+
};
|
|
256
|
+
const r = {
|
|
257
|
+
order: packets.length === 1 ? packets[0].mesh.renderOrder ?? 100 : Math.min(...packets.map((p) => p.mesh.renderOrder ?? 100)),
|
|
258
|
+
isTransparent: false,
|
|
259
|
+
mesh: packets.length === 1 ? packets[0].mesh : void 0,
|
|
260
|
+
bind(eng, sig) {
|
|
261
|
+
const bindings = getOrCreateShaderPipelineBindings(eng, material);
|
|
262
|
+
return { renderable: r, pipeline: getOrCreateShaderPipeline(eng, sig, material, bindings), update, draw: (pass) => draw(pass, eng) };
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
return r;
|
|
266
|
+
}
|
|
267
|
+
function createTransparentRenderable(scene, material, packet, isOverride) {
|
|
268
|
+
const wm = packet.mesh.worldMatrix;
|
|
269
|
+
const sortCenter = [wm[12], wm[13], wm[14]];
|
|
270
|
+
const update = (context) => {
|
|
271
|
+
if (packet._disposed) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (!isOverride && packet.mesh.material !== material) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
updateCustomUbo(scene.engine, material);
|
|
278
|
+
updatePacket(scene, material, packet, context);
|
|
279
|
+
const m = packet.mesh.worldMatrix;
|
|
280
|
+
sortCenter[0] = m[12];
|
|
281
|
+
sortCenter[1] = m[13];
|
|
282
|
+
sortCenter[2] = m[14];
|
|
283
|
+
};
|
|
284
|
+
const draw = (pass, engine) => {
|
|
285
|
+
if (packet._disposed) {
|
|
286
|
+
return 0;
|
|
287
|
+
}
|
|
288
|
+
if (!isOverride && packet.mesh.material !== material) {
|
|
289
|
+
return 0;
|
|
290
|
+
}
|
|
291
|
+
drawPacket(pass, engine, material, packet);
|
|
292
|
+
return 1;
|
|
293
|
+
};
|
|
294
|
+
const r = {
|
|
295
|
+
order: packet.mesh.renderOrder ?? 200,
|
|
296
|
+
isTransparent: true,
|
|
297
|
+
mesh: packet.mesh,
|
|
298
|
+
_worldCenter: sortCenter,
|
|
299
|
+
bind(eng, sig) {
|
|
300
|
+
const bindings = getOrCreateShaderPipelineBindings(eng, material);
|
|
301
|
+
return { renderable: r, pipeline: getOrCreateShaderPipeline(eng, sig, material, bindings), update, draw: (pass) => draw(pass, eng) };
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
return r;
|
|
305
|
+
}
|
|
306
|
+
function updatePacket(scene, material, packet, context) {
|
|
307
|
+
const engine = scene.engine;
|
|
308
|
+
const state = material;
|
|
309
|
+
writeSystemUniforms(packet.systemData, state._shaderBindings.systemSpec, material, packet.mesh, context._camera ?? scene.camera, context.targetWidth, context.targetHeight);
|
|
310
|
+
engine._device.queue.writeBuffer(packet.systemUBO, 0, packet.systemData);
|
|
311
|
+
if (packet._lastResourceVersion !== material._resourceVersion) {
|
|
312
|
+
for (const tex of packet._boundTextures) {
|
|
313
|
+
releaseTexture(tex);
|
|
314
|
+
}
|
|
315
|
+
packet._bindGroup = createShaderBindGroup(engine, material, packet.systemUBO);
|
|
316
|
+
packet._boundTextures = collectShaderTextures(material);
|
|
317
|
+
for (const tex of packet._boundTextures) {
|
|
318
|
+
acquireTexture(tex);
|
|
319
|
+
}
|
|
320
|
+
packet._lastResourceVersion = material._resourceVersion;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
function drawPacket(pass, engine, material, packet) {
|
|
324
|
+
const gpu = packet.mesh._gpu;
|
|
325
|
+
for (let i = 0; i < material.attributes.length; i++) {
|
|
326
|
+
pass.setVertexBuffer(i, getAttrBuffer(engine, gpu, material.attributes[i]));
|
|
327
|
+
}
|
|
328
|
+
pass.setIndexBuffer(gpu.indexBuffer, gpu.indexFormat);
|
|
329
|
+
pass.setBindGroup(1, packet._bindGroup);
|
|
330
|
+
pass.drawIndexed(gpu.indexCount);
|
|
331
|
+
}
|
|
332
|
+
function ensureCustomUbo(engine, material, customSpec) {
|
|
333
|
+
const state = material;
|
|
334
|
+
if (!customSpec) {
|
|
335
|
+
state._shaderCustomUbo = null;
|
|
336
|
+
state._shaderCustomData = null;
|
|
337
|
+
state._shaderCustomVersion = material._uniformVersion;
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (state._shaderCustomUbo && state._shaderCustomData) {
|
|
341
|
+
updateCustomUbo(engine, material);
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
state._shaderCustomUbo = createEmptyUniformBuffer(engine, customSpec._totalBytes, "shader-custom-ubo");
|
|
345
|
+
state._shaderCustomData = new ArrayBuffer(customSpec._totalBytes);
|
|
346
|
+
state._shaderCustomVersion = -1;
|
|
347
|
+
updateCustomUbo(engine, material);
|
|
348
|
+
}
|
|
349
|
+
function updateCustomUbo(engine, material) {
|
|
350
|
+
const state = material;
|
|
351
|
+
const customSpec = state._shaderCustomSpec;
|
|
352
|
+
const customUbo = state._shaderCustomUbo;
|
|
353
|
+
const customData = state._shaderCustomData;
|
|
354
|
+
if (!customSpec || !customUbo || !customData || state._shaderCustomVersion === material._uniformVersion) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const bytes = new Uint8Array(customData);
|
|
358
|
+
bytes.fill(0);
|
|
359
|
+
for (const [name, slot] of material._uniformValues) {
|
|
360
|
+
if (_isShaderSystemUniform(name)) {
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
const offset = customSpec._offsets.get(name);
|
|
364
|
+
if (offset !== void 0) {
|
|
365
|
+
writeTypedValue(customData, offset, slot.decl.type, slot.value);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
engine._device.queue.writeBuffer(customUbo, 0, bytes);
|
|
369
|
+
state._shaderCustomVersion = material._uniformVersion;
|
|
370
|
+
}
|
|
371
|
+
function writeTypedValue(data, offset, type, value) {
|
|
372
|
+
if (type === "u32") {
|
|
373
|
+
new Uint32Array(data, offset, 1)[0] = value[0];
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
if (type === "i32") {
|
|
377
|
+
new Int32Array(data, offset, 1)[0] = value[0];
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
new Float32Array(data, offset, value.length).set(value);
|
|
381
|
+
}
|
|
382
|
+
function createShaderBindGroup(engine, material, systemUBO) {
|
|
383
|
+
const bindings = getOrCreateShaderPipelineBindings(engine, material);
|
|
384
|
+
const entries = [{ binding: 0, resource: { buffer: systemUBO } }];
|
|
385
|
+
let nextBinding = 1;
|
|
386
|
+
if (bindings.customSpec) {
|
|
387
|
+
ensureCustomUbo(engine, material, bindings.customSpec);
|
|
388
|
+
entries.push({ binding: nextBinding++, resource: { buffer: material._shaderCustomUbo } });
|
|
389
|
+
}
|
|
390
|
+
for (const sampler of material.samplerDecls) {
|
|
391
|
+
const slot = material._textureSlots.get(sampler.name);
|
|
392
|
+
const tex = slot == null ? void 0 : slot.current;
|
|
393
|
+
if (!tex) {
|
|
394
|
+
throw new Error(`ShaderMaterial: sampler "${sampler.name}" has no Texture2D. Call setShaderTexture() before rendering.`);
|
|
395
|
+
}
|
|
396
|
+
entries.push({ binding: nextBinding++, resource: tex.view }, { binding: nextBinding++, resource: tex.sampler });
|
|
397
|
+
}
|
|
398
|
+
return engine._device.createBindGroup({ label: "shader-material-bg", layout: bindings.group1BGL, entries });
|
|
399
|
+
}
|
|
400
|
+
function collectShaderTextures(material) {
|
|
401
|
+
const textures = [];
|
|
402
|
+
for (const slot of material._textureSlots.values()) {
|
|
403
|
+
if (slot.current) {
|
|
404
|
+
textures.push(slot.current);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return textures;
|
|
408
|
+
}
|
|
409
|
+
function registerMeshTextureDisposer(scene, mesh, packet) {
|
|
410
|
+
const list = scene._meshDisposables.get(mesh) ?? [];
|
|
411
|
+
list.push(() => {
|
|
412
|
+
packet._disposed = true;
|
|
413
|
+
if (packet._owner) {
|
|
414
|
+
const oi = packet._owner.indexOf(packet);
|
|
415
|
+
if (oi >= 0) {
|
|
416
|
+
packet._owner.splice(oi, 1);
|
|
417
|
+
}
|
|
418
|
+
packet._owner = void 0;
|
|
419
|
+
}
|
|
420
|
+
packet.systemUBO.destroy();
|
|
421
|
+
for (const tex of packet._boundTextures) {
|
|
422
|
+
releaseTexture(tex);
|
|
423
|
+
}
|
|
424
|
+
packet._boundTextures = [];
|
|
425
|
+
});
|
|
426
|
+
scene._meshDisposables.set(mesh, list);
|
|
427
|
+
}
|
|
428
|
+
function writeSystemUniforms(data, spec, material, mesh, camera, targetWidth, targetHeight) {
|
|
429
|
+
var _a;
|
|
430
|
+
data.fill(0);
|
|
431
|
+
const world = mesh.worldMatrix;
|
|
432
|
+
const aspect = camera ? getEffectiveAspectRatio(camera, targetWidth, targetHeight) : 1;
|
|
433
|
+
const view = camera ? getViewMatrix(camera) : null;
|
|
434
|
+
const projection = camera ? getProjectionMatrix(camera, aspect) : null;
|
|
435
|
+
const viewProjection = camera ? getViewProjectionMatrix(camera, aspect) : null;
|
|
436
|
+
for (const uniform of material.uniformDecls) {
|
|
437
|
+
if (!_isShaderSystemUniform(uniform.name)) {
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
const offset = spec._offsets.get(uniform.name);
|
|
441
|
+
if (offset === void 0) {
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
444
|
+
const f = offset / 4;
|
|
445
|
+
switch (uniform.name) {
|
|
446
|
+
case "world":
|
|
447
|
+
data.set(world, f);
|
|
448
|
+
break;
|
|
449
|
+
case "view":
|
|
450
|
+
if (view) {
|
|
451
|
+
data.set(view, f);
|
|
452
|
+
}
|
|
453
|
+
break;
|
|
454
|
+
case "projection":
|
|
455
|
+
if (projection) {
|
|
456
|
+
data.set(projection, f);
|
|
457
|
+
}
|
|
458
|
+
break;
|
|
459
|
+
case "viewProjection":
|
|
460
|
+
if (viewProjection) {
|
|
461
|
+
data.set(viewProjection, f);
|
|
462
|
+
}
|
|
463
|
+
break;
|
|
464
|
+
case "worldView":
|
|
465
|
+
if (view) {
|
|
466
|
+
mat4MultiplyInto(data, f, view, 0, world, 0);
|
|
467
|
+
}
|
|
468
|
+
break;
|
|
469
|
+
case "worldViewProjection":
|
|
470
|
+
if (viewProjection) {
|
|
471
|
+
mat4MultiplyInto(data, f, viewProjection, 0, world, 0);
|
|
472
|
+
}
|
|
473
|
+
break;
|
|
474
|
+
case "cameraPosition":
|
|
475
|
+
if (camera) {
|
|
476
|
+
const wm = camera.worldMatrix;
|
|
477
|
+
data[f] = wm[12];
|
|
478
|
+
data[f + 1] = wm[13];
|
|
479
|
+
data[f + 2] = wm[14];
|
|
480
|
+
}
|
|
481
|
+
break;
|
|
482
|
+
case "screenSize":
|
|
483
|
+
data[f] = targetWidth;
|
|
484
|
+
data[f + 1] = targetHeight;
|
|
485
|
+
break;
|
|
486
|
+
case "alphaCutoff":
|
|
487
|
+
data[f] = ((_a = material._uniformValues.get("alphaCutoff")) == null ? void 0 : _a.value[0]) ?? 0.4;
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
let zeroAttrCache = null;
|
|
493
|
+
function getZeroAttrBuffer(engine, gpu, name) {
|
|
494
|
+
if (!zeroAttrCache) {
|
|
495
|
+
zeroAttrCache = /* @__PURE__ */ new WeakMap();
|
|
496
|
+
}
|
|
497
|
+
let cache = zeroAttrCache.get(gpu);
|
|
498
|
+
if (!cache) {
|
|
499
|
+
cache = /* @__PURE__ */ new Map();
|
|
500
|
+
zeroAttrCache.set(gpu, cache);
|
|
501
|
+
}
|
|
502
|
+
const existing = cache.get(name);
|
|
503
|
+
if (existing) {
|
|
504
|
+
return existing;
|
|
505
|
+
}
|
|
506
|
+
const vertexCount = gpu.positionBuffer.size / 12;
|
|
507
|
+
const stride = name === "uv" || name === "uv2" ? 8 : name === "normal" ? 12 : 16;
|
|
508
|
+
const buffer = engine._device.createBuffer({ label: `shader-zero-${name}`, size: vertexCount * stride, usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST });
|
|
509
|
+
cache.set(name, buffer);
|
|
510
|
+
return buffer;
|
|
511
|
+
}
|
|
512
|
+
function getAttrBuffer(engine, gpu, name) {
|
|
513
|
+
switch (name) {
|
|
514
|
+
case "position":
|
|
515
|
+
return gpu.positionBuffer;
|
|
516
|
+
case "normal":
|
|
517
|
+
return gpu.normalBuffer ?? getZeroAttrBuffer(engine, gpu, "normal");
|
|
518
|
+
case "uv":
|
|
519
|
+
return gpu.uvBuffer ?? getZeroAttrBuffer(engine, gpu, "uv");
|
|
520
|
+
case "uv2":
|
|
521
|
+
return gpu.uv2Buffer ?? getZeroAttrBuffer(engine, gpu, "uv2");
|
|
522
|
+
case "tangent":
|
|
523
|
+
return gpu.tangentBuffer ?? getZeroAttrBuffer(engine, gpu, "tangent");
|
|
524
|
+
case "color":
|
|
525
|
+
return gpu.colorBuffer ?? getZeroAttrBuffer(engine, gpu, "color");
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
export {
|
|
529
|
+
buildShaderMaterialRenderables
|
|
530
|
+
};
|
|
531
|
+
//# sourceMappingURL=shader-renderable-D-6796KR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-renderable-D-6796KR.js","sources":["../src/material/shader/shader-pipeline.ts","../src/material/shader/shader-renderable.ts"],"sourcesContent":["import type { EngineContext } from \"../../engine/engine.js\";\nimport type { RenderTargetSignature } from \"../../engine/render-target.js\";\nimport { targetSignatureKey } from \"../../engine/render-target.js\";\nimport { getSceneBindGroupLayout } from \"../../render/scene-helpers.js\";\nimport { SCENE_UBO_WGSL } from \"../../shader/scene-uniforms.js\";\nimport { computeUboLayout } from \"../../shader/ubo-layout.js\";\nimport type { UboField, UboSpec } from \"../../shader/fragment-types.js\";\nimport type { ShaderAttributeName, ShaderMaterial, ShaderSamplerDecl, ShaderUniformDecl } from \"./shader-material.js\";\nimport { _isShaderSystemUniform } from \"./shader-material.js\";\n\nexport interface ShaderPipelineBindings {\n readonly group1BGL: GPUBindGroupLayout;\n readonly systemSpec: UboSpec;\n readonly customSpec: UboSpec | null;\n readonly vertexBuffers: readonly GPUVertexBufferLayout[];\n readonly pipelines: Map<string, GPURenderPipeline>;\n}\n\ninterface ShaderMaterialPipelineState extends ShaderMaterial {\n _shaderDevice?: GPUDevice;\n _shaderBindings?: ShaderPipelineBindings;\n _shaderCustomUbo?: GPUBuffer | null;\n _shaderCustomSpec?: UboSpec | null;\n _shaderCustomData?: ArrayBuffer | null;\n _shaderCustomVersion?: number;\n}\n\nconst SHADER_STAGE_ALL = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;\n\nexport function getOrCreateShaderPipelineBindings(engine: EngineContext, material: ShaderMaterial): ShaderPipelineBindings {\n const state = material as ShaderMaterialPipelineState;\n if (state._shaderBindings && state._shaderDevice === engine._device) {\n return state._shaderBindings;\n }\n\n state._shaderDevice = engine._device;\n const systemFields = material.uniformDecls.filter((u) => _isShaderSystemUniform(u.name)).map(toUboField);\n const customFields = material.uniformDecls.filter((u) => !_isShaderSystemUniform(u.name)).map(toUboField);\n const systemSpec = computeUboLayout(systemFields.length > 0 ? systemFields : [{ _name: \"_pad\", _type: \"vec4<f32>\" }]);\n const customSpec = customFields.length > 0 ? computeUboLayout(customFields) : null;\n const group1BGL = engine._device.createBindGroupLayout({\n label: \"shader-material-group1\",\n entries: buildBindGroupLayoutEntries(material.samplerDecls, customSpec !== null),\n });\n const bindings: ShaderPipelineBindings = {\n group1BGL,\n systemSpec,\n customSpec,\n vertexBuffers: material.attributes.map(attributeLayout),\n pipelines: new Map(),\n };\n state._shaderBindings = bindings;\n state._shaderCustomSpec = customSpec;\n state._shaderCustomUbo = null;\n state._shaderCustomData = null;\n state._shaderCustomVersion = -1;\n return bindings;\n}\n\nexport function getOrCreateShaderPipeline(engine: EngineContext, sig: RenderTargetSignature, material: ShaderMaterial, bindings: ShaderPipelineBindings): GPURenderPipeline {\n const key = targetSignatureKey(sig);\n const cached = bindings.pipelines.get(key);\n if (cached) {\n return cached;\n }\n const device = engine._device;\n const prelude = buildShaderPrelude(material, bindings.systemSpec, bindings.customSpec);\n const vertModule = device.createShaderModule({ label: `${material.name ?? \"shader\"}-vertex`, code: `${prelude}\\n${material.vertexSource}` });\n const fragModule = sig._colorFormat ? device.createShaderModule({ label: `${material.name ?? \"shader\"}-fragment`, code: `${prelude}\\n${material.fragmentSource}` }) : null;\n const colorTarget: GPUColorTargetState | null = sig._colorFormat\n ? {\n format: sig._colorFormat,\n ...(material.needAlphaBlending\n ? {\n blend:\n material.blendMode === \"additive\"\n ? ({\n color: { srcFactor: \"src-alpha\", dstFactor: \"one\", operation: \"add\" },\n alpha: { srcFactor: \"one\", dstFactor: \"one\", operation: \"add\" },\n } satisfies GPUBlendState)\n : ({\n color: { srcFactor: \"src-alpha\", dstFactor: \"one-minus-src-alpha\", operation: \"add\" },\n alpha: { srcFactor: \"one\", dstFactor: \"one-minus-src-alpha\", operation: \"add\" },\n } satisfies GPUBlendState),\n }\n : {}),\n }\n : null;\n\n const pipeline = device.createRenderPipeline({\n label: `${material.name ?? \"shader\"}-pipeline`,\n layout: device.createPipelineLayout({ bindGroupLayouts: [getSceneBindGroupLayout(engine), bindings.group1BGL] }),\n vertex: { module: vertModule, entryPoint: \"mainVertex\", buffers: bindings.vertexBuffers },\n ...(fragModule && colorTarget ? { fragment: { module: fragModule, entryPoint: \"mainFragment\", targets: [colorTarget] } } : {}),\n ...(sig._depthStencilFormat\n ? {\n depthStencil: {\n format: sig._depthStencilFormat,\n depthCompare: material.depthCompare,\n depthWriteEnabled: material.needAlphaBlending ? false : material.depthWrite,\n },\n }\n : {}),\n multisample: { count: sig._sampleCount },\n primitive: { topology: \"triangle-list\", cullMode: material.backFaceCulling ? \"back\" : \"none\", frontFace: sig._flipY ? \"cw\" : \"ccw\" },\n });\n bindings.pipelines.set(key, pipeline);\n return pipeline;\n}\n\nfunction toUboField(decl: ShaderUniformDecl): UboField {\n return { _name: decl.name, _type: decl.type };\n}\n\nfunction buildBindGroupLayoutEntries(samplers: readonly ShaderSamplerDecl[], hasCustomUbo: boolean): GPUBindGroupLayoutEntry[] {\n const entries: GPUBindGroupLayoutEntry[] = [{ binding: 0, visibility: SHADER_STAGE_ALL, buffer: { type: \"uniform\" } }];\n let nextBinding = 1;\n if (hasCustomUbo) {\n entries.push({ binding: nextBinding++, visibility: SHADER_STAGE_ALL, buffer: { type: \"uniform\" } });\n }\n for (const sampler of samplers) {\n const sampleType = sampler.sampleType ?? \"float\";\n entries.push({\n binding: nextBinding++,\n visibility: SHADER_STAGE_ALL,\n texture: {\n sampleType,\n viewDimension: \"2d\",\n },\n });\n entries.push({\n binding: nextBinding++,\n visibility: SHADER_STAGE_ALL,\n sampler: { type: sampleType === \"float\" ? \"filtering\" : \"non-filtering\" },\n });\n }\n return entries;\n}\n\nfunction attributeLayout(name: ShaderAttributeName, shaderLocation: number): GPUVertexBufferLayout {\n switch (name) {\n case \"position\":\n case \"normal\":\n return { arrayStride: 12, attributes: [{ shaderLocation, offset: 0, format: \"float32x3\" }] };\n case \"uv\":\n case \"uv2\":\n return { arrayStride: 8, attributes: [{ shaderLocation, offset: 0, format: \"float32x2\" }] };\n case \"tangent\":\n case \"color\":\n return { arrayStride: 16, attributes: [{ shaderLocation, offset: 0, format: \"float32x4\" }] };\n }\n}\n\nfunction buildShaderPrelude(material: ShaderMaterial, systemSpec: UboSpec, customSpec: UboSpec | null): string {\n let wgsl = `${SCENE_UBO_WGSL}\nstruct ShaderSystemUniforms {\n${systemSpec._structBody}\n}\n@group(1) @binding(0) var<uniform> shaderSystem: ShaderSystemUniforms;\n`;\n if (customSpec) {\n wgsl += `struct ShaderUniforms {\n${customSpec._structBody}\n}\n@group(1) @binding(1) var<uniform> shaderUniforms: ShaderUniforms;\n`;\n }\n let nextBinding = customSpec ? 2 : 1;\n for (const sampler of material.samplerDecls) {\n const texType = sampler.sampleType === \"depth\" ? \"texture_depth_2d\" : \"texture_2d<f32>\";\n wgsl += `@group(1) @binding(${nextBinding++}) var ${sampler.name}: ${texType};\n@group(1) @binding(${nextBinding++}) var ${sampler.name}Sampler: sampler;\n`;\n }\n for (const define of material.defines) {\n wgsl += `const ${define.name}: ${typeof define.value === \"boolean\" ? \"bool\" : \"f32\"} = ${formatDefineValue(define.value)};\n`;\n }\n wgsl += `struct VertexInput {\n`;\n for (let i = 0; i < material.attributes.length; i++) {\n const attr = material.attributes[i]!;\n wgsl += `@location(${i}) ${attr}: ${attributeWgslType(attr)},\n`;\n }\n wgsl += `};\n`;\n return wgsl;\n}\n\nfunction formatDefineValue(value: boolean | number): string {\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n if (Number.isInteger(value)) {\n return `${value}.0`;\n }\n return String(value);\n}\n\nfunction attributeWgslType(name: ShaderAttributeName): string {\n switch (name) {\n case \"position\":\n case \"normal\":\n return \"vec3<f32>\";\n case \"uv\":\n case \"uv2\":\n return \"vec2<f32>\";\n case \"tangent\":\n case \"color\":\n return \"vec4<f32>\";\n }\n}\n","import type { EngineContext } from \"../../engine/engine.js\";\nimport type { SceneContext } from \"../../scene/scene.js\";\nimport type { Mesh, MeshGPU } from \"../../mesh/mesh.js\";\nimport type { MeshGroupBuildResult, Renderable, DrawUpdateContext } from \"../../render/renderable.js\";\nimport type { Material } from \"../material.js\";\nimport type { Texture2D } from \"../../texture/texture-2d.js\";\nimport { createEmptyUniformBuffer } from \"../../resource/gpu-buffers.js\";\nimport { acquireTexture, releaseTexture } from \"../../resource/gpu-pool.js\";\nimport { getEffectiveAspectRatio, getProjectionMatrix, getViewMatrix, getViewProjectionMatrix } from \"../../camera/camera.js\";\nimport type { Camera } from \"../../camera/camera.js\";\nimport { mat4MultiplyInto } from \"../../math/mat4-multiply-into.js\";\nimport type { UboSpec } from \"../../shader/fragment-types.js\";\nimport type { ShaderAttributeName, ShaderMaterial, ShaderUniformType } from \"./shader-material.js\";\nimport type { ShaderPipelineBindings } from \"./shader-pipeline.js\";\nimport { _isShaderSystemUniform } from \"./shader-material.js\";\nimport { getOrCreateShaderPipeline, getOrCreateShaderPipelineBindings } from \"./shader-pipeline.js\";\n\ninterface ShaderPacket {\n readonly mesh: Mesh;\n readonly systemUBO: GPUBuffer;\n readonly systemData: Float32Array;\n _bindGroup: GPUBindGroup;\n _lastResourceVersion: number;\n _boundTextures: Texture2D[];\n /** Set when the owning mesh is removed and this packet's GPU resources are\n * destroyed. A combined (multi-mesh) renderable keeps every packet in its\n * closure, so update()/draw() must skip disposed packets to avoid writing to\n * or submitting an already-destroyed systemUBO / vertex buffer. */\n _disposed?: boolean;\n /** Back-reference to the combined renderable's packet array, so disposal can\n * splice this packet out and stop retaining/iterating dead chunk state every\n * frame (set only for merged opaque renderables). */\n _owner?: ShaderPacket[];\n}\n\ninterface ShaderMaterialRenderState extends ShaderMaterial {\n _shaderBindings?: ShaderPipelineBindings;\n _shaderCustomUbo?: GPUBuffer | null;\n _shaderCustomSpec?: UboSpec | null;\n _shaderCustomData?: ArrayBuffer | null;\n _shaderCustomVersion?: number;\n}\n\ntype ShaderRenderPass = GPURenderPassEncoder | GPURenderBundleEncoder;\n\nexport function buildShaderMaterialRenderables(scene: SceneContext, meshes: Mesh[]): MeshGroupBuildResult {\n const renderables: Renderable[] = [];\n\n const rebuildSingle = (s: SceneContext, mesh: Mesh, materialOverride?: Material): Renderable =>\n buildSingleShaderRenderable(s, mesh, (materialOverride ?? mesh.material) as ShaderMaterial, materialOverride != null);\n\n const byMaterial = new Map<ShaderMaterial, Mesh[]>();\n for (const mesh of meshes) {\n const material = mesh.material as ShaderMaterial;\n let list = byMaterial.get(material);\n if (!list) {\n list = [];\n byMaterial.set(material, list);\n }\n list.push(mesh);\n }\n\n for (const [material, matMeshes] of byMaterial) {\n const built = buildMaterialRenderables(scene, material, matMeshes);\n renderables.push(...built);\n }\n\n return { renderables, rebuildSingle };\n}\n\nfunction buildSingleShaderRenderable(scene: SceneContext, mesh: Mesh, material: ShaderMaterial, isOverride: boolean): Renderable {\n return buildMaterialRenderables(scene, material, [mesh], isOverride)[0]!;\n}\n\nfunction buildMaterialRenderables(scene: SceneContext, material: ShaderMaterial, meshes: readonly Mesh[], isOverride = false): Renderable[] {\n const engine = scene.engine;\n const bindings = getOrCreateShaderPipelineBindings(engine, material);\n ensureCustomUbo(engine, material, bindings.customSpec);\n const packets = meshes.map((mesh) => createPacket(scene, material, bindings.systemSpec, mesh));\n const isTransparent = material.needAlphaBlending;\n if (isTransparent) {\n return packets.map((packet) => createTransparentRenderable(scene, material, packet, isOverride));\n }\n return [createOpaqueRenderable(scene, material, packets, isOverride)];\n}\n\nfunction createPacket(scene: SceneContext, material: ShaderMaterial, systemSpec: UboSpec, mesh: Mesh): ShaderPacket {\n const engine = scene.engine;\n const systemUBO = createEmptyUniformBuffer(engine, systemSpec._totalBytes, \"shader-system-ubo\");\n const systemData = new Float32Array(systemSpec._totalBytes / 4);\n writeSystemUniforms(systemData, systemSpec, material, mesh, scene.camera, engine.canvas.width || 1, engine.canvas.height || 1);\n engine._device.queue.writeBuffer(systemUBO, 0, systemData);\n const packet: ShaderPacket = {\n mesh,\n systemUBO,\n systemData,\n _bindGroup: createShaderBindGroup(engine, material, systemUBO),\n _lastResourceVersion: material._resourceVersion,\n _boundTextures: collectShaderTextures(material),\n };\n for (const tex of packet._boundTextures) {\n acquireTexture(tex);\n }\n registerMeshTextureDisposer(scene, mesh, packet);\n return packet;\n}\n\nfunction createOpaqueRenderable(scene: SceneContext, material: ShaderMaterial, packets: readonly ShaderPacket[], isOverride: boolean): Renderable {\n // Only merged renderables (>1 mesh) can outlive an individual packet's mesh,\n // so give those packets a back-reference enabling disposal-time compaction.\n if (packets.length > 1) {\n for (const packet of packets) {\n packet._owner = packets as ShaderPacket[];\n }\n }\n const update = (context: DrawUpdateContext): void => {\n updateCustomUbo(scene.engine, material);\n for (const packet of packets) {\n if (packet._disposed) {\n continue;\n }\n if (!isOverride && packet.mesh.material !== material) {\n continue;\n }\n updatePacket(scene, material, packet, context);\n }\n };\n const draw = (pass: ShaderRenderPass, engine: EngineContext): number => {\n let draws = 0;\n for (const packet of packets) {\n if (packet._disposed) {\n continue;\n }\n if (!isOverride && packet.mesh.material !== material) {\n continue;\n }\n drawPacket(pass, engine, material, packet);\n draws++;\n }\n return draws;\n };\n const r: Renderable = {\n order: packets.length === 1 ? (packets[0]!.mesh.renderOrder ?? 100) : Math.min(...packets.map((p) => p.mesh.renderOrder ?? 100)),\n isTransparent: false,\n mesh: packets.length === 1 ? packets[0]!.mesh : undefined,\n bind(eng, sig) {\n const bindings = getOrCreateShaderPipelineBindings(eng, material);\n return { renderable: r, pipeline: getOrCreateShaderPipeline(eng, sig, material, bindings), update, draw: (pass) => draw(pass, eng) };\n },\n };\n return r;\n}\n\nfunction createTransparentRenderable(scene: SceneContext, material: ShaderMaterial, packet: ShaderPacket, isOverride: boolean): Renderable {\n const wm = packet.mesh.worldMatrix as unknown as ArrayLike<number>;\n const sortCenter: [number, number, number] = [wm[12]!, wm[13]!, wm[14]!];\n const update = (context: DrawUpdateContext): void => {\n if (packet._disposed) {\n return;\n }\n if (!isOverride && packet.mesh.material !== material) {\n return;\n }\n updateCustomUbo(scene.engine, material);\n updatePacket(scene, material, packet, context);\n const m = packet.mesh.worldMatrix as unknown as ArrayLike<number>;\n sortCenter[0] = m[12]!;\n sortCenter[1] = m[13]!;\n sortCenter[2] = m[14]!;\n };\n const draw = (pass: ShaderRenderPass, engine: EngineContext): number => {\n if (packet._disposed) {\n return 0;\n }\n if (!isOverride && packet.mesh.material !== material) {\n return 0;\n }\n drawPacket(pass, engine, material, packet);\n return 1;\n };\n const r: Renderable = {\n order: packet.mesh.renderOrder ?? 200,\n isTransparent: true,\n mesh: packet.mesh,\n _worldCenter: sortCenter,\n bind(eng, sig) {\n const bindings = getOrCreateShaderPipelineBindings(eng, material);\n return { renderable: r, pipeline: getOrCreateShaderPipeline(eng, sig, material, bindings), update, draw: (pass) => draw(pass, eng) };\n },\n };\n return r;\n}\n\nfunction updatePacket(scene: SceneContext, material: ShaderMaterial, packet: ShaderPacket, context: DrawUpdateContext): void {\n const engine = scene.engine;\n const state = material as ShaderMaterialRenderState;\n writeSystemUniforms(packet.systemData, state._shaderBindings!.systemSpec, material, packet.mesh, context._camera ?? scene.camera, context.targetWidth, context.targetHeight);\n engine._device.queue.writeBuffer(packet.systemUBO, 0, packet.systemData as Float32Array<ArrayBuffer>);\n if (packet._lastResourceVersion !== material._resourceVersion) {\n for (const tex of packet._boundTextures) {\n releaseTexture(tex);\n }\n packet._bindGroup = createShaderBindGroup(engine, material, packet.systemUBO);\n packet._boundTextures = collectShaderTextures(material);\n for (const tex of packet._boundTextures) {\n acquireTexture(tex);\n }\n packet._lastResourceVersion = material._resourceVersion;\n }\n}\n\nfunction drawPacket(pass: ShaderRenderPass, engine: EngineContext, material: ShaderMaterial, packet: ShaderPacket): void {\n const gpu = packet.mesh._gpu;\n for (let i = 0; i < material.attributes.length; i++) {\n pass.setVertexBuffer(i, getAttrBuffer(engine, gpu, material.attributes[i]!));\n }\n pass.setIndexBuffer(gpu.indexBuffer, gpu.indexFormat);\n pass.setBindGroup(1, packet._bindGroup);\n pass.drawIndexed(gpu.indexCount);\n}\n\nfunction ensureCustomUbo(engine: EngineContext, material: ShaderMaterial, customSpec: UboSpec | null): void {\n const state = material as ShaderMaterialRenderState;\n if (!customSpec) {\n state._shaderCustomUbo = null;\n state._shaderCustomData = null;\n state._shaderCustomVersion = material._uniformVersion;\n return;\n }\n if (state._shaderCustomUbo && state._shaderCustomData) {\n updateCustomUbo(engine, material);\n return;\n }\n state._shaderCustomUbo = createEmptyUniformBuffer(engine, customSpec._totalBytes, \"shader-custom-ubo\");\n state._shaderCustomData = new ArrayBuffer(customSpec._totalBytes);\n state._shaderCustomVersion = -1;\n updateCustomUbo(engine, material);\n}\n\nfunction updateCustomUbo(engine: EngineContext, material: ShaderMaterial): void {\n const state = material as ShaderMaterialRenderState;\n const customSpec = state._shaderCustomSpec;\n const customUbo = state._shaderCustomUbo;\n const customData = state._shaderCustomData;\n if (!customSpec || !customUbo || !customData || state._shaderCustomVersion === material._uniformVersion) {\n return;\n }\n const bytes = new Uint8Array(customData);\n bytes.fill(0);\n for (const [name, slot] of material._uniformValues) {\n if (_isShaderSystemUniform(name)) {\n continue;\n }\n const offset = customSpec._offsets.get(name);\n if (offset !== undefined) {\n writeTypedValue(customData, offset, slot.decl.type, slot.value);\n }\n }\n engine._device.queue.writeBuffer(customUbo, 0, bytes);\n state._shaderCustomVersion = material._uniformVersion;\n}\n\nfunction writeTypedValue(data: ArrayBuffer, offset: number, type: ShaderUniformType, value: Float32Array): void {\n if (type === \"u32\") {\n new Uint32Array(data, offset, 1)[0] = value[0]!;\n return;\n }\n if (type === \"i32\") {\n new Int32Array(data, offset, 1)[0] = value[0]!;\n return;\n }\n new Float32Array(data, offset, value.length).set(value);\n}\n\nfunction createShaderBindGroup(engine: EngineContext, material: ShaderMaterial, systemUBO: GPUBuffer): GPUBindGroup {\n const bindings = getOrCreateShaderPipelineBindings(engine, material);\n const entries: GPUBindGroupEntry[] = [{ binding: 0, resource: { buffer: systemUBO } }];\n let nextBinding = 1;\n if (bindings.customSpec) {\n ensureCustomUbo(engine, material, bindings.customSpec);\n entries.push({ binding: nextBinding++, resource: { buffer: (material as ShaderMaterialRenderState)._shaderCustomUbo! } });\n }\n for (const sampler of material.samplerDecls) {\n const slot = material._textureSlots.get(sampler.name);\n const tex = slot?.current;\n if (!tex) {\n throw new Error(`ShaderMaterial: sampler \"${sampler.name}\" has no Texture2D. Call setShaderTexture() before rendering.`);\n }\n entries.push({ binding: nextBinding++, resource: tex.view }, { binding: nextBinding++, resource: tex.sampler });\n }\n return engine._device.createBindGroup({ label: \"shader-material-bg\", layout: bindings.group1BGL, entries });\n}\n\nfunction collectShaderTextures(material: ShaderMaterial): Texture2D[] {\n const textures: Texture2D[] = [];\n for (const slot of material._textureSlots.values()) {\n if (slot.current) {\n textures.push(slot.current);\n }\n }\n return textures;\n}\n\nfunction registerMeshTextureDisposer(scene: SceneContext, mesh: Mesh, packet: ShaderPacket): void {\n const list = scene._meshDisposables.get(mesh) ?? [];\n list.push(() => {\n packet._disposed = true;\n if (packet._owner) {\n const oi = packet._owner.indexOf(packet);\n if (oi >= 0) {\n packet._owner.splice(oi, 1);\n }\n packet._owner = undefined;\n }\n packet.systemUBO.destroy();\n for (const tex of packet._boundTextures) {\n releaseTexture(tex);\n }\n packet._boundTextures = [];\n });\n scene._meshDisposables.set(mesh, list);\n}\n\nfunction writeSystemUniforms(data: Float32Array, spec: UboSpec, material: ShaderMaterial, mesh: Mesh, camera: Camera | null, targetWidth: number, targetHeight: number): void {\n data.fill(0);\n const world = mesh.worldMatrix as unknown as Float32Array;\n const aspect = camera ? getEffectiveAspectRatio(camera, targetWidth, targetHeight) : 1;\n const view = camera ? (getViewMatrix(camera) as unknown as Float32Array) : null;\n const projection = camera ? (getProjectionMatrix(camera, aspect) as unknown as Float32Array) : null;\n const viewProjection = camera ? (getViewProjectionMatrix(camera, aspect) as unknown as Float32Array) : null;\n for (const uniform of material.uniformDecls) {\n if (!_isShaderSystemUniform(uniform.name)) {\n continue;\n }\n const offset = spec._offsets.get(uniform.name);\n if (offset === undefined) {\n continue;\n }\n const f = offset / 4;\n switch (uniform.name) {\n case \"world\":\n data.set(world, f);\n break;\n case \"view\":\n if (view) {\n data.set(view, f);\n }\n break;\n case \"projection\":\n if (projection) {\n data.set(projection, f);\n }\n break;\n case \"viewProjection\":\n if (viewProjection) {\n data.set(viewProjection, f);\n }\n break;\n case \"worldView\":\n if (view) {\n mat4MultiplyInto(data, f, view, 0, world, 0);\n }\n break;\n case \"worldViewProjection\":\n if (viewProjection) {\n mat4MultiplyInto(data, f, viewProjection, 0, world, 0);\n }\n break;\n case \"cameraPosition\":\n if (camera) {\n const wm = camera.worldMatrix as unknown as ArrayLike<number>;\n data[f] = wm[12]!;\n data[f + 1] = wm[13]!;\n data[f + 2] = wm[14]!;\n }\n break;\n case \"screenSize\":\n data[f] = targetWidth;\n data[f + 1] = targetHeight;\n break;\n case \"alphaCutoff\":\n data[f] = material._uniformValues.get(\"alphaCutoff\")?.value[0] ?? 0.4;\n break;\n }\n }\n}\n\nlet zeroAttrCache: WeakMap<object, Map<string, GPUBuffer>> | null = null;\n\nfunction getZeroAttrBuffer(engine: EngineContext, gpu: MeshGPU, name: string): GPUBuffer {\n if (!zeroAttrCache) {\n zeroAttrCache = new WeakMap();\n }\n let cache = zeroAttrCache.get(gpu as unknown as object);\n if (!cache) {\n cache = new Map();\n zeroAttrCache.set(gpu as unknown as object, cache);\n }\n const existing = cache.get(name);\n if (existing) {\n return existing;\n }\n const vertexCount = gpu.positionBuffer.size / 12;\n const stride = name === \"uv\" || name === \"uv2\" ? 8 : name === \"normal\" ? 12 : 16;\n const buffer = engine._device.createBuffer({ label: `shader-zero-${name}`, size: vertexCount * stride, usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST });\n cache.set(name, buffer);\n return buffer;\n}\n\nfunction getAttrBuffer(engine: EngineContext, gpu: MeshGPU, name: ShaderAttributeName): GPUBuffer {\n switch (name) {\n case \"position\":\n return gpu.positionBuffer;\n case \"normal\":\n return gpu.normalBuffer ?? getZeroAttrBuffer(engine, gpu, \"normal\");\n case \"uv\":\n return gpu.uvBuffer ?? getZeroAttrBuffer(engine, gpu, \"uv\");\n case \"uv2\":\n return gpu.uv2Buffer ?? getZeroAttrBuffer(engine, gpu, \"uv2\");\n case \"tangent\":\n return gpu.tangentBuffer ?? getZeroAttrBuffer(engine, gpu, \"tangent\");\n case \"color\":\n return gpu.colorBuffer ?? getZeroAttrBuffer(engine, gpu, \"color\");\n }\n}\n"],"names":[],"mappings":"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"}
|