@zephyr3d/scene 0.9.1 → 0.9.3
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/animationset.js +2 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +94 -46
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +4 -4
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +13 -40
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +22 -1
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +60 -60
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +1 -1
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +795 -266
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +3 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/shader/helper.js +281 -278
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- 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/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +195 -115
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +25 -5
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +81 -97
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +228 -228
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +94 -66
- 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/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- 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/src/blitter/bilateralblur.js +221 -0
- 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/src/utility/textures/ggxlut.js +213 -0
- 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/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +4 -4
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- 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/manager.js +299 -268
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +49 -53
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { ProgramBuilder } from '@zephyr3d/device';
|
|
2
|
+
import { QUEUE_OPAQUE } from '../values.js';
|
|
3
|
+
import { RenderBundleWrapper } from '../render/renderbundle_wrapper.js';
|
|
4
|
+
import { Disposable, DWeakRef } from '@zephyr3d/base';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Base class for any kind of materials
|
|
8
|
+
*
|
|
9
|
+
* @public
|
|
10
|
+
*/ class Material extends Disposable {
|
|
11
|
+
/** @internal */ static _registry = new Map();
|
|
12
|
+
/** @internal */ static _nextId = 0;
|
|
13
|
+
/** @internal */ static _programCache = {};
|
|
14
|
+
/** @internal */ _states;
|
|
15
|
+
/** @internal */ _numPasses;
|
|
16
|
+
/** @internal */ _hash;
|
|
17
|
+
/** @internal */ _optionTag;
|
|
18
|
+
/** @internal */ _id;
|
|
19
|
+
/** @internal */ _persistentId;
|
|
20
|
+
/** @internal */ _currentHash;
|
|
21
|
+
/** @internal */ _changeTag;
|
|
22
|
+
/**
|
|
23
|
+
* Creates an instance of material
|
|
24
|
+
*/ constructor(){
|
|
25
|
+
super();
|
|
26
|
+
this._id = ++Material._nextId;
|
|
27
|
+
this._persistentId = crypto.randomUUID();
|
|
28
|
+
this._states = {};
|
|
29
|
+
this._numPasses = 1;
|
|
30
|
+
this._hash = [
|
|
31
|
+
null
|
|
32
|
+
];
|
|
33
|
+
this._optionTag = 0;
|
|
34
|
+
this._changeTag = 0;
|
|
35
|
+
this._currentHash = [];
|
|
36
|
+
Material._registry.set(this._persistentId, new DWeakRef(this));
|
|
37
|
+
}
|
|
38
|
+
clone() {
|
|
39
|
+
const other = new Material();
|
|
40
|
+
other.copyFrom(this);
|
|
41
|
+
return other;
|
|
42
|
+
}
|
|
43
|
+
copyFrom(other) {
|
|
44
|
+
if (this._states) {
|
|
45
|
+
for(const k in this._states){
|
|
46
|
+
this._states[k]?.bindGroup?.dispose();
|
|
47
|
+
}
|
|
48
|
+
this._states = {};
|
|
49
|
+
}
|
|
50
|
+
this._numPasses = other._numPasses;
|
|
51
|
+
}
|
|
52
|
+
/** Material change tag */ get changeTag() {
|
|
53
|
+
return this._changeTag;
|
|
54
|
+
}
|
|
55
|
+
/** @internal */ static findMaterialById(id) {
|
|
56
|
+
const m = this._registry.get(id);
|
|
57
|
+
if (m && !m.get()) {
|
|
58
|
+
this._registry.delete(id);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return m ? m.get() : null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Persistent ID used in serialization
|
|
65
|
+
*/ get persistentId() {
|
|
66
|
+
return this._persistentId;
|
|
67
|
+
}
|
|
68
|
+
set persistentId(val) {
|
|
69
|
+
if (val !== this._persistentId) {
|
|
70
|
+
const m = Material._registry.get(this._persistentId);
|
|
71
|
+
if (!m || m.get() !== this) {
|
|
72
|
+
throw new Error('Registry material mismatch');
|
|
73
|
+
}
|
|
74
|
+
Material._registry.delete(this._persistentId);
|
|
75
|
+
this._persistentId = val;
|
|
76
|
+
Material._registry.set(this._persistentId, m);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Unique identifier of the material */ get instanceId() {
|
|
80
|
+
return this._id;
|
|
81
|
+
}
|
|
82
|
+
get numPasses() {
|
|
83
|
+
return this._numPasses;
|
|
84
|
+
}
|
|
85
|
+
set numPasses(val) {
|
|
86
|
+
while(this._hash.length < val){
|
|
87
|
+
this._hash.push(null);
|
|
88
|
+
}
|
|
89
|
+
this._numPasses = val;
|
|
90
|
+
}
|
|
91
|
+
/** @internal */ getHash(pass) {
|
|
92
|
+
if (this._hash[pass] === null) {
|
|
93
|
+
this._hash[pass] = this.createHash(pass);
|
|
94
|
+
}
|
|
95
|
+
return this._hash[pass];
|
|
96
|
+
}
|
|
97
|
+
getQueueType() {
|
|
98
|
+
return QUEUE_OPAQUE;
|
|
99
|
+
}
|
|
100
|
+
/** Returns true if given pass is transparent */ isTransparentPass(_pass) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
/** Returns true if shading of the material will be affected by lights */ supportLighting() {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
/** Returns true if this material supports geometry instancing */ supportInstancing() {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
/** Returns true if this material supports geometry instancing */ isBatchable() {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
/** Return true if this material requires the scene color texture */ needSceneColor() {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
/** Return true if this material requires the linear scene depth texture */ needSceneDepth() {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
/** Create material instance */ createInstance() {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
/** @internal */ get coreMaterial() {
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Apply material
|
|
126
|
+
* @param ctx - Draw context
|
|
127
|
+
* @returns true if no error, otherwise false
|
|
128
|
+
*/ apply(ctx) {
|
|
129
|
+
for(let pass = 0; pass < this._numPasses; pass++){
|
|
130
|
+
const hash = this.calcGlobalHash(ctx, pass);
|
|
131
|
+
let state = this._states[hash];
|
|
132
|
+
if (!state) {
|
|
133
|
+
const programHash = `${this.constructor.name}:${hash}`;
|
|
134
|
+
let program = Material._programCache[programHash];
|
|
135
|
+
if (!program) {
|
|
136
|
+
program = this.createProgram(ctx, pass) ?? null;
|
|
137
|
+
Material._programCache[programHash] = program;
|
|
138
|
+
}
|
|
139
|
+
const bindGroup = program.bindGroupLayouts.length > 2 ? ctx.device.createBindGroup(program.bindGroupLayouts[2]) : null;
|
|
140
|
+
state = {
|
|
141
|
+
program,
|
|
142
|
+
bindGroup,
|
|
143
|
+
bindGroupTag: bindGroup?.getGPUId() ?? '',
|
|
144
|
+
renderStateSet: ctx.device.createRenderStateSet(),
|
|
145
|
+
materialTag: -1
|
|
146
|
+
};
|
|
147
|
+
this._states[hash] = state;
|
|
148
|
+
}
|
|
149
|
+
if (!state.program) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
this.applyUniforms(state.bindGroup, ctx, state.materialTag !== this._optionTag, pass);
|
|
153
|
+
state.materialTag = this._optionTag;
|
|
154
|
+
this.updateRenderStates(pass, state.renderStateSet, ctx);
|
|
155
|
+
this._currentHash[pass] = hash;
|
|
156
|
+
if (state.bindGroup) {
|
|
157
|
+
const id = state.bindGroup.getGPUId();
|
|
158
|
+
if (id !== state.bindGroupTag) {
|
|
159
|
+
state.bindGroupTag = id;
|
|
160
|
+
this._changeTag++;
|
|
161
|
+
RenderBundleWrapper.materialChanged(this.coreMaterial);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** @internal */ bind(device, pass) {
|
|
167
|
+
const hash = this._currentHash[pass];
|
|
168
|
+
const state = this._states[hash];
|
|
169
|
+
if (!state) {
|
|
170
|
+
console.error('Material.bind() failed: state not found');
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
if (!state.program) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
device.setProgram(state.program);
|
|
177
|
+
device.setBindGroup(2, state.bindGroup);
|
|
178
|
+
device.setRenderStates(state.renderStateSet);
|
|
179
|
+
}
|
|
180
|
+
/** @internal */ calcGlobalHash(ctx, pass) {
|
|
181
|
+
return `${this.getHash(pass)}:${ctx.materialFlags}:${ctx.renderPassHash}`;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Draws a primitive using this material
|
|
185
|
+
* @internal
|
|
186
|
+
*
|
|
187
|
+
* @param primitive - The prmitive to be drawn
|
|
188
|
+
* @param ctx - The context of current drawing task
|
|
189
|
+
* @param numInstances - How many instances should be drawn. if zero, the instance count will be automatically detected.
|
|
190
|
+
*/ draw(primitive, ctx, numInstances = 0) {
|
|
191
|
+
for(let pass = 0; pass < this._numPasses; pass++){
|
|
192
|
+
this.bind(ctx.device, pass);
|
|
193
|
+
this.drawPrimitive(pass, primitive, ctx, numInstances);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Sets all uniform values to the bind group of the material if needed
|
|
198
|
+
* @param bindGroup - The bind group of the material
|
|
199
|
+
* @param ctx - The context of current drawing task
|
|
200
|
+
* @param needUpdate - true if the uniform values needs to update
|
|
201
|
+
*/ applyUniforms(bindGroup, ctx, needUpdate, pass) {
|
|
202
|
+
if (needUpdate) {
|
|
203
|
+
this._applyUniforms(bindGroup, ctx, pass);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/** @internal */ optionChanged(changeHash) {
|
|
207
|
+
this._optionTag++;
|
|
208
|
+
if (changeHash) {
|
|
209
|
+
for(let i = 0; i < this._numPasses; i++){
|
|
210
|
+
this._hash[i] = null;
|
|
211
|
+
}
|
|
212
|
+
this._changeTag++;
|
|
213
|
+
RenderBundleWrapper.materialChanged(this.coreMaterial);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Convert pass to hash
|
|
218
|
+
* @param pass - pass number
|
|
219
|
+
* @returns String hash
|
|
220
|
+
*/ passToHash(pass) {
|
|
221
|
+
return String(pass);
|
|
222
|
+
}
|
|
223
|
+
/** @internal */ createHash(pass) {
|
|
224
|
+
return `${this.constructor.name}|${pass}|${this._createHash()}`;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Draw primitve
|
|
228
|
+
*
|
|
229
|
+
* @param primitive - Primitive to be drawn
|
|
230
|
+
* @param ctx - Draw context
|
|
231
|
+
*/ drawPrimitive(pass, primitive, ctx, numInstances) {
|
|
232
|
+
if (numInstances > 0) {
|
|
233
|
+
primitive.drawInstanced(numInstances);
|
|
234
|
+
} else if (ctx.instanceData) {
|
|
235
|
+
primitive.drawInstanced(ctx.instanceData.numInstances);
|
|
236
|
+
} else {
|
|
237
|
+
primitive.draw();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Dispose material
|
|
242
|
+
*/ onDispose() {
|
|
243
|
+
super.onDispose();
|
|
244
|
+
const m = Material._registry.get(this.persistentId);
|
|
245
|
+
if (m?.get() === this) {
|
|
246
|
+
Material._registry.delete(this.persistentId);
|
|
247
|
+
m.dispose();
|
|
248
|
+
}
|
|
249
|
+
if (this._states) {
|
|
250
|
+
for(const k in this._states){
|
|
251
|
+
this._states[k]?.bindGroup?.dispose();
|
|
252
|
+
}
|
|
253
|
+
this._states = {};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/** @internal */ createProgram(ctx, pass) {
|
|
257
|
+
const pb = new ProgramBuilder(ctx.device);
|
|
258
|
+
return this._createProgram(pb, ctx, pass);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Creates the shader program
|
|
262
|
+
* @param pb - The program builder
|
|
263
|
+
* @param ctx - The drawing context
|
|
264
|
+
* @param func - The material func
|
|
265
|
+
* @returns The created shader program
|
|
266
|
+
*/ _createProgram(_pb, _ctx, _pass) {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Applies uniform values
|
|
271
|
+
* @param bindGroup - The bind group
|
|
272
|
+
* @param ctx - The drawing context
|
|
273
|
+
*/ _applyUniforms(_bindGroup, _ctx, _pass) {}
|
|
274
|
+
/**
|
|
275
|
+
* Update render states according to draw context and current material pass
|
|
276
|
+
* @param pass - Current material pass
|
|
277
|
+
* @param renderStates - Render state set to be updated
|
|
278
|
+
* @param ctx - Draw context
|
|
279
|
+
*/ updateRenderStates(_pass, _renderStates, _ctx) {}
|
|
280
|
+
/**
|
|
281
|
+
* Calculates the hash code of the shader program
|
|
282
|
+
* @returns The hash code
|
|
283
|
+
*/ _createHash() {
|
|
284
|
+
return '';
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* True if this is a material instance
|
|
288
|
+
* @internal
|
|
289
|
+
**/ get $isInstance() {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Returns the instance uniforms if this is a material instance
|
|
294
|
+
* @internal
|
|
295
|
+
**/ get $instanceUniforms() {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export { Material };
|
|
301
|
+
//# sourceMappingURL=material.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"material.js","sources":["../../../src/material/material.ts"],"sourcesContent":["import type { AbstractDevice, BindGroup, GPUProgram, RenderStateSet } from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport type { Primitive } from '../render/primitive';\r\nimport type { DrawContext } from '../render/drawable';\r\nimport { QUEUE_OPAQUE } from '../values';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport { DWeakRef, Disposable } from '@zephyr3d/base';\r\nimport type { Clonable, IDisposable } from '@zephyr3d/base';\r\n\r\ntype MaterialState = {\r\n program: GPUProgram;\r\n bindGroup: BindGroup;\r\n bindGroupTag: string;\r\n renderStateSet: RenderStateSet;\r\n materialTag: number;\r\n};\r\n\r\n/**\r\n * Base class for any kind of materials\r\n *\r\n * @public\r\n */\r\nexport class Material extends Disposable implements Clonable<Material>, IDisposable {\r\n /** @internal */\r\n protected static _registry: Map<string, DWeakRef<Material>> = new Map();\r\n /** @internal */\r\n private static _nextId = 0;\r\n /** @internal */\r\n private static _programCache: { [hash: string]: GPUProgram } = {};\r\n /** @internal */\r\n private _states: { [hash: string]: MaterialState };\r\n /** @internal */\r\n protected _numPasses: number;\r\n /** @internal */\r\n protected _hash: string[];\r\n /** @internal */\r\n private _optionTag: number;\r\n /** @internal */\r\n private readonly _id: number;\r\n /** @internal */\r\n private _persistentId: string;\r\n /** @internal */\r\n private _currentHash: string[];\r\n /** @internal */\r\n private _changeTag: number;\r\n /**\r\n * Creates an instance of material\r\n */\r\n constructor() {\r\n super();\r\n this._id = ++Material._nextId;\r\n this._persistentId = crypto.randomUUID();\r\n this._states = {};\r\n this._numPasses = 1;\r\n this._hash = [null];\r\n this._optionTag = 0;\r\n this._changeTag = 0;\r\n this._currentHash = [];\r\n Material._registry.set(this._persistentId, new DWeakRef(this));\r\n }\r\n clone(): Material {\r\n const other = new Material();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n if (this._states) {\r\n for (const k in this._states) {\r\n this._states[k]?.bindGroup?.dispose();\r\n }\r\n this._states = {};\r\n }\r\n this._numPasses = other._numPasses;\r\n }\r\n /** Material change tag */\r\n get changeTag() {\r\n return this._changeTag;\r\n }\r\n /** @internal */\r\n static findMaterialById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n /**\r\n * Persistent ID used in serialization\r\n */\r\n get persistentId() {\r\n return this._persistentId;\r\n }\r\n set persistentId(val) {\r\n if (val !== this._persistentId) {\r\n const m = Material._registry.get(this._persistentId);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry material mismatch');\r\n }\r\n Material._registry.delete(this._persistentId);\r\n this._persistentId = val;\r\n Material._registry.set(this._persistentId, m);\r\n }\r\n }\r\n /** Unique identifier of the material */\r\n get instanceId(): number {\r\n return this._id;\r\n }\r\n get numPasses(): number {\r\n return this._numPasses;\r\n }\r\n set numPasses(val: number) {\r\n while (this._hash.length < val) {\r\n this._hash.push(null);\r\n }\r\n this._numPasses = val;\r\n }\r\n /** @internal */\r\n protected getHash(pass: number): string {\r\n if (this._hash[pass] === null) {\r\n this._hash[pass] = this.createHash(pass);\r\n }\r\n return this._hash[pass];\r\n }\r\n getQueueType(): number {\r\n return QUEUE_OPAQUE;\r\n }\r\n /** Returns true if given pass is transparent */\r\n isTransparentPass(_pass: number): boolean {\r\n return false;\r\n }\r\n /** Returns true if shading of the material will be affected by lights */\r\n supportLighting(): boolean {\r\n return true;\r\n }\r\n /** Returns true if this material supports geometry instancing */\r\n supportInstancing(): boolean {\r\n return true;\r\n }\r\n /** Returns true if this material supports geometry instancing */\r\n isBatchable(): boolean {\r\n return false;\r\n }\r\n /** Return true if this material requires the scene color texture */\r\n needSceneColor(): boolean {\r\n return false;\r\n }\r\n /** Return true if this material requires the linear scene depth texture */\r\n needSceneDepth(): boolean {\r\n return false;\r\n }\r\n /** Create material instance */\r\n createInstance(): this {\r\n return null;\r\n }\r\n /** @internal */\r\n get coreMaterial(): this {\r\n return this;\r\n }\r\n /**\r\n * Apply material\r\n * @param ctx - Draw context\r\n * @returns true if no error, otherwise false\r\n */\r\n apply(ctx: DrawContext): boolean {\r\n for (let pass = 0; pass < this._numPasses; pass++) {\r\n const hash = this.calcGlobalHash(ctx, pass);\r\n let state = this._states[hash];\r\n if (!state) {\r\n const programHash = `${this.constructor.name}:${hash}`;\r\n let program = Material._programCache[programHash];\r\n if (!program) {\r\n program = this.createProgram(ctx, pass) ?? null;\r\n Material._programCache[programHash] = program;\r\n }\r\n const bindGroup =\r\n program.bindGroupLayouts.length > 2\r\n ? ctx.device.createBindGroup(program.bindGroupLayouts[2])\r\n : null;\r\n state = {\r\n program,\r\n bindGroup,\r\n bindGroupTag: bindGroup?.getGPUId() ?? '',\r\n renderStateSet: ctx.device.createRenderStateSet(),\r\n materialTag: -1\r\n };\r\n this._states[hash] = state;\r\n }\r\n if (!state.program) {\r\n return false;\r\n }\r\n this.applyUniforms(state.bindGroup, ctx, state.materialTag !== this._optionTag, pass);\r\n state.materialTag = this._optionTag;\r\n this.updateRenderStates(pass, state.renderStateSet, ctx);\r\n this._currentHash[pass] = hash;\r\n if (state.bindGroup) {\r\n const id = state.bindGroup.getGPUId();\r\n if (id !== state.bindGroupTag) {\r\n state.bindGroupTag = id;\r\n this._changeTag++;\r\n RenderBundleWrapper.materialChanged(this.coreMaterial);\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n bind(device: AbstractDevice, pass: number): boolean {\r\n const hash = this._currentHash[pass];\r\n const state = this._states[hash];\r\n if (!state) {\r\n console.error('Material.bind() failed: state not found');\r\n return false;\r\n }\r\n if (!state.program) {\r\n return false;\r\n }\r\n device.setProgram(state.program);\r\n device.setBindGroup(2, state.bindGroup);\r\n device.setRenderStates(state.renderStateSet);\r\n }\r\n /** @internal */\r\n private calcGlobalHash(ctx: DrawContext, pass: number): string {\r\n return `${this.getHash(pass)}:${ctx.materialFlags}:${ctx.renderPassHash}`;\r\n }\r\n /**\r\n * Draws a primitive using this material\r\n * @internal\r\n *\r\n * @param primitive - The prmitive to be drawn\r\n * @param ctx - The context of current drawing task\r\n * @param numInstances - How many instances should be drawn. if zero, the instance count will be automatically detected.\r\n */\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances = 0) {\r\n for (let pass = 0; pass < this._numPasses; pass++) {\r\n this.bind(ctx.device, pass);\r\n this.drawPrimitive(pass, primitive, ctx, numInstances);\r\n }\r\n }\r\n /**\r\n * Sets all uniform values to the bind group of the material if needed\r\n * @param bindGroup - The bind group of the material\r\n * @param ctx - The context of current drawing task\r\n * @param needUpdate - true if the uniform values needs to update\r\n */\r\n applyUniforms(bindGroup: BindGroup, ctx: DrawContext, needUpdate: boolean, pass: number): void {\r\n if (needUpdate) {\r\n this._applyUniforms(bindGroup, ctx, pass);\r\n }\r\n }\r\n /** @internal */\r\n optionChanged(changeHash: boolean) {\r\n this._optionTag++;\r\n if (changeHash) {\r\n for (let i = 0; i < this._numPasses; i++) {\r\n this._hash[i] = null;\r\n }\r\n this._changeTag++;\r\n RenderBundleWrapper.materialChanged(this.coreMaterial);\r\n }\r\n }\r\n /**\r\n * Convert pass to hash\r\n * @param pass - pass number\r\n * @returns String hash\r\n */\r\n passToHash(pass: number): string {\r\n return String(pass);\r\n }\r\n /** @internal */\r\n createHash(pass: number): string {\r\n return `${this.constructor.name}|${pass}|${this._createHash()}`;\r\n }\r\n /**\r\n * Draw primitve\r\n *\r\n * @param primitive - Primitive to be drawn\r\n * @param ctx - Draw context\r\n */\r\n drawPrimitive(pass: number, primitive: Primitive, ctx: DrawContext, numInstances: number): void {\r\n if (numInstances > 0) {\r\n primitive.drawInstanced(numInstances);\r\n } else if (ctx.instanceData) {\r\n primitive.drawInstanced(ctx.instanceData.numInstances);\r\n } else {\r\n primitive.draw();\r\n }\r\n }\r\n /**\r\n * Dispose material\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n const m = Material._registry.get(this.persistentId);\r\n if (m?.get() === this) {\r\n Material._registry.delete(this.persistentId);\r\n m.dispose();\r\n }\r\n if (this._states) {\r\n for (const k in this._states) {\r\n this._states[k]?.bindGroup?.dispose();\r\n }\r\n this._states = {};\r\n }\r\n }\r\n /** @internal */\r\n protected createProgram(ctx: DrawContext, pass: number): GPUProgram {\r\n const pb = new ProgramBuilder(ctx.device);\r\n return this._createProgram(pb, ctx, pass);\r\n }\r\n /**\r\n * Creates the shader program\r\n * @param pb - The program builder\r\n * @param ctx - The drawing context\r\n * @param func - The material func\r\n * @returns The created shader program\r\n */\r\n protected _createProgram(_pb: ProgramBuilder, _ctx: DrawContext, _pass: number): GPUProgram {\r\n return null;\r\n }\r\n /**\r\n * Applies uniform values\r\n * @param bindGroup - The bind group\r\n * @param ctx - The drawing context\r\n */\r\n protected _applyUniforms(_bindGroup: BindGroup, _ctx: DrawContext, _pass: number) {}\r\n /**\r\n * Update render states according to draw context and current material pass\r\n * @param pass - Current material pass\r\n * @param renderStates - Render state set to be updated\r\n * @param ctx - Draw context\r\n */\r\n protected updateRenderStates(_pass: number, _renderStates: RenderStateSet, _ctx: DrawContext): void {}\r\n /**\r\n * Calculates the hash code of the shader program\r\n * @returns The hash code\r\n */\r\n protected _createHash(): string {\r\n return '';\r\n }\r\n /**\r\n * True if this is a material instance\r\n * @internal\r\n **/\r\n get $isInstance() {\r\n return false;\r\n }\r\n /**\r\n * Returns the instance uniforms if this is a material instance\r\n * @internal\r\n **/\r\n get $instanceUniforms(): Float32Array<ArrayBuffer> {\r\n return null;\r\n }\r\n}\r\n"],"names":["Material","Disposable","_registry","Map","_nextId","_programCache","_id","_persistentId","crypto","randomUUID","_states","_numPasses","_hash","_optionTag","_changeTag","_currentHash","set","DWeakRef","clone","other","copyFrom","k","bindGroup","dispose","changeTag","findMaterialById","id","m","get","delete","persistentId","val","Error","instanceId","numPasses","length","push","getHash","pass","createHash","getQueueType","QUEUE_OPAQUE","isTransparentPass","_pass","supportLighting","supportInstancing","isBatchable","needSceneColor","needSceneDepth","createInstance","coreMaterial","apply","ctx","hash","calcGlobalHash","state","programHash","name","program","createProgram","bindGroupLayouts","device","createBindGroup","bindGroupTag","getGPUId","renderStateSet","createRenderStateSet","materialTag","applyUniforms","updateRenderStates","RenderBundleWrapper","materialChanged","bind","console","error","setProgram","setBindGroup","setRenderStates","materialFlags","renderPassHash","draw","primitive","numInstances","drawPrimitive","needUpdate","_applyUniforms","optionChanged","changeHash","i","passToHash","String","_createHash","drawInstanced","instanceData","onDispose","pb","ProgramBuilder","_createProgram","_pb","_ctx","_bindGroup","_renderStates","$isInstance","$instanceUniforms"],"mappings":"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"}
|