@zephyr3d/scene 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animation.js +149 -27
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +173 -73
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +65 -10
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +41 -20
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +14 -38
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +59 -22
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +190 -0
- package/dist/animation/proptrack.js.map +1 -0
- package/dist/animation/rotationtrack.js +29 -11
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +29 -11
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +241 -78
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +30 -11
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +43 -0
- package/dist/app/api.js.map +1 -0
- package/dist/app/app.js +153 -0
- package/dist/app/app.js.map +1 -0
- package/dist/app/engine.js +312 -0
- package/dist/app/engine.js.map +1 -0
- package/dist/app/inputmgr.js +351 -0
- package/dist/app/inputmgr.js.map +1 -0
- package/dist/app/runtimescript.js +62 -0
- package/dist/app/runtimescript.js.map +1 -0
- package/dist/app/scriptingsystem.js +220 -0
- package/dist/app/scriptingsystem.js.map +1 -0
- package/dist/app/scriptregistry.js +432 -0
- package/dist/app/scriptregistry.js.map +1 -0
- package/dist/asset/assetmanager.js +772 -291
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +7 -43
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +17 -93
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +8 -18
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +27 -14
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +17 -12
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +13 -16
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js +51 -50
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +158 -4
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +0 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +22 -23
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js +23 -23
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +141 -34
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +653 -149
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +2 -10
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +132 -59
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +37 -12
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +37 -20
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +18268 -6982
- package/dist/index.js +49 -16
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +5 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js +6 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js +6 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +346 -73
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +498 -156
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +5 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js +3 -3
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +6 -6
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +16 -4
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js +134 -0
- package/dist/material/mixins/pbr/brdf.js.map +1 -0
- package/dist/material/mixins/pbr/common.js +68 -85
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +98 -83
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +6 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js +272 -0
- package/dist/material/particle.js.map +1 -0
- package/dist/material/pbrblueprint.js +186 -0
- package/dist/material/pbrblueprint.js.map +1 -0
- package/dist/material/pbrmr.js +10 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +10 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +521 -287
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/terrain-cm.js +607 -0
- package/dist/material/terrain-cm.js.map +1 -0
- package/dist/material/terrainmaterial.js +59 -54
- package/dist/material/terrainmaterial.js.map +1 -1
- package/dist/material/unlit.js +5 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +415 -0
- package/dist/material/water.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
- package/dist/posteffect/bloom.js +39 -54
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +95 -128
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +10 -18
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +9 -17
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +105 -0
- package/dist/posteffect/motionblur.js.map +1 -0
- package/dist/posteffect/posteffect.js +66 -35
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +13 -21
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +60 -100
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js +175 -0
- package/dist/posteffect/taa.js.map +1 -0
- package/dist/posteffect/tonemap.js +12 -20
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +30 -19
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +429 -101
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +7 -5
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +43 -3
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +14 -5
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +113 -40
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +86 -141
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +234 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -0
- package/dist/render/fft_wavegenerator.js +64 -50
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js +2 -2
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +98 -48
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +4 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +6 -3
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +19 -18
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +4 -4
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +213 -104
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +40 -20
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderbundle_wrapper.js +65 -15
- package/dist/render/renderbundle_wrapper.js.map +1 -1
- package/dist/render/renderer.js +326 -185
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +20 -36
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/shadowmap_pass.js +3 -3
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +864 -541
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +13 -15
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/batchgroup.js +18 -5
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +78 -48
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js +2 -3
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +28 -89
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +218 -87
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js +371 -162
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +684 -0
- package/dist/scene/particlesys.js.map +1 -0
- package/dist/scene/raycast_visitor.js +34 -5
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +309 -85
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +675 -102
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain/grass.js +48 -49
- package/dist/scene/terrain/grass.js.map +1 -1
- package/dist/scene/terrain/heightfield.js +46 -44
- package/dist/scene/terrain/heightfield.js.map +1 -1
- package/dist/scene/terrain/patch.js +20 -29
- package/dist/scene/terrain/patch.js.map +1 -1
- package/dist/scene/terrain/quadtree.js +58 -27
- package/dist/scene/terrain/quadtree.js.map +1 -1
- package/dist/scene/terrain/terrain.js +31 -45
- package/dist/scene/terrain/terrain.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +603 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +160 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js +533 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/scene/water.js +378 -0
- package/dist/scene/water.js.map +1 -0
- package/dist/shaders/atmosphere.js +957 -0
- package/dist/shaders/atmosphere.js.map +1 -0
- package/dist/shaders/fog.js +116 -0
- package/dist/shaders/fog.js.map +1 -0
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +217 -8
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js +8 -8
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js +87 -39
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +216 -0
- package/dist/shaders/temporal.js.map +1 -0
- package/dist/shaders/water.js +42 -20
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +31 -13
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +12 -13
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +12 -13
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +38 -0
- package/dist/shadow/shader.js.map +1 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +67 -26
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +15 -16
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +33 -16
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +181 -83
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +101 -43
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +70 -29
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +120 -17
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +78 -44
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +256 -0
- package/dist/shapes/tetrahedron.js.map +1 -0
- package/dist/shapes/torus.js +76 -55
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/{app.js → src/app/app.js} +18 -40
- package/dist/src/app/app.js.map +1 -0
- package/dist/{input → src/app}/inputmgr.js +41 -16
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/utility/aabbtree.js +15 -5
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +851 -0
- package/dist/utility/blueprint/common/constants.js.map +1 -0
- package/dist/utility/blueprint/common/math.js +2045 -0
- package/dist/utility/blueprint/common/math.js.map +1 -0
- package/dist/utility/blueprint/common.js +7 -0
- package/dist/utility/blueprint/common.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/func.js +521 -0
- package/dist/utility/blueprint/material/func.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1659 -0
- package/dist/utility/blueprint/material/inputs.js.map +1 -0
- package/dist/utility/blueprint/material/ir.js +1311 -0
- package/dist/utility/blueprint/material/ir.js.map +1 -0
- package/dist/utility/blueprint/material/pbr.js +362 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -0
- package/dist/utility/blueprint/material/texture.js +1099 -0
- package/dist/utility/blueprint/material/texture.js.map +1 -0
- package/dist/utility/blueprint/node.js +187 -0
- package/dist/utility/blueprint/node.js.map +1 -0
- package/dist/utility/bounding_volume.js +0 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js +26 -0
- package/dist/utility/debug.js.map +1 -0
- package/dist/utility/draco/decoder.js +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +18 -6
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js +8 -6
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js +30 -18
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js +116 -0
- package/dist/utility/rendermipmap.js.map +1 -0
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/json.js +402 -0
- package/dist/utility/serialization/json.js.map +1 -0
- package/dist/utility/serialization/manager.js +1176 -0
- package/dist/utility/serialization/manager.js.map +1 -0
- package/dist/utility/serialization/scene/animation.js +699 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -0
- package/dist/utility/serialization/scene/batch.js +53 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -0
- package/dist/utility/serialization/scene/camera.js +808 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +224 -0
- package/dist/utility/serialization/scene/common.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +589 -0
- package/dist/utility/serialization/scene/light.js.map +1 -0
- package/dist/utility/serialization/scene/material.js +942 -0
- package/dist/utility/serialization/scene/material.js.map +1 -0
- package/dist/utility/serialization/scene/mesh.js +374 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/utility/serialization/scene/misc.js +39 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -0
- package/dist/utility/serialization/scene/node.js +391 -0
- package/dist/utility/serialization/scene/node.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +425 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +582 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/utility/serialization/scene/scene.js +763 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +495 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +465 -0
- package/dist/utility/serialization/scene/water.js.map +1 -0
- package/dist/utility/shprojector.js +313 -0
- package/dist/utility/shprojector.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +4 -5
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js +2 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js +1 -0
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +91 -4
- package/dist/values.js.map +1 -1
- package/package.json +29 -15
- package/dist/app.js.map +0 -1
- package/dist/blitter/depthlimitedgaussion.js.map +0 -1
- package/dist/input/inputmgr.js.map +0 -1
- package/dist/material/mixins/ggxlut.js.map +0 -1
- package/dist/posteffect/water.js +0 -508
- package/dist/posteffect/water.js.map +0 -1
- package/dist/render/oit.js +0 -16
- package/dist/render/oit.js.map +0 -1
- package/dist/render/scatteringlut.js +0 -634
- package/dist/render/scatteringlut.js.map +0 -1
- package/dist/render/watermesh.js +0 -193
- package/dist/render/watermesh.js.map +0 -1
- package/dist/render/wavegenerator.js +0 -8
- package/dist/render/wavegenerator.js.map +0 -1
- package/dist/scene/xform.js +0 -247
- package/dist/scene/xform.js.map +0 -1
- package/dist/utility/shprojection.js +0 -442
- package/dist/utility/shprojection.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightpass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"lightpass.js","sources":["../../src/render/lightpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { RenderItemListBundle, RenderQueue } from './render_queue';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { PostEffectLayer } from '../posteffect/posteffect';\r\n\r\n/**\r\n * Forward render pass\r\n * @internal\r\n */\r\nexport class LightPass extends RenderPass {\r\n /** @internal */\r\n protected _shadowMapHash: string;\r\n /** @internal */\r\n protected _transmission: boolean;\r\n /**\r\n * Creates an instance of ForwardRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_LIGHT);\r\n this._shadowMapHash = null;\r\n this._clearColor = Vector4.zero();\r\n }\r\n /** @internal */\r\n get transmission(): boolean {\r\n return this._transmission;\r\n }\r\n set transmission(val: boolean) {\r\n this._transmission = val;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${this._shadowMapHash}:${ctx.oit?.calculateHash() ?? ''}:${ctx.env.getHash(ctx)}:${\r\n ctx.materialFlags\r\n }:${ctx.linearDepthTexture?.uid ?? 0}:${ctx.sceneColorTexture?.uid ?? 0}:${ctx.HiZTexture?.uid ?? 0}`;\r\n }\r\n /** @internal */\r\n protected renderLightPass(\r\n ctx: DrawContext,\r\n itemList: RenderItemListBundle,\r\n lights: PunctualLight[],\r\n flags: any\r\n ) {\r\n const baseLightPass = !ctx.lightBlending;\r\n ctx.drawEnvLight =\r\n baseLightPass &&\r\n ctx.env.light.type !== 'none' &&\r\n (ctx.env.light.envLight.hasRadiance() || ctx.env.light.envLight.hasIrradiance());\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n if (!flags.cameraSet[ctx.renderPassHash]) {\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, !!ctx.device.getFramebuffer());\r\n flags.cameraSet[ctx.renderPassHash] = 1;\r\n }\r\n if (ctx.currentShadowLight) {\r\n ShaderHelper.setLightUniformsShadow(bindGroup, ctx, lights[0]);\r\n } else {\r\n if (!flags.lightSet[ctx.renderPassHash]) {\r\n ShaderHelper.setLightUniforms(\r\n bindGroup,\r\n ctx,\r\n ctx.clusteredLight.clusterParam,\r\n ctx.clusteredLight.countParam,\r\n ctx.clusteredLight.lightBuffer,\r\n ctx.clusteredLight.lightIndexTexture\r\n );\r\n flags.lightSet[ctx.renderPassHash] = 1;\r\n }\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG && !flags.fogSet[ctx.renderPassHash]) {\r\n ShaderHelper.setFogUniforms(\r\n bindGroup,\r\n ctx.env.sky.skyType === 'scatter' ? 1 : 0,\r\n ctx.env.sky.mappedFogType,\r\n baseLightPass ? 0 : 1,\r\n ctx.env.sky.atmosphereParams,\r\n ctx.env.sky.heightFogParams,\r\n ctx.env.sky.getAerialPerspectiveLUT(ctx),\r\n ctx.env.sky.getSkyDistantLightLUT(ctx)\r\n );\r\n flags.fogSet[ctx.renderPassHash] = 1;\r\n }\r\n ctx.device.setBindGroup(0, bindGroup);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const lit of itemList.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n if (!ctx.lightBlending) {\r\n for (const unlit of itemList.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n ctx.fogFlags = 0;\r\n ctx.renderPassHash = null;\r\n ctx.env = ctx.scene.env;\r\n ctx.drawEnvLight = false;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n const ssr = !!(ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS);\r\n const tmpFramebuffer = ssr\r\n ? ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n ctx.device.getDrawingBufferWidth(),\r\n ctx.device.getDrawingBufferHeight(),\r\n ctx.device.getFramebuffer().getColorAttachments()[0],\r\n ctx.device.getFramebuffer().getDepthAttachment()\r\n )\r\n : null;\r\n const oit =\r\n renderQueue.drawTransparent &&\r\n ctx.primaryCamera.oit &&\r\n ctx.primaryCamera.oit.supportDevice(ctx.device.type)\r\n ? ctx.primaryCamera.oit\r\n : null;\r\n if (!oit && renderQueue.drawTransparent) {\r\n renderQueue.sortTransparentItems(ctx.primaryCamera.getWorldPosition());\r\n }\r\n const flags: any = {\r\n lightSet: {},\r\n cameraSet: {},\r\n fogSet: {}\r\n };\r\n const items = renderQueue.itemList;\r\n const lists = this._transmission\r\n ? [items?.transmission, items?.transmission_trans, items?.transparent]\r\n : [items?.opaque, items?.transparent];\r\n const transparentPass = lists.length - 1;\r\n for (let i = 0; i < lists.length; i++) {\r\n if (lists[i]) {\r\n ctx.queue = i === 0 ? QUEUE_OPAQUE : QUEUE_TRANSPARENT;\r\n ctx.oit = i === 0 || !items ? null : oit;\r\n if ((ctx.queue === QUEUE_TRANSPARENT || this._transmission) && ctx.scene.env.sky.fogPresents) {\r\n ctx.materialFlags |= MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n const numOitPasses = ctx.oit ? ctx.oit.begin(ctx) : 1;\r\n for (let p = 0; p < numOitPasses; p++) {\r\n if (ctx.oit) {\r\n if (!ctx.oit.beginPass(ctx, p)) {\r\n continue;\r\n }\r\n }\r\n let lightIndex = 0;\r\n if (ctx.shadowMapInfo) {\r\n for (const k of ctx.shadowMapInfo.keys()) {\r\n ctx.currentShadowLight = k;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = ctx.shadowMapInfo.get(k).shaderHash;\r\n this.renderLightPass(ctx, lists[i], [k], flags);\r\n lightIndex++;\r\n }\r\n }\r\n if (lightIndex === 0 || renderQueue.unshadowedLights.length > 0) {\r\n ctx.currentShadowLight = null;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = '';\r\n if (ctx.lightBlending && tmpFramebuffer) {\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n this.renderLightPass(ctx, lists[i], renderQueue.unshadowedLights, flags);\r\n if (ctx.lightBlending && tmpFramebuffer) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.endPass(ctx, p);\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.end(ctx);\r\n }\r\n ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n if (i === 0 && !ctx.sceneColorTexture) {\r\n if (tmpFramebuffer) {\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n ctx.env.sky.skyWorldMatrix = ctx.scene.rootNode.worldMatrix;\r\n ctx.env.sky.renderSky(ctx);\r\n if (ctx.env.sky.fogPresents) {\r\n ctx.env.sky.renderFog(ctx.camera);\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (!renderQueue.needSceneColor() || ctx.sceneColorTexture) {\r\n if (i === 0 || i === transparentPass) {\r\n ctx.compositor?.drawPostEffects(\r\n ctx,\r\n i === 0 ? PostEffectLayer.opaque : PostEffectLayer.transparent,\r\n ctx.linearDepthTexture\r\n );\r\n }\r\n }\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.pool.releaseFrameBuffer(tmpFramebuffer);\r\n }\r\n }\r\n}\r\n"],"names":["LightPass","RenderPass","RENDER_PASS_TYPE_LIGHT","_shadowMapHash","_clearColor","Vector4","zero","transmission","_transmission","val","_getGlobalBindGroupHash","ctx","oit","calculateHash","env","getHash","materialFlags","linearDepthTexture","uid","sceneColorTexture","HiZTexture","renderLightPass","itemList","lights","flags","baseLightPass","lightBlending","drawEnvLight","light","type","envLight","hasRadiance","hasIrradiance","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","cameraSet","ShaderHelper","setCameraUniforms","device","getFramebuffer","currentShadowLight","setLightUniformsShadow","lightSet","setLightUniforms","clusteredLight","clusterParam","countParam","lightBuffer","lightIndexTexture","MaterialVaryingFlags","APPLY_FOG","fogSet","setFogUniforms","sky","skyType","mappedFogType","atmosphereParams","heightFogParams","getAerialPerspectiveLUT","getSkyDistantLightLUT","setBindGroup","reverseWinding","camera","worldMatrixDet","lit","drawItemList","unlit","renderItems","renderQueue","fogFlags","scene","flip","isAutoFlip","ssr","SSR_STORE_ROUGHNESS","tmpFramebuffer","pool","fetchTemporalFramebuffer","getDrawingBufferWidth","getDrawingBufferHeight","getColorAttachments","getDepthAttachment","drawTransparent","primaryCamera","supportDevice","sortTransparentItems","getWorldPosition","items","lists","transmission_trans","transparent","opaque","transparentPass","length","i","queue","QUEUE_OPAQUE","QUEUE_TRANSPARENT","fogPresents","numOitPasses","begin","p","beginPass","lightIndex","shadowMapInfo","k","keys","get","shaderHash","unshadowedLights","pushDeviceStates","setFramebuffer","popDeviceStates","endPass","end","skyWorldMatrix","rootNode","worldMatrix","renderSky","renderFog","needSceneColor","compositor","drawPostEffects","PostEffectLayer","releaseFrameBuffer"],"mappings":";;;;;;AASA;;;IAIO,MAAMA,SAAkBC,SAAAA,UAAAA,CAAAA;qBAE7B,cAAiC;qBAEjC,aAAiC;AACjC;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,sBAAAA,CAAAA;QACN,IAAI,CAACC,cAAc,GAAG,IAAA;AACtB,QAAA,IAAI,CAACC,WAAW,GAAGC,OAAAA,CAAQC,IAAI,EAAA;AACjC;qBAEA,IAAIC,YAAwB,GAAA;QAC1B,OAAO,IAAI,CAACC,aAAa;AAC3B;IACA,IAAID,YAAAA,CAAaE,GAAY,EAAE;QAC7B,IAAI,CAACD,aAAa,GAAGC,GAAAA;AACvB;AACA,qBACUC,uBAAwBC,CAAAA,GAAgB,EAAE;QAClD,OAAO,CAAA,EAAG,IAAI,CAACR,cAAc,CAAC,CAAC,EAAEQ,IAAIC,GAAG,EAAEC,mBAAmB,EAAG,CAAA,CAAC,EAAEF,GAAIG,CAAAA,GAAG,CAACC,OAAO,CAACJ,KAAK,CAAC,EACvFA,IAAIK,aAAa,CAClB,CAAC,EAAEL,GAAAA,CAAIM,kBAAkB,EAAEC,GAAAA,IAAO,EAAE,CAAC,EAAEP,IAAIQ,iBAAiB,EAAED,OAAO,CAAE,CAAA,CAAC,EAAEP,GAAIS,CAAAA,UAAU,EAAEF,GAAAA,IAAO,CAAG,CAAA,CAAA;AACvG;qBAEA,eAAUG,CACRV,GAAgB,EAChBW,QAA8B,EAC9BC,MAAuB,EACvBC,KAAU,EACV;QACA,MAAMC,aAAAA,GAAgB,CAACd,GAAAA,CAAIe,aAAa;AACxCf,QAAAA,GAAAA,CAAIgB,YAAY,GACdF,aACAd,IAAAA,GAAAA,CAAIG,GAAG,CAACc,KAAK,CAACC,IAAI,KAAK,MACtBlB,KAAAA,GAAIG,CAAAA,GAAG,CAACc,KAAK,CAACE,QAAQ,CAACC,WAAW,EAAMpB,IAAAA,GAAAA,CAAIG,GAAG,CAACc,KAAK,CAACE,QAAQ,CAACE,aAAa,EAAC,CAAA;AAChFrB,QAAAA,GAAAA,CAAIsB,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACvB,GAAAA,CAAAA;AACjD,QAAA,MAAMwB,SAAYxB,GAAAA,GAAAA,CAAIyB,wBAAwB,CAACC,kBAAkB,CAAC1B,GAAAA,CAAAA;AAClE,QAAA,IAAI,CAACa,KAAMc,CAAAA,SAAS,CAAC3B,GAAIsB,CAAAA,cAAc,CAAC,EAAE;YACxCM,YAAaC,CAAAA,iBAAiB,CAACL,SAAWxB,EAAAA,GAAAA,EAAK,CAAC,CAACA,GAAAA,CAAI8B,MAAM,CAACC,cAAc,EAAA,CAAA;AAC1ElB,YAAAA,KAAAA,CAAMc,SAAS,CAAC3B,GAAIsB,CAAAA,cAAc,CAAC,GAAG,CAAA;AACxC;QACA,IAAItB,GAAAA,CAAIgC,kBAAkB,EAAE;AAC1BJ,YAAAA,YAAAA,CAAaK,sBAAsB,CAACT,SAAAA,EAAWxB,GAAKY,EAAAA,MAAM,CAAC,CAAE,CAAA,CAAA;SACxD,MAAA;AACL,YAAA,IAAI,CAACC,KAAMqB,CAAAA,QAAQ,CAAClC,GAAIsB,CAAAA,cAAc,CAAC,EAAE;gBACvCM,YAAaO,CAAAA,gBAAgB,CAC3BX,SACAxB,EAAAA,GAAAA,EACAA,IAAIoC,cAAc,CAACC,YAAY,EAC/BrC,GAAIoC,CAAAA,cAAc,CAACE,UAAU,EAC7BtC,IAAIoC,cAAc,CAACG,WAAW,EAC9BvC,GAAAA,CAAIoC,cAAc,CAACI,iBAAiB,CAAA;AAEtC3B,gBAAAA,KAAAA,CAAMqB,QAAQ,CAAClC,GAAIsB,CAAAA,cAAc,CAAC,GAAG,CAAA;AACvC;AACF;AACA,QAAA,IAAItB,GAAIK,CAAAA,aAAa,GAAGoC,oBAAAA,CAAqBC,SAAS,IAAI,CAAC7B,KAAAA,CAAM8B,MAAM,CAAC3C,GAAIsB,CAAAA,cAAc,CAAC,EAAE;YAC3FM,YAAagB,CAAAA,cAAc,CACzBpB,SACAxB,EAAAA,GAAAA,CAAIG,GAAG,CAAC0C,GAAG,CAACC,OAAO,KAAK,SAAA,GAAY,IAAI,CACxC9C,EAAAA,GAAAA,CAAIG,GAAG,CAAC0C,GAAG,CAACE,aAAa,EACzBjC,aAAAA,GAAgB,CAAI,GAAA,CAAA,EACpBd,GAAIG,CAAAA,GAAG,CAAC0C,GAAG,CAACG,gBAAgB,EAC5BhD,GAAIG,CAAAA,GAAG,CAAC0C,GAAG,CAACI,eAAe,EAC3BjD,GAAIG,CAAAA,GAAG,CAAC0C,GAAG,CAACK,uBAAuB,CAAClD,GACpCA,CAAAA,EAAAA,GAAAA,CAAIG,GAAG,CAAC0C,GAAG,CAACM,qBAAqB,CAACnD,GAAAA,CAAAA,CAAAA;AAEpCa,YAAAA,KAAAA,CAAM8B,MAAM,CAAC3C,GAAIsB,CAAAA,cAAc,CAAC,GAAG,CAAA;AACrC;AACAtB,QAAAA,GAAAA,CAAI8B,MAAM,CAACsB,YAAY,CAAC,CAAG5B,EAAAA,SAAAA,CAAAA;AAC3B,QAAA,MAAM6B,cAAiBrD,GAAAA,GAAAA,CAAIsD,MAAM,CAACC,cAAc,GAAG,CAAA;AACnD,QAAA,KAAK,MAAMC,GAAAA,IAAO7C,QAAS6C,CAAAA,GAAG,CAAE;AAC9B,YAAA,IAAI,CAACC,YAAY,CAACD,GAAAA,EAAKxD,GAAKqD,EAAAA,cAAAA,CAAAA;AAC9B;QACA,IAAI,CAACrD,GAAIe,CAAAA,aAAa,EAAE;AACtB,YAAA,KAAK,MAAM2C,KAAAA,IAAS/C,QAAS+C,CAAAA,KAAK,CAAE;AAClC,gBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO1D,GAAKqD,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACA,qBACA,WAAUM,CAAY3D,GAAgB,EAAE4D,WAAwB,EAAE;AAChE5D,QAAAA,GAAAA,CAAI6D,QAAQ,GAAG,CAAA;AACf7D,QAAAA,GAAAA,CAAIsB,cAAc,GAAG,IAAA;AACrBtB,QAAAA,GAAAA,CAAIG,GAAG,GAAGH,GAAI8D,CAAAA,KAAK,CAAC3D,GAAG;AACvBH,QAAAA,GAAAA,CAAIgB,YAAY,GAAG,KAAA;AACnBhB,QAAAA,GAAAA,CAAI+D,IAAI,GAAG,IAAI,CAACC,UAAU,CAAChE,GAAAA,CAAAA;QAC3B,MAAMiE,GAAAA,GAAM,CAAC,EAAEjE,IAAIK,aAAa,GAAGoC,oBAAqByB,CAAAA,mBAAmB,CAAD;AAC1E,QAAA,MAAMC,iBAAiBF,GACnBjE,GAAAA,GAAAA,CAAI8B,MAAM,CAACsC,IAAI,CAACC,wBAAwB,CACtC,KAAA,EACArE,IAAI8B,MAAM,CAACwC,qBAAqB,EAAA,EAChCtE,IAAI8B,MAAM,CAACyC,sBAAsB,EAAA,EACjCvE,IAAI8B,MAAM,CAACC,cAAc,EAAA,CAAGyC,mBAAmB,EAAE,CAAC,CAAE,CAAA,EACpDxE,IAAI8B,MAAM,CAACC,cAAc,EAAA,CAAG0C,kBAAkB,EAEhD,CAAA,GAAA,IAAA;QACJ,MAAMxE,GAAAA,GACJ2D,WAAYc,CAAAA,eAAe,IAC3B1E,GAAAA,CAAI2E,aAAa,CAAC1E,GAAG,IACrBD,GAAAA,CAAI2E,aAAa,CAAC1E,GAAG,CAAC2E,aAAa,CAAC5E,GAAAA,CAAI8B,MAAM,CAACZ,IAAI,CAAA,GAC/ClB,GAAI2E,CAAAA,aAAa,CAAC1E,GAAG,GACrB,IAAA;AACN,QAAA,IAAI,CAACA,GAAAA,IAAO2D,WAAYc,CAAAA,eAAe,EAAE;AACvCd,YAAAA,WAAAA,CAAYiB,oBAAoB,CAAC7E,GAAI2E,CAAAA,aAAa,CAACG,gBAAgB,EAAA,CAAA;AACrE;AACA,QAAA,MAAMjE,KAAa,GAAA;AACjBqB,YAAAA,QAAAA,EAAU,EAAC;AACXP,YAAAA,SAAAA,EAAW,EAAC;AACZgB,YAAAA,MAAAA,EAAQ;AACV,SAAA;QACA,MAAMoC,KAAAA,GAAQnB,YAAYjD,QAAQ;AAClC,QAAA,MAAMqE,KAAQ,GAAA,IAAI,CAACnF,aAAa,GAC5B;YAACkF,KAAOnF,EAAAA,YAAAA;YAAcmF,KAAOE,EAAAA,kBAAAA;YAAoBF,KAAOG,EAAAA;SAAY,GACpE;YAACH,KAAOI,EAAAA,MAAAA;YAAQJ,KAAOG,EAAAA;AAAY,SAAA;QACvC,MAAME,eAAAA,GAAkBJ,KAAMK,CAAAA,MAAM,GAAG,CAAA;AACvC,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIN,KAAMK,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;YACrC,IAAIN,KAAK,CAACM,CAAAA,CAAE,EAAE;AACZtF,gBAAAA,GAAAA,CAAIuF,KAAK,GAAGD,CAAM,KAAA,CAAA,GAAIE,YAAeC,GAAAA,iBAAAA;AACrCzF,gBAAAA,GAAAA,CAAIC,GAAG,GAAGqF,CAAAA,KAAM,CAAK,IAAA,CAACP,QAAQ,IAAO9E,GAAAA,GAAAA;AACrC,gBAAA,IAAI,CAACD,GAAAA,CAAIuF,KAAK,KAAKE,iBAAAA,IAAqB,IAAI,CAAC5F,aAAa,KAAKG,GAAAA,CAAI8D,KAAK,CAAC3D,GAAG,CAAC0C,GAAG,CAAC6C,WAAW,EAAE;oBAC5F1F,GAAIK,CAAAA,aAAa,IAAIoC,oBAAAA,CAAqBC,SAAS;AACrD;gBACA,MAAMiD,YAAAA,GAAe3F,IAAIC,GAAG,GAAGD,IAAIC,GAAG,CAAC2F,KAAK,CAAC5F,GAAO,CAAA,GAAA,CAAA;AACpD,gBAAA,IAAK,IAAI6F,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIF,cAAcE,CAAK,EAAA,CAAA;oBACrC,IAAI7F,GAAAA,CAAIC,GAAG,EAAE;AACX,wBAAA,IAAI,CAACD,GAAIC,CAAAA,GAAG,CAAC6F,SAAS,CAAC9F,KAAK6F,CAAI,CAAA,EAAA;AAC9B,4BAAA;AACF;AACF;AACA,oBAAA,IAAIE,UAAa,GAAA,CAAA;oBACjB,IAAI/F,GAAAA,CAAIgG,aAAa,EAAE;AACrB,wBAAA,KAAK,MAAMC,CAAKjG,IAAAA,GAAAA,CAAIgG,aAAa,CAACE,IAAI,EAAI,CAAA;AACxClG,4BAAAA,GAAAA,CAAIgC,kBAAkB,GAAGiE,CAAAA;4BACzBjG,GAAIe,CAAAA,aAAa,GAAGgF,UAAa,GAAA,CAAA;4BACjC,IAAI,CAACvG,cAAc,GAAGQ,GAAAA,CAAIgG,aAAa,CAACG,GAAG,CAACF,CAAAA,CAAAA,CAAGG,UAAU;AACzD,4BAAA,IAAI,CAAC1F,eAAe,CAACV,KAAKgF,KAAK,CAACM,EAAE,EAAE;AAACW,gCAAAA;6BAAE,EAAEpF,KAAAA,CAAAA;AACzCkF,4BAAAA,UAAAA,EAAAA;AACF;AACF;AACA,oBAAA,IAAIA,eAAe,CAAKnC,IAAAA,WAAAA,CAAYyC,gBAAgB,CAAChB,MAAM,GAAG,CAAG,EAAA;AAC/DrF,wBAAAA,GAAAA,CAAIgC,kBAAkB,GAAG,IAAA;wBACzBhC,GAAIe,CAAAA,aAAa,GAAGgF,UAAa,GAAA,CAAA;wBACjC,IAAI,CAACvG,cAAc,GAAG,EAAA;wBACtB,IAAIQ,GAAAA,CAAIe,aAAa,IAAIoD,cAAgB,EAAA;AACvCnE,4BAAAA,GAAAA,CAAIK,aAAa,IAAI,CAACoC,oBAAAA,CAAqByB,mBAAmB;4BAC9DlE,GAAI8B,CAAAA,MAAM,CAACwE,gBAAgB,EAAA;4BAC3BtG,GAAI8B,CAAAA,MAAM,CAACyE,cAAc,CAACpC,cAAAA,CAAAA;AAC5B;wBACA,IAAI,CAACzD,eAAe,CAACV,GAAKgF,EAAAA,KAAK,CAACM,CAAE,CAAA,EAAE1B,WAAYyC,CAAAA,gBAAgB,EAAExF,KAAAA,CAAAA;wBAClE,IAAIb,GAAAA,CAAIe,aAAa,IAAIoD,cAAgB,EAAA;4BACvCnE,GAAIK,CAAAA,aAAa,IAAIoC,oBAAAA,CAAqByB,mBAAmB;4BAC7DlE,GAAI8B,CAAAA,MAAM,CAAC0E,eAAe,EAAA;AAC5B;AACF;oBACA,IAAIxG,GAAAA,CAAIC,GAAG,EAAE;AACXD,wBAAAA,GAAAA,CAAIC,GAAG,CAACwG,OAAO,CAACzG,GAAK6F,EAAAA,CAAAA,CAAAA;AACvB;AACF;gBACA,IAAI7F,GAAAA,CAAIC,GAAG,EAAE;oBACXD,GAAIC,CAAAA,GAAG,CAACyG,GAAG,CAAC1G,GAAAA,CAAAA;AACd;AACAA,gBAAAA,GAAAA,CAAIK,aAAa,IAAI,CAACoC,oBAAAA,CAAqBC,SAAS;AACtD;AACA,YAAA,IAAI4C,CAAM,KAAA,CAAA,IAAK,CAACtF,GAAAA,CAAIQ,iBAAiB,EAAE;AACrC,gBAAA,IAAI2D,cAAgB,EAAA;oBAClBnE,GAAI8B,CAAAA,MAAM,CAACwE,gBAAgB,EAAA;oBAC3BtG,GAAI8B,CAAAA,MAAM,CAACyE,cAAc,CAACpC,cAAAA,CAAAA;AAC5B;gBACAnE,GAAIG,CAAAA,GAAG,CAAC0C,GAAG,CAAC8D,cAAc,GAAG3G,GAAAA,CAAI8D,KAAK,CAAC8C,QAAQ,CAACC,WAAW;AAC3D7G,gBAAAA,GAAAA,CAAIG,GAAG,CAAC0C,GAAG,CAACiE,SAAS,CAAC9G,GAAAA,CAAAA;AACtB,gBAAA,IAAIA,IAAIG,GAAG,CAAC0C,GAAG,CAAC6C,WAAW,EAAE;AAC3B1F,oBAAAA,GAAAA,CAAIG,GAAG,CAAC0C,GAAG,CAACkE,SAAS,CAAC/G,IAAIsD,MAAM,CAAA;AAClC;AACA,gBAAA,IAAIa,cAAgB,EAAA;oBAClBnE,GAAI8B,CAAAA,MAAM,CAAC0E,eAAe,EAAA;AAC5B;AACF;AACA,YAAA,IAAI,CAAC5C,WAAYoD,CAAAA,cAAc,EAAMhH,IAAAA,GAAAA,CAAIQ,iBAAiB,EAAE;gBAC1D,IAAI8E,CAAAA,KAAM,CAAKA,IAAAA,CAAAA,KAAMF,eAAiB,EAAA;AACpCpF,oBAAAA,GAAAA,CAAIiH,UAAU,EAAEC,eACdlH,CAAAA,GAAAA,EACAsF,CAAM,KAAA,CAAA,GAAI6B,eAAgBhC,CAAAA,MAAM,GAAGgC,eAAAA,CAAgBjC,WAAW,EAC9DlF,IAAIM,kBAAkB,CAAA;AAE1B;AACF;AACF;AACA,QAAA,IAAI6D,cAAgB,EAAA;AAClBnE,YAAAA,GAAAA,CAAI8B,MAAM,CAACsC,IAAI,CAACgD,kBAAkB,CAACjD,cAAAA,CAAAA;AACrC;AACF;AACF;;;;"}
|
|
@@ -11,13 +11,13 @@ import { ShaderHelper } from '../material/shader/helper.js';
|
|
|
11
11
|
*/ constructor(){
|
|
12
12
|
super(RENDER_PASS_TYPE_OBJECT_COLOR);
|
|
13
13
|
}
|
|
14
|
-
/** @internal */ _getGlobalBindGroupHash(
|
|
15
|
-
return '
|
|
14
|
+
/** @internal */ _getGlobalBindGroupHash(_ctx) {
|
|
15
|
+
return '';
|
|
16
16
|
}
|
|
17
17
|
/** @internal */ renderItems(ctx, renderQueue) {
|
|
18
18
|
const items = renderQueue.itemList;
|
|
19
19
|
if (items) {
|
|
20
|
-
ctx.
|
|
20
|
+
ctx.fogFlags = 0;
|
|
21
21
|
ctx.drawEnvLight = false;
|
|
22
22
|
ctx.env = null;
|
|
23
23
|
ctx.picking = true;
|
|
@@ -25,7 +25,7 @@ import { ShaderHelper } from '../material/shader/helper.js';
|
|
|
25
25
|
ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
|
|
26
26
|
const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
|
|
27
27
|
ctx.device.setBindGroup(0, bindGroup);
|
|
28
|
-
ShaderHelper.setCameraUniforms(bindGroup, ctx
|
|
28
|
+
ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
|
|
29
29
|
const reverseWinding = ctx.camera.worldMatrixDet < 0;
|
|
30
30
|
for (const list of [
|
|
31
31
|
items.opaque,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectcolorpass.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"objectcolorpass.js","sources":["../../src/render/objectcolorpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_OBJECT_COLOR } from '../values';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\n/**\r\n * Object color render pass\r\n * @internal\r\n */\r\nexport class ObjectColorPass extends RenderPass {\r\n /**\r\n * Creates an instance of ForwardRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_OBJECT_COLOR);\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(_ctx: DrawContext) {\r\n return '';\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n const items = renderQueue.itemList;\r\n if (items) {\r\n ctx.fogFlags = 0;\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\r\n ctx.picking = true;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, true);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const list of [items.opaque, items.transmission, items.transparent, items.transmission_trans]) {\r\n if (list) {\r\n for (const lit of list.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of list.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n ctx.picking = false;\r\n }\r\n }\r\n}\r\n"],"names":["ObjectColorPass","RenderPass","RENDER_PASS_TYPE_OBJECT_COLOR","_getGlobalBindGroupHash","_ctx","renderItems","ctx","renderQueue","items","itemList","fogFlags","drawEnvLight","env","picking","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setCameraUniforms","reverseWinding","camera","worldMatrixDet","list","opaque","transmission","transparent","transmission_trans","lit","drawItemList","unlit"],"mappings":";;;;AAMA;;;IAIO,MAAMA,eAAwBC,SAAAA,UAAAA,CAAAA;AACnC;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,6BAAAA,CAAAA;AACR;AACA,qBACUC,uBAAwBC,CAAAA,IAAiB,EAAE;QACnD,OAAO,EAAA;AACT;AACA,qBACA,WAAUC,CAAYC,GAAgB,EAAEC,WAAwB,EAAE;QAChE,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTF,YAAAA,GAAAA,CAAII,QAAQ,GAAG,CAAA;AACfJ,YAAAA,GAAAA,CAAIK,YAAY,GAAG,KAAA;AACnBL,YAAAA,GAAAA,CAAIM,GAAG,GAAG,IAAA;AACVN,YAAAA,GAAAA,CAAIO,OAAO,GAAG,IAAA;AACdP,YAAAA,GAAAA,CAAIQ,IAAI,GAAG,IAAI,CAACC,UAAU,CAACT,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIU,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACX,GAAAA,CAAAA;AACjD,YAAA,MAAMY,SAAYZ,GAAAA,GAAAA,CAAIa,wBAAwB,CAACC,kBAAkB,CAACd,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIe,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;YAC3BK,YAAaC,CAAAA,iBAAiB,CAACN,SAAAA,EAAWZ,GAAK,EAAA,IAAA,CAAA;AAC/C,YAAA,MAAMmB,cAAiBnB,GAAAA,GAAAA,CAAIoB,MAAM,CAACC,cAAc,GAAG,CAAA;AACnD,YAAA,KAAK,MAAMC,IAAQ,IAAA;AAACpB,gBAAAA,KAAAA,CAAMqB,MAAM;AAAErB,gBAAAA,KAAAA,CAAMsB,YAAY;AAAEtB,gBAAAA,KAAAA,CAAMuB,WAAW;AAAEvB,gBAAAA,KAAAA,CAAMwB;aAAmB,CAAE;AAClG,gBAAA,IAAIJ,IAAM,EAAA;AACR,oBAAA,KAAK,MAAMK,GAAAA,IAAOL,IAAKK,CAAAA,GAAG,CAAE;AAC1B,wBAAA,IAAI,CAACC,YAAY,CAACD,GAAAA,EAAK3B,GAAKmB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,oBAAA,KAAK,MAAMU,KAAAA,IAASP,IAAKO,CAAAA,KAAK,CAAE;AAC9B,wBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKmB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACAnB,YAAAA,GAAAA,CAAIO,OAAO,GAAG,KAAA;AAChB;AACF;AACF;;;;"}
|
package/dist/render/primitive.js
CHANGED
|
@@ -1,24 +1,46 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { makeObservable, Disposable, releaseObject, retainObject } from '@zephyr3d/base';
|
|
2
|
+
import { PBPrimitiveType, matchVertexBuffer } from '@zephyr3d/device';
|
|
3
|
+
import { RenderBundleWrapper } from './renderbundle_wrapper.js';
|
|
4
|
+
import { getDevice } from '../app/api.js';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
|
-
*
|
|
7
|
+
* Holds vertex/index data and draw parameters for a mesh geometry.
|
|
8
|
+
*
|
|
9
|
+
* Responsibilities:
|
|
10
|
+
* - Owns one or more vertex buffers and an optional index buffer.
|
|
11
|
+
* - Defines primitive topology, draw range (start/count), and vertex layout.
|
|
12
|
+
* - Provides utilities to create/set/remove buffers and query vertex/face counts.
|
|
13
|
+
* - Tracks changes via a change tag and notifies render-bundle caching.
|
|
14
|
+
* - Optionally stores a bounding volume and supports ray intersection tests.
|
|
15
|
+
*
|
|
16
|
+
* Ownership and lifecycle:
|
|
17
|
+
* - When adding buffers (`setVertexBuffer`, `setIndexBuffer`), the primitive retains them.
|
|
18
|
+
* - When removing/overwriting buffers, the primitive releases the previous buffers.
|
|
19
|
+
* - Disposing the primitive also disposes the internal `VertexLayout` and releases retained buffers.
|
|
20
|
+
*
|
|
6
21
|
* @public
|
|
7
|
-
*/ class Primitive {
|
|
8
|
-
/** @internal */ _vertexLayout;
|
|
9
|
-
/** @internal */ _vertexLayoutOptions;
|
|
10
|
-
/** @internal */ _primitiveType;
|
|
11
|
-
/** @internal */ _indexStart;
|
|
12
|
-
/** @internal */ _indexCount;
|
|
13
|
-
/** @internal */ _defaultIndexCount;
|
|
14
|
-
/** @internal */ _vertexLayoutDirty;
|
|
15
|
-
/** @internal */ static _nextId = 0;
|
|
16
|
-
/** @internal */ _id;
|
|
17
|
-
/** @internal */ _bbox;
|
|
18
|
-
/** @internal */
|
|
22
|
+
*/ class Primitive extends makeObservable(Disposable)() {
|
|
23
|
+
/** @internal Current vertex layout object (created lazily from options). */ _vertexLayout;
|
|
24
|
+
/** @internal Mutable options used to build the vertex layout. */ _vertexLayoutOptions;
|
|
25
|
+
/** @internal Primitive topology (e.g., 'triangle-list', 'line-strip'). */ _primitiveType;
|
|
26
|
+
/** @internal First index/vertex to draw. */ _indexStart;
|
|
27
|
+
/** @internal Number of indices/vertices to draw (computed lazily if null). */ _indexCount;
|
|
28
|
+
/** @internal Cached default index count (derived when needed). */ _defaultIndexCount;
|
|
29
|
+
/** @internal Marks layout dirty when buffers/topology change. */ _vertexLayoutDirty;
|
|
30
|
+
/** @internal Monotonic runtime id. */ static _nextId = 0;
|
|
31
|
+
/** @internal Unique runtime id for the instance. */ _id;
|
|
32
|
+
/** @internal Optional bounding volume for culling/raycast. */ _bbox;
|
|
33
|
+
/** @internal Change tag increments when draw-affecting state changes. */ _changeTag;
|
|
19
34
|
/**
|
|
20
|
-
*
|
|
35
|
+
* Create an empty primitive.
|
|
36
|
+
*
|
|
37
|
+
* Defaults:
|
|
38
|
+
* - Primitive type: 'triangle-list'
|
|
39
|
+
* - `indexStart = 0`, `indexCount = null` (auto-computed)
|
|
40
|
+
* - No vertex/index buffers attached
|
|
41
|
+
* - No bounding volume
|
|
21
42
|
*/ constructor(){
|
|
43
|
+
super();
|
|
22
44
|
this._vertexLayout = null;
|
|
23
45
|
this._vertexLayoutOptions = {
|
|
24
46
|
vertexBuffers: []
|
|
@@ -29,61 +51,106 @@ import { Application } from '../app.js';
|
|
|
29
51
|
this._defaultIndexCount = 0;
|
|
30
52
|
this._vertexLayoutDirty = false;
|
|
31
53
|
this._id = ++Primitive._nextId;
|
|
54
|
+
this._changeTag = 0;
|
|
32
55
|
this._bbox = null;
|
|
33
|
-
this._bboxChangeCallback = [];
|
|
34
56
|
}
|
|
35
57
|
/**
|
|
36
|
-
* Unique identifier of
|
|
58
|
+
* Unique runtime identifier of this primitive.
|
|
59
|
+
*
|
|
60
|
+
* @returns The numeric instance id.
|
|
37
61
|
* @internal
|
|
38
62
|
*/ get id() {
|
|
39
63
|
return this._id;
|
|
40
64
|
}
|
|
41
65
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
66
|
+
* Change tag that increments whenever draw-affecting state changes.
|
|
67
|
+
* Useful for invalidating cached render bundles.
|
|
44
68
|
*
|
|
45
|
-
* @
|
|
46
|
-
*/
|
|
47
|
-
|
|
69
|
+
* @returns The current change tag value.
|
|
70
|
+
*/ get changeTag() {
|
|
71
|
+
return this._changeTag;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create a shallow clone: copies topology, draw range, and buffers.
|
|
75
|
+
*
|
|
76
|
+
* Note: Buffers are re-retained on the new primitive.
|
|
77
|
+
*
|
|
78
|
+
* @returns A cloned Primitive instance.
|
|
79
|
+
*/ clone() {
|
|
80
|
+
const other = new Primitive();
|
|
81
|
+
other.copyFrom(this);
|
|
82
|
+
return other;
|
|
48
83
|
}
|
|
49
84
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
85
|
+
* Copy from another primitive.
|
|
86
|
+
*
|
|
87
|
+
* Copies:
|
|
88
|
+
* - All vertex buffers and the index buffer
|
|
89
|
+
* - Primitive type, index start, index count
|
|
90
|
+
*
|
|
91
|
+
* @param other - The source primitive to copy from.
|
|
92
|
+
* @returns void
|
|
93
|
+
*/ copyFrom(other) {
|
|
94
|
+
for (const info of other._vertexLayoutOptions.vertexBuffers){
|
|
95
|
+
this.setVertexBuffer(info.buffer, info.stepMode);
|
|
56
96
|
}
|
|
97
|
+
this.setIndexBuffer(other._vertexLayoutOptions.indexBuffer);
|
|
98
|
+
this.primitiveType = other.primitiveType;
|
|
99
|
+
this.indexStart = other.indexStart;
|
|
100
|
+
this.indexCount = other.indexCount;
|
|
57
101
|
}
|
|
58
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Primitive topology.
|
|
104
|
+
*/ get primitiveType() {
|
|
59
105
|
return this._primitiveType;
|
|
60
106
|
}
|
|
61
107
|
set primitiveType(type) {
|
|
62
|
-
this._primitiveType
|
|
108
|
+
if (type !== this._primitiveType) {
|
|
109
|
+
this._primitiveType = type;
|
|
110
|
+
this._changeTag++;
|
|
111
|
+
RenderBundleWrapper.primitiveChanged(this);
|
|
112
|
+
}
|
|
63
113
|
}
|
|
64
|
-
/**
|
|
114
|
+
/**
|
|
115
|
+
* Starting index/vertex for drawing.
|
|
116
|
+
*/ get indexStart() {
|
|
65
117
|
return this._indexStart;
|
|
66
118
|
}
|
|
67
119
|
set indexStart(val) {
|
|
68
|
-
this._indexStart
|
|
120
|
+
if (val !== this._indexStart) {
|
|
121
|
+
this._indexStart = val;
|
|
122
|
+
this._changeTag++;
|
|
123
|
+
RenderBundleWrapper.primitiveChanged(this);
|
|
124
|
+
}
|
|
69
125
|
}
|
|
70
|
-
/**
|
|
126
|
+
/**
|
|
127
|
+
* Number of indices/vertices to draw.
|
|
128
|
+
*/ get indexCount() {
|
|
71
129
|
this._indexCount = this._indexCount ?? this.calcDefaultIndexCount();
|
|
72
130
|
return this._indexCount;
|
|
73
131
|
}
|
|
74
132
|
set indexCount(val) {
|
|
75
|
-
this._indexCount
|
|
133
|
+
if (val !== this._indexCount) {
|
|
134
|
+
this._indexCount = val;
|
|
135
|
+
this._changeTag++;
|
|
136
|
+
RenderBundleWrapper.primitiveChanged(this);
|
|
137
|
+
}
|
|
76
138
|
}
|
|
77
139
|
/**
|
|
78
|
-
* Query total vertex count
|
|
79
|
-
*
|
|
140
|
+
* Query total vertex count from the position buffer, if present.
|
|
141
|
+
*
|
|
142
|
+
* @returns Total vertex count; 0 if no position buffer is set.
|
|
80
143
|
*/ getNumVertices() {
|
|
81
144
|
const posInfo = this.getVertexBufferInfo('position');
|
|
82
145
|
return posInfo?.buffer ? posInfo.buffer.byteLength / posInfo.stride >> 0 : 0;
|
|
83
146
|
}
|
|
84
147
|
/**
|
|
85
|
-
* Query total face count
|
|
86
|
-
*
|
|
148
|
+
* Query total face/segment count based on topology and buffer size.
|
|
149
|
+
*
|
|
150
|
+
* - For indexed geometry: derived from index buffer.
|
|
151
|
+
* - For non-indexed: derived from position vertex count.
|
|
152
|
+
*
|
|
153
|
+
* @returns Total primitive count for the current topology.
|
|
87
154
|
*/ getNumFaces() {
|
|
88
155
|
const ib = this.getIndexBuffer();
|
|
89
156
|
const count = ib ? ib.byteLength >> (ib.indexType.primitiveType === PBPrimitiveType.U16 ? 1 : 2) : this.getNumVertices();
|
|
@@ -105,63 +172,91 @@ import { Application } from '../app.js';
|
|
|
105
172
|
}
|
|
106
173
|
}
|
|
107
174
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
175
|
+
* Remove all vertex buffers that match a given semantic.
|
|
176
|
+
*
|
|
177
|
+
* This releases retained buffers, marks the layout dirty, and invalidates bundles.
|
|
178
|
+
*
|
|
179
|
+
* @param semantic - The vertex semantic to remove (e.g., 'position', 'normal').
|
|
180
|
+
* @returns void
|
|
181
|
+
*/ removeVertexBuffer(semantic) {
|
|
182
|
+
for(let i = this._vertexLayoutOptions.vertexBuffers.length - 1; i >= 0; i--){
|
|
183
|
+
const info = this._vertexLayoutOptions.vertexBuffers[i];
|
|
184
|
+
if (matchVertexBuffer(info.buffer, semantic)) {
|
|
185
|
+
releaseObject(info.buffer);
|
|
186
|
+
this._vertexLayoutOptions.vertexBuffers.splice(i, 1);
|
|
115
187
|
this._vertexLayoutDirty = true;
|
|
116
188
|
}
|
|
117
189
|
}
|
|
190
|
+
if (this._vertexLayoutDirty) {
|
|
191
|
+
this._changeTag++;
|
|
192
|
+
RenderBundleWrapper.primitiveChanged(this);
|
|
193
|
+
}
|
|
118
194
|
}
|
|
119
195
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* @
|
|
196
|
+
* Get the vertex buffer that matches a given semantic.
|
|
197
|
+
*
|
|
198
|
+
* @param semantic - The vertex semantic to look up.
|
|
199
|
+
* @returns The matching vertex buffer, or `null` if not found.
|
|
123
200
|
*/ getVertexBuffer(semantic) {
|
|
124
|
-
this.
|
|
125
|
-
|
|
201
|
+
for (const info of this._vertexLayoutOptions.vertexBuffers){
|
|
202
|
+
if (info.buffer && matchVertexBuffer(info.buffer, semantic)) {
|
|
203
|
+
return info.buffer;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return null;
|
|
126
207
|
}
|
|
127
208
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
* @
|
|
209
|
+
* Get vertex buffer information for a given semantic.
|
|
210
|
+
*
|
|
211
|
+
* @param semantic - The vertex semantic to look up.
|
|
212
|
+
* @returns The `VertexBufferInfo`, or `null` if not found.
|
|
131
213
|
*/ getVertexBufferInfo(semantic) {
|
|
132
214
|
this.checkVertexLayout();
|
|
133
|
-
return this._vertexLayout
|
|
215
|
+
return this._vertexLayout?.getVertexBufferInfo(semantic) ?? null;
|
|
134
216
|
}
|
|
135
217
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
218
|
+
* Create a vertex buffer from data and add it to the primitive.
|
|
219
|
+
*
|
|
220
|
+
* - For interleaved layouts, pass an array of `VertexAttribFormat`.
|
|
221
|
+
* - For a single attribute, pass a single `VertexAttribFormat`.
|
|
222
|
+
*
|
|
223
|
+
* @param format - Vertex attribute format(s).
|
|
224
|
+
* @param data - Typed array with vertex data.
|
|
225
|
+
* @param stepMode - Optional step mode (e.g., 'vertex', 'instance').
|
|
226
|
+
* @returns The created `StructuredBuffer`.
|
|
141
227
|
*/ createAndSetVertexBuffer(format, data, stepMode) {
|
|
142
|
-
const
|
|
228
|
+
const device = getDevice();
|
|
229
|
+
const buffer = Array.isArray(format) ? device.createInterleavedVertexBuffer(format, data) : device.createVertexBuffer(format, data);
|
|
143
230
|
return this.setVertexBuffer(buffer, stepMode);
|
|
144
231
|
}
|
|
145
232
|
/**
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
233
|
+
* Add an existing vertex buffer to the primitive.
|
|
234
|
+
*
|
|
235
|
+
* Ownership note: The primitive retains the buffer; it will be released or disposed when replaced or on dispose.
|
|
236
|
+
*
|
|
237
|
+
* @param buffer - The vertex buffer to add.
|
|
238
|
+
* @param stepMode - Optional step mode for the buffer.
|
|
239
|
+
* @returns The same buffer.
|
|
150
240
|
*/ setVertexBuffer(buffer, stepMode) {
|
|
241
|
+
retainObject(buffer);
|
|
151
242
|
this._vertexLayoutOptions.vertexBuffers.push({
|
|
152
243
|
buffer,
|
|
153
244
|
stepMode
|
|
154
245
|
});
|
|
155
246
|
this._vertexLayoutDirty = true;
|
|
247
|
+
this._changeTag++;
|
|
248
|
+
RenderBundleWrapper.primitiveChanged(this);
|
|
156
249
|
return buffer;
|
|
157
250
|
}
|
|
158
251
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
* @param
|
|
162
|
-
* @
|
|
252
|
+
* Create an index buffer from data and set it on the primitive.
|
|
253
|
+
*
|
|
254
|
+
* @param data - Index data as Uint16Array or Uint32Array.
|
|
255
|
+
* @param dynamic - Whether the index buffer is dynamic (unmanaged).
|
|
256
|
+
* @returns The created `IndexBuffer`.
|
|
163
257
|
*/ createAndSetIndexBuffer(data, dynamic) {
|
|
164
|
-
const
|
|
258
|
+
const device = getDevice();
|
|
259
|
+
const buffer = device.createIndexBuffer(data, {
|
|
165
260
|
dynamic: !!dynamic,
|
|
166
261
|
managed: !dynamic
|
|
167
262
|
});
|
|
@@ -169,22 +264,34 @@ import { Application } from '../app.js';
|
|
|
169
264
|
return buffer;
|
|
170
265
|
}
|
|
171
266
|
/**
|
|
172
|
-
*
|
|
173
|
-
*
|
|
267
|
+
* Set or replace the index buffer.
|
|
268
|
+
*
|
|
269
|
+
* Ownership note: The primitive retains the buffer; previous buffer is released.
|
|
270
|
+
* Marks the vertex layout dirty and invalidates bundles.
|
|
271
|
+
*
|
|
272
|
+
* @param buffer - The index buffer to set (non-null).
|
|
273
|
+
* @returns void
|
|
174
274
|
*/ setIndexBuffer(buffer) {
|
|
175
275
|
if (this._vertexLayoutOptions.indexBuffer !== buffer) {
|
|
276
|
+
retainObject(buffer);
|
|
277
|
+
releaseObject(this._vertexLayoutOptions.indexBuffer);
|
|
176
278
|
this._vertexLayoutOptions.indexBuffer = buffer;
|
|
177
279
|
this._vertexLayoutDirty = true;
|
|
280
|
+
this._changeTag++;
|
|
281
|
+
RenderBundleWrapper.primitiveChanged(this);
|
|
178
282
|
}
|
|
179
283
|
}
|
|
180
284
|
/**
|
|
181
|
-
*
|
|
182
|
-
*
|
|
285
|
+
* Get the current index buffer.
|
|
286
|
+
*
|
|
287
|
+
* @returns The index buffer, or `undefined`/`null` if none set.
|
|
183
288
|
*/ getIndexBuffer() {
|
|
184
289
|
return this._vertexLayoutOptions.indexBuffer;
|
|
185
290
|
}
|
|
186
291
|
/**
|
|
187
|
-
*
|
|
292
|
+
* Issue a non-instanced draw for the current topology and range.
|
|
293
|
+
*
|
|
294
|
+
* Preconditions: A valid vertex layout and `indexCount > 0`.
|
|
188
295
|
*/ draw() {
|
|
189
296
|
this.checkVertexLayout();
|
|
190
297
|
if (this.indexCount > 0) {
|
|
@@ -192,8 +299,11 @@ import { Application } from '../app.js';
|
|
|
192
299
|
}
|
|
193
300
|
}
|
|
194
301
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
302
|
+
* Issue an instanced draw for the current topology and range.
|
|
303
|
+
*
|
|
304
|
+
* Preconditions: A valid vertex layout and `indexCount > 0`.
|
|
305
|
+
*
|
|
306
|
+
* @param numInstances - Number of instances to draw.
|
|
197
307
|
*/ drawInstanced(numInstances) {
|
|
198
308
|
this.checkVertexLayout();
|
|
199
309
|
if (this.indexCount > 0) {
|
|
@@ -201,24 +311,18 @@ import { Application } from '../app.js';
|
|
|
201
311
|
}
|
|
202
312
|
}
|
|
203
313
|
/**
|
|
204
|
-
*
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
for(const k in vertexBuffers){
|
|
214
|
-
vertexBuffers[k]?.buffer?.dispose();
|
|
314
|
+
* Dispose this primitive and release associated GPU resources.
|
|
315
|
+
*/ onDispose() {
|
|
316
|
+
super.onDispose();
|
|
317
|
+
this._vertexLayout?.dispose();
|
|
318
|
+
this._vertexLayout = null;
|
|
319
|
+
if (this._vertexLayoutOptions) {
|
|
320
|
+
releaseObject(this._vertexLayoutOptions.indexBuffer);
|
|
321
|
+
for (const info of this._vertexLayoutOptions.vertexBuffers){
|
|
322
|
+
releaseObject(info.buffer);
|
|
215
323
|
}
|
|
216
|
-
this.
|
|
217
|
-
this._vertexLayout.dispose();
|
|
218
|
-
this._vertexLayout = null;
|
|
324
|
+
this._vertexLayoutOptions = null;
|
|
219
325
|
}
|
|
220
|
-
this._indexCount = null;
|
|
221
|
-
this._indexStart = 0;
|
|
222
326
|
}
|
|
223
327
|
/*
|
|
224
328
|
createAABBTree(): AABBTree {
|
|
@@ -229,26 +333,30 @@ import { Application } from '../app.js';
|
|
|
229
333
|
return aabbtree;
|
|
230
334
|
}
|
|
231
335
|
*/ /**
|
|
232
|
-
*
|
|
233
|
-
*
|
|
336
|
+
* Get the bounding volume associated with this primitive.
|
|
337
|
+
*
|
|
338
|
+
* @returns The current bounding volume, or `null` if not set.
|
|
234
339
|
*/ getBoundingVolume() {
|
|
235
340
|
return this._bbox;
|
|
236
341
|
}
|
|
237
342
|
/**
|
|
238
|
-
*
|
|
239
|
-
*
|
|
343
|
+
* Set or replace the bounding volume of this primitive.
|
|
344
|
+
*
|
|
345
|
+
* Triggers registered bounding-volume change callbacks.
|
|
346
|
+
*
|
|
347
|
+
* @param bv - The bounding volume to set.
|
|
348
|
+
* @returns void
|
|
240
349
|
*/ setBoundingVolume(bv) {
|
|
241
350
|
if (bv !== this._bbox) {
|
|
242
351
|
this._bbox = bv;
|
|
243
|
-
|
|
244
|
-
cb();
|
|
245
|
-
}
|
|
352
|
+
this.dispatchEvent('bv_changed');
|
|
246
353
|
}
|
|
247
354
|
}
|
|
248
355
|
/**
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
* @
|
|
356
|
+
* Test intersection against the current axis-aligned bounding box (AABB).
|
|
357
|
+
*
|
|
358
|
+
* @param ray - Ray to test against the primitive's AABB (derived from its bounding volume).
|
|
359
|
+
* @returns The distance from ray origin to the intersection, or `null` if no hit or no AABB.
|
|
252
360
|
*/ raycast(ray) {
|
|
253
361
|
const aabb = this.getBoundingVolume()?.toAABB();
|
|
254
362
|
return aabb ? ray.bboxIntersectionTestEx(aabb) : null;
|
|
@@ -256,7 +364,8 @@ import { Application } from '../app.js';
|
|
|
256
364
|
/** @internal */ checkVertexLayout() {
|
|
257
365
|
if (this._vertexLayoutDirty) {
|
|
258
366
|
this._vertexLayout?.dispose();
|
|
259
|
-
|
|
367
|
+
const device = getDevice();
|
|
368
|
+
this._vertexLayout = device.createVertexLayout(this._vertexLayoutOptions);
|
|
260
369
|
this._vertexLayoutDirty = false;
|
|
261
370
|
}
|
|
262
371
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitive.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"primitive.js","sources":["../../src/render/primitive.ts"],"sourcesContent":["import {\r\n Disposable,\r\n makeObservable,\r\n releaseObject,\r\n retainObject,\r\n type Clonable,\r\n type Ray,\r\n type TypedArray\r\n} from '@zephyr3d/base';\r\nimport {\r\n type VertexStepMode,\r\n type VertexLayout,\r\n type VertexLayoutOptions,\r\n type PrimitiveType,\r\n type StructuredBuffer,\r\n type IndexBuffer,\r\n type VertexSemantic,\r\n type VertexAttribFormat,\r\n type VertexBufferInfo,\r\n PBPrimitiveType,\r\n matchVertexBuffer\r\n} from '@zephyr3d/device';\r\nimport type { BoundingVolume } from '../utility/bounding_volume';\r\nimport { RenderBundleWrapper } from './renderbundle_wrapper';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * Holds vertex/index data and draw parameters for a mesh geometry.\r\n *\r\n * Responsibilities:\r\n * - Owns one or more vertex buffers and an optional index buffer.\r\n * - Defines primitive topology, draw range (start/count), and vertex layout.\r\n * - Provides utilities to create/set/remove buffers and query vertex/face counts.\r\n * - Tracks changes via a change tag and notifies render-bundle caching.\r\n * - Optionally stores a bounding volume and supports ray intersection tests.\r\n *\r\n * Ownership and lifecycle:\r\n * - When adding buffers (`setVertexBuffer`, `setIndexBuffer`), the primitive retains them.\r\n * - When removing/overwriting buffers, the primitive releases the previous buffers.\r\n * - Disposing the primitive also disposes the internal `VertexLayout` and releases retained buffers.\r\n *\r\n * @public\r\n */\r\nexport class Primitive\r\n extends makeObservable(Disposable)<{\r\n bv_changed: [];\r\n }>()\r\n implements Clonable<Primitive>\r\n{\r\n /** @internal Current vertex layout object (created lazily from options). */\r\n protected _vertexLayout: VertexLayout;\r\n /** @internal Mutable options used to build the vertex layout. */\r\n protected _vertexLayoutOptions: VertexLayoutOptions;\r\n /** @internal Primitive topology (e.g., 'triangle-list', 'line-strip'). */\r\n protected _primitiveType: PrimitiveType;\r\n /** @internal First index/vertex to draw. */\r\n protected _indexStart: number;\r\n /** @internal Number of indices/vertices to draw (computed lazily if null). */\r\n protected _indexCount: number;\r\n /** @internal Cached default index count (derived when needed). */\r\n protected _defaultIndexCount: number;\r\n /** @internal Marks layout dirty when buffers/topology change. */\r\n protected _vertexLayoutDirty: boolean;\r\n /** @internal Monotonic runtime id. */\r\n private static _nextId = 0;\r\n /** @internal Unique runtime id for the instance. */\r\n protected _id: number;\r\n /** @internal Optional bounding volume for culling/raycast. */\r\n protected _bbox: BoundingVolume;\r\n /** @internal Change tag increments when draw-affecting state changes. */\r\n private _changeTag: number;\r\n /**\r\n * Create an empty primitive.\r\n *\r\n * Defaults:\r\n * - Primitive type: 'triangle-list'\r\n * - `indexStart = 0`, `indexCount = null` (auto-computed)\r\n * - No vertex/index buffers attached\r\n * - No bounding volume\r\n */\r\n constructor() {\r\n super();\r\n this._vertexLayout = null;\r\n this._vertexLayoutOptions = { vertexBuffers: [] };\r\n this._primitiveType = 'triangle-list';\r\n this._indexStart = 0;\r\n this._indexCount = null;\r\n this._defaultIndexCount = 0;\r\n this._vertexLayoutDirty = false;\r\n this._id = ++Primitive._nextId;\r\n this._changeTag = 0;\r\n this._bbox = null;\r\n }\r\n /**\r\n * Unique runtime identifier of this primitive.\r\n *\r\n * @returns The numeric instance id.\r\n * @internal\r\n */\r\n get id(): number {\r\n return this._id;\r\n }\r\n /**\r\n * Change tag that increments whenever draw-affecting state changes.\r\n * Useful for invalidating cached render bundles.\r\n *\r\n * @returns The current change tag value.\r\n */\r\n get changeTag() {\r\n return this._changeTag;\r\n }\r\n /**\r\n * Create a shallow clone: copies topology, draw range, and buffers.\r\n *\r\n * Note: Buffers are re-retained on the new primitive.\r\n *\r\n * @returns A cloned Primitive instance.\r\n */\r\n clone(): Primitive {\r\n const other = new Primitive();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n /**\r\n * Copy from another primitive.\r\n *\r\n * Copies:\r\n * - All vertex buffers and the index buffer\r\n * - Primitive type, index start, index count\r\n *\r\n * @param other - The source primitive to copy from.\r\n * @returns void\r\n */\r\n copyFrom(other: this) {\r\n for (const info of other._vertexLayoutOptions.vertexBuffers) {\r\n this.setVertexBuffer(info.buffer, info.stepMode);\r\n }\r\n this.setIndexBuffer(other._vertexLayoutOptions.indexBuffer);\r\n this.primitiveType = other.primitiveType;\r\n this.indexStart = other.indexStart;\r\n this.indexCount = other.indexCount;\r\n }\r\n /**\r\n * Primitive topology.\r\n */\r\n get primitiveType() {\r\n return this._primitiveType;\r\n }\r\n set primitiveType(type) {\r\n if (type !== this._primitiveType) {\r\n this._primitiveType = type;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Starting index/vertex for drawing.\r\n */\r\n get indexStart() {\r\n return this._indexStart;\r\n }\r\n set indexStart(val) {\r\n if (val !== this._indexStart) {\r\n this._indexStart = val;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Number of indices/vertices to draw.\r\n */\r\n get indexCount() {\r\n this._indexCount = this._indexCount ?? this.calcDefaultIndexCount();\r\n return this._indexCount;\r\n }\r\n set indexCount(val) {\r\n if (val !== this._indexCount) {\r\n this._indexCount = val;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Query total vertex count from the position buffer, if present.\r\n *\r\n * @returns Total vertex count; 0 if no position buffer is set.\r\n */\r\n getNumVertices(): number {\r\n const posInfo = this.getVertexBufferInfo('position');\r\n return posInfo?.buffer ? (posInfo.buffer.byteLength / posInfo.stride) >> 0 : 0;\r\n }\r\n /**\r\n * Query total face/segment count based on topology and buffer size.\r\n *\r\n * - For indexed geometry: derived from index buffer.\r\n * - For non-indexed: derived from position vertex count.\r\n *\r\n * @returns Total primitive count for the current topology.\r\n */\r\n getNumFaces(): number {\r\n const ib = this.getIndexBuffer();\r\n const count = ib\r\n ? ib.byteLength >> (ib.indexType.primitiveType === PBPrimitiveType.U16 ? 1 : 2)\r\n : this.getNumVertices();\r\n switch (this.primitiveType) {\r\n case 'line-list':\r\n return count >> 1;\r\n case 'point-list':\r\n return count;\r\n case 'line-strip':\r\n return count - 1;\r\n case 'triangle-fan':\r\n return count - 2;\r\n case 'triangle-strip':\r\n return count - 2;\r\n case 'triangle-list':\r\n return (count / 3) >> 0;\r\n default:\r\n return 0;\r\n }\r\n }\r\n /**\r\n * Remove all vertex buffers that match a given semantic.\r\n *\r\n * This releases retained buffers, marks the layout dirty, and invalidates bundles.\r\n *\r\n * @param semantic - The vertex semantic to remove (e.g., 'position', 'normal').\r\n * @returns void\r\n */\r\n removeVertexBuffer(semantic: VertexSemantic): void {\r\n for (let i = this._vertexLayoutOptions.vertexBuffers.length - 1; i >= 0; i--) {\r\n const info = this._vertexLayoutOptions.vertexBuffers[i];\r\n if (matchVertexBuffer(info.buffer, semantic)) {\r\n releaseObject(info.buffer);\r\n this._vertexLayoutOptions.vertexBuffers.splice(i, 1);\r\n this._vertexLayoutDirty = true;\r\n }\r\n }\r\n if (this._vertexLayoutDirty) {\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Get the vertex buffer that matches a given semantic.\r\n *\r\n * @param semantic - The vertex semantic to look up.\r\n * @returns The matching vertex buffer, or `null` if not found.\r\n */\r\n getVertexBuffer(semantic: VertexSemantic): StructuredBuffer {\r\n for (const info of this._vertexLayoutOptions.vertexBuffers) {\r\n if (info.buffer && matchVertexBuffer(info.buffer, semantic)) {\r\n return info.buffer;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get vertex buffer information for a given semantic.\r\n *\r\n * @param semantic - The vertex semantic to look up.\r\n * @returns The `VertexBufferInfo`, or `null` if not found.\r\n */\r\n getVertexBufferInfo(semantic: VertexSemantic): VertexBufferInfo {\r\n this.checkVertexLayout();\r\n return this._vertexLayout?.getVertexBufferInfo(semantic) ?? null;\r\n }\r\n /**\r\n * Create a vertex buffer from data and add it to the primitive.\r\n *\r\n * - For interleaved layouts, pass an array of `VertexAttribFormat`.\r\n * - For a single attribute, pass a single `VertexAttribFormat`.\r\n *\r\n * @param format - Vertex attribute format(s).\r\n * @param data - Typed array with vertex data.\r\n * @param stepMode - Optional step mode (e.g., 'vertex', 'instance').\r\n * @returns The created `StructuredBuffer`.\r\n */\r\n createAndSetVertexBuffer(\r\n format: VertexAttribFormat[] | VertexAttribFormat,\r\n data: TypedArray,\r\n stepMode?: VertexStepMode\r\n ): StructuredBuffer {\r\n const device = getDevice();\r\n const buffer = Array.isArray(format)\r\n ? device.createInterleavedVertexBuffer(format, data)\r\n : device.createVertexBuffer(format, data);\r\n return this.setVertexBuffer(buffer, stepMode);\r\n }\r\n /**\r\n * Add an existing vertex buffer to the primitive.\r\n *\r\n * Ownership note: The primitive retains the buffer; it will be released or disposed when replaced or on dispose.\r\n *\r\n * @param buffer - The vertex buffer to add.\r\n * @param stepMode - Optional step mode for the buffer.\r\n * @returns The same buffer.\r\n */\r\n setVertexBuffer(buffer: StructuredBuffer, stepMode?: VertexStepMode) {\r\n retainObject(buffer);\r\n this._vertexLayoutOptions.vertexBuffers.push({\r\n buffer,\r\n stepMode\r\n });\r\n this._vertexLayoutDirty = true;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n return buffer;\r\n }\r\n /**\r\n * Create an index buffer from data and set it on the primitive.\r\n *\r\n * @param data - Index data as Uint16Array or Uint32Array.\r\n * @param dynamic - Whether the index buffer is dynamic (unmanaged).\r\n * @returns The created `IndexBuffer`.\r\n */\r\n createAndSetIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n dynamic?: boolean\r\n ): IndexBuffer {\r\n const device = getDevice();\r\n const buffer = device.createIndexBuffer(data, {\r\n dynamic: !!dynamic,\r\n managed: !dynamic\r\n });\r\n this.setIndexBuffer(buffer);\r\n return buffer;\r\n }\r\n /**\r\n * Set or replace the index buffer.\r\n *\r\n * Ownership note: The primitive retains the buffer; previous buffer is released.\r\n * Marks the vertex layout dirty and invalidates bundles.\r\n *\r\n * @param buffer - The index buffer to set (non-null).\r\n * @returns void\r\n */\r\n setIndexBuffer(buffer: IndexBuffer): void {\r\n if (this._vertexLayoutOptions.indexBuffer !== buffer) {\r\n retainObject(buffer);\r\n releaseObject(this._vertexLayoutOptions.indexBuffer);\r\n this._vertexLayoutOptions.indexBuffer = buffer;\r\n this._vertexLayoutDirty = true;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Get the current index buffer.\r\n *\r\n * @returns The index buffer, or `undefined`/`null` if none set.\r\n */\r\n getIndexBuffer(): IndexBuffer {\r\n return this._vertexLayoutOptions.indexBuffer;\r\n }\r\n /**\r\n * Issue a non-instanced draw for the current topology and range.\r\n *\r\n * Preconditions: A valid vertex layout and `indexCount > 0`.\r\n */\r\n draw() {\r\n this.checkVertexLayout();\r\n if (this.indexCount > 0) {\r\n this._vertexLayout?.draw(this._primitiveType, this._indexStart, this.indexCount);\r\n }\r\n }\r\n /**\r\n * Issue an instanced draw for the current topology and range.\r\n *\r\n * Preconditions: A valid vertex layout and `indexCount > 0`.\r\n *\r\n * @param numInstances - Number of instances to draw.\r\n */\r\n drawInstanced(numInstances: number): void {\r\n this.checkVertexLayout();\r\n if (this.indexCount > 0) {\r\n this._vertexLayout?.drawInstanced(this._primitiveType, this._indexStart, this.indexCount, numInstances);\r\n }\r\n }\r\n /**\r\n * Dispose this primitive and release associated GPU resources.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._vertexLayout?.dispose();\r\n this._vertexLayout = null;\r\n if (this._vertexLayoutOptions) {\r\n releaseObject(this._vertexLayoutOptions.indexBuffer);\r\n for (const info of this._vertexLayoutOptions.vertexBuffers) {\r\n releaseObject(info.buffer);\r\n }\r\n this._vertexLayoutOptions = null;\r\n }\r\n }\r\n /*\r\n createAABBTree(): AABBTree {\r\n const indices = this.getIndexBuffer() ? this.getIndexBuffer().getData() : null;\r\n const vertices = (this.getVertexBuffer(VERTEX_ATTRIB_POSITION)?.getData() as Float32Array) || null;\r\n const aabbtree = new AABBTree();\r\n aabbtree.buildFromPrimitives(vertices, indices, this._primitiveType);\r\n return aabbtree;\r\n }\r\n */\r\n /**\r\n * Get the bounding volume associated with this primitive.\r\n *\r\n * @returns The current bounding volume, or `null` if not set.\r\n */\r\n getBoundingVolume(): BoundingVolume {\r\n return this._bbox;\r\n }\r\n /**\r\n * Set or replace the bounding volume of this primitive.\r\n *\r\n * Triggers registered bounding-volume change callbacks.\r\n *\r\n * @param bv - The bounding volume to set.\r\n * @returns void\r\n */\r\n setBoundingVolume(bv: BoundingVolume): void {\r\n if (bv !== this._bbox) {\r\n this._bbox = bv;\r\n this.dispatchEvent('bv_changed');\r\n }\r\n }\r\n /**\r\n * Test intersection against the current axis-aligned bounding box (AABB).\r\n *\r\n * @param ray - Ray to test against the primitive's AABB (derived from its bounding volume).\r\n * @returns The distance from ray origin to the intersection, or `null` if no hit or no AABB.\r\n */\r\n raycast(ray: Ray): number {\r\n const aabb = this.getBoundingVolume()?.toAABB();\r\n return aabb ? ray.bboxIntersectionTestEx(aabb) : null;\r\n }\r\n /** @internal */\r\n private checkVertexLayout() {\r\n if (this._vertexLayoutDirty) {\r\n this._vertexLayout?.dispose();\r\n const device = getDevice();\r\n this._vertexLayout = device.createVertexLayout(this._vertexLayoutOptions);\r\n this._vertexLayoutDirty = false;\r\n }\r\n }\r\n /** @internal */\r\n private calcDefaultIndexCount(): number {\r\n const indexBuffer = this.getIndexBuffer();\r\n if (indexBuffer) {\r\n return Math.max(0, indexBuffer.length - this._indexStart);\r\n }\r\n const info = this.getVertexBufferInfo('position');\r\n if (info) {\r\n return Math.max(\r\n 0,\r\n Math.floor((info.buffer.byteLength - info.drawOffset) / info.stride) - this._indexStart\r\n );\r\n }\r\n return 0;\r\n }\r\n}\r\n"],"names":["Primitive","makeObservable","Disposable","_nextId","_vertexLayout","_vertexLayoutOptions","vertexBuffers","_primitiveType","_indexStart","_indexCount","_defaultIndexCount","_vertexLayoutDirty","_id","_changeTag","_bbox","id","changeTag","clone","other","copyFrom","info","setVertexBuffer","buffer","stepMode","setIndexBuffer","indexBuffer","primitiveType","indexStart","indexCount","type","RenderBundleWrapper","primitiveChanged","val","calcDefaultIndexCount","getNumVertices","posInfo","getVertexBufferInfo","byteLength","stride","getNumFaces","ib","getIndexBuffer","count","indexType","PBPrimitiveType","U16","removeVertexBuffer","semantic","i","length","matchVertexBuffer","releaseObject","splice","getVertexBuffer","checkVertexLayout","createAndSetVertexBuffer","format","data","device","getDevice","Array","isArray","createInterleavedVertexBuffer","createVertexBuffer","retainObject","push","createAndSetIndexBuffer","dynamic","createIndexBuffer","managed","draw","drawInstanced","numInstances","onDispose","dispose","getBoundingVolume","setBoundingVolume","bv","dispatchEvent","raycast","ray","aabb","toAABB","bboxIntersectionTestEx","createVertexLayout","Math","max","floor","drawOffset"],"mappings":"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"}
|