@woosh/meep-engine 2.33.20 → 2.33.24
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/core/assert.js +3 -1
- package/core/bvh2/BinaryNode.js +1 -1
- package/core/bvh2/aabb3/AABB3.js +18 -0
- package/core/bvh2/aabb3/AABB3Math.js +1 -1
- package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
- package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
- package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
- package/core/bvh2/traversal/__detailed_box_volume_intersection.js +11 -8
- package/core/collection/ArrayUtils.js +1 -1
- package/core/collection/HashMap.js +66 -22
- package/core/collection/array/arrayQuickSort.js +9 -6
- package/core/collection/array/array_swap.js +22 -0
- package/core/collection/array/computeHashArray.js +22 -0
- package/core/collection/array/computeHashIntegerArray.js +15 -0
- package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
- package/core/color/Color.js +2 -1
- package/core/function/FunctionCompiler.js +2 -1
- package/core/geom/3d/CircleMath.js +4 -4
- package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
- package/core/geom/3d/cone/computeConeBoundingBox.js +4 -4
- package/core/geom/3d/{compute_bounding_cone_of_2_cones.js → cone/compute_bounding_cone_of_2_cones.js} +3 -3
- package/core/geom/3d/{compute_bounding_cone_of_2_cones.spec.js → cone/compute_bounding_cone_of_2_cones.spec.js} +1 -1
- package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +1 -1
- package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +11 -3
- package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
- package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
- package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
- package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
- package/core/geom/3d/{encode_unit3_hemioct.js → normal/hemioct/encode_unit3_hemioct.js} +0 -0
- package/core/geom/3d/{unit_hemioct.spec.js → normal/hemioct/unit_hemioct.spec.js} +1 -1
- package/core/geom/3d/normal/lamber_azimuth/transform.js +61 -0
- package/core/geom/3d/normal/spherical/sphere_map_transform.js +77 -0
- package/core/geom/3d/{lerp_planes_to_array.js → plane/lerp_planes_to_array.js} +1 -3
- package/core/geom/3d/plane/plane3_lerp.js +3 -1
- package/core/geom/3d/plane/plane3_slerp.js +4 -1
- package/core/geom/3d/{plane_computeConvex3PlaneIntersection.js → plane/plane_computeConvex3PlaneIntersection.js} +14 -16
- package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
- package/core/geom/3d/shape/AbstractShape3D.js +29 -0
- package/core/geom/3d/shape/CompositeShape.js +60 -0
- package/core/geom/3d/shape/TransformedShape3D.js +70 -0
- package/core/geom/3d/shape/UnitCubeShape3D.js +13 -0
- package/core/geom/3d/shape/UnitSphereShape3D.js +16 -0
- package/core/geom/3d/topology/TopoTriangle.js +1 -1
- package/core/geom/3d/topology/TopoVertex.js +1 -1
- package/core/geom/3d/topology/bounds/computeTraingleClusterNormalBoundingCone.js +2 -2
- package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
- package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
- package/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
- package/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
- package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
- package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
- package/core/geom/AABB2.js +1 -1
- package/core/geom/ConicRay.js +3 -1
- package/core/geom/LineSegment.js +1 -77
- package/core/geom/Matrix4.js +8 -8
- package/core/geom/Plane.js +15 -10
- package/core/geom/Quaternion.js +2 -1
- package/core/geom/Rectangle.js +2 -1
- package/core/geom/Vector1.js +1 -1
- package/core/geom/Vector3.d.ts +2 -0
- package/core/geom/Vector3.js +35 -159
- package/core/geom/Vector3.spec.js +2 -1
- package/core/geom/Vector4.js +2 -1
- package/core/geom/random/randomPointInBox.js +7 -3
- package/core/geom/random/randomPointInPoint.js +6 -3
- package/core/geom/random/randomPointInSphere.js +6 -3
- package/core/geom/random/randomPointOnBox.js +7 -3
- package/core/geom/random/randomPointOnSphere.js +6 -3
- package/core/geom/v3_angle_between.js +31 -0
- package/core/geom/v3_distance.js +16 -0
- package/core/geom/v3_distance_sqr.js +17 -0
- package/core/geom/v3_dot.js +13 -0
- package/core/geom/v3_length.js +10 -0
- package/core/geom/v3_length_sqr.js +10 -0
- package/core/geom/v3_lerp.js +21 -0
- package/core/geom/v3_slerp.js +48 -0
- package/core/graph/graph_k_means_cluster.js +1 -1
- package/core/math/MathUtils.js +0 -354
- package/core/math/MathUtils.spec.js +7 -1
- package/core/math/gaussian.js +9 -0
- package/core/math/hash/computeHashFloat.js +17 -0
- package/core/math/hash/computeHashFloatArray.js +34 -0
- package/core/math/hash/computeObjectHash.js +54 -0
- package/core/math/intersects1D.js +19 -0
- package/core/math/interval/NumericInterval.js +2 -2
- package/core/math/isValueBetween.js +10 -0
- package/core/math/isValueBetweenInclusive.js +10 -0
- package/core/math/noise/curl_noise_3dt.js +1 -1
- package/core/math/noise/sdnoise.js +10 -10
- package/core/math/overlap1D.js +19 -0
- package/core/math/pingpong.js +17 -0
- package/core/math/random/makeRangedRandom.js +19 -0
- package/core/math/random/randomFloatBetween.js +14 -0
- package/core/math/random/randomFromArray.js +19 -0
- package/core/math/random/randomGaussian.js +15 -0
- package/core/math/random/randomIntegerBetween.js +14 -0
- package/core/math/random/roundFair.js +15 -0
- package/core/math/separation1D.js +21 -0
- package/core/math/solveQuadratic.js +25 -0
- package/core/model/BoundedValue.js +1 -1
- package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
- package/core/model/node-graph/node/Port.js +1 -1
- package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
- package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
- package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
- package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
- package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
- package/core/model/stat/LinearModifier.js +1 -1
- package/core/primitives/array/computeIntegerArrayHash.js +6 -1
- package/engine/animation/curve/AnimationCurve.js +72 -0
- package/engine/animation/curve/Keyframe.js +27 -0
- package/engine/animation/keyed2/AnimationTrack.js +27 -3
- package/engine/asset/Asset.js +1 -1
- package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
- package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
- package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
- package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
- package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
- package/engine/asset/loaders/material/computeMaterialHash.js +4 -3
- package/engine/asset/loaders/material/computeTextureEquality.js +13 -5
- package/engine/asset/loaders/material/computeTextureHash.js +2 -1
- package/engine/ecs/animation/Animation.js +2 -1
- package/engine/ecs/animation/InverseKinematics.js +2 -1
- package/engine/ecs/animation/OneBoneSurfaceAlignmentSolver.js +3 -1
- package/engine/ecs/animation/TwoBoneInverseKinematicsSolver.js +3 -1
- package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
- package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
- package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
- package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
- package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
- package/engine/ecs/fow/FogOfWar.js +2 -3
- package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
- package/engine/ecs/gui/GUIElement.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +1 -1
- package/engine/ecs/gui/position/ViewportPosition.js +2 -1
- package/engine/ecs/systems/RangedAttackSystem.js +1 -1
- package/engine/ecs/systems/SteeringSystem.js +3 -2
- package/engine/ecs/terrain/ecs/Terrain.js +6 -0
- package/engine/ecs/terrain/ecs/layers/TerrainLayers.js +5 -0
- package/engine/ecs/terrain/ecs/splat/SplatMapping.js +5 -0
- package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
- package/engine/ecs/tooltip/TooltipComponent.js +15 -0
- package/engine/ecs/util/hideEntityGracefully.js +18 -0
- package/engine/graphics/GraphicsEngine.js +1 -0
- package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
- package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
- package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +2 -2
- package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
- package/engine/graphics/ecs/highlight/renderer/OutlineRenderer.js +0 -53
- package/engine/graphics/ecs/light/Light.d.ts +1 -1
- package/engine/graphics/ecs/light/Light.js +3 -0
- package/engine/graphics/ecs/mesh/Mesh.js +2 -1
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
- package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
- package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
- package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
- package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
- package/engine/graphics/geometry/AttributeSpec.js +105 -0
- package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
- package/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +2 -1
- package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
- package/engine/graphics/micron/build/clustering/computeFaceCurvatureScore.js +1 -1
- package/engine/graphics/micron/build/clustering/compute_face_connection_weight.js +1 -1
- package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
- package/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +1 -1
- package/engine/graphics/micron/build/hierarchy/patch_combine.js +1 -1
- package/engine/graphics/micron/buildPatchwork.js +1 -1
- package/engine/graphics/micron/format/MicronGeometry.js +3 -3
- package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
- package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
- package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
- package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
- package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
- package/engine/graphics/micron/render/refinement/is_patch_facing_back.js +2 -2
- package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
- package/engine/graphics/particles/particular/engine/ParticularEngine.js +4 -2
- package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +92 -144
- package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
- package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +51 -12
- package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +3 -2
- package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
- package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
- package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
- package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
- package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
- package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
- package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +21 -0
- package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +0 -20
- package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
- package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +7 -25
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
- package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +384 -0
- package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +558 -0
- package/engine/graphics/particles/particular/group/Operation.js +18 -0
- package/engine/graphics/particles/particular/group/OperationType.js +9 -0
- package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
- package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
- package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
- package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
- package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
- package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
- package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
- package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
- package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
- package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
- package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +1 -1
- package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
- package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
- package/engine/graphics/render/forward_plus/LightManager.js +126 -95
- package/engine/graphics/render/forward_plus/PointLight.js +9 -0
- package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
- package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
- package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
- package/engine/graphics/render/forward_plus/computeFrustumCorners.js +15 -33
- package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
- package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +12 -2
- package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +6 -6
- package/engine/graphics/render/forward_plus/prototypeLightManager.js +231 -136
- package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
- package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
- package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
- package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
- package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
- package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
- package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
- package/engine/graphics/render/layers/RenderLayerUtils.js +8 -5
- package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
- package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
- package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
- package/engine/graphics/texture/atlas/TextureAtlas.js +18 -14
- package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
- package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
- package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
- package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
- package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
- package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
- package/engine/graphics/trail/x/RibbonX.js +17 -2
- package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
- package/engine/graphics/util/projectSphere.js +1 -1
- package/engine/grid/components/GridObstacle.js +3 -10
- package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
- package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
- package/engine/navigation/ecs/components/Path.js +3 -2
- package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
- package/engine/reference/v2/Reference.js +6 -0
- package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
- package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
- package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
- package/engine/ui/notification/notificationGenerator.js +1 -1
- package/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +3 -2
- package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
- package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
- package/generation/markers/GridCellActionPlaceMarker.js +13 -1
- package/generation/markers/MarkerNode.js +6 -0
- package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
- package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
- package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
- package/generation/theme/ThemeEngine.js +5 -2
- package/misc/makeMaterialIconCached.js +2 -2
- package/package.json +3 -3
- package/view/View.js +4 -2
- package/view/elements/image/HTMLElementCacheKey.js +2 -1
- package/view/elements/radial/RadialText.js +2 -1
- package/view/minimap/gl/MinimapMarkersGL.js +19 -101
- package/view/minimap/gl/buildMaterial.js +94 -0
- package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
- package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -345
|
@@ -11,95 +11,13 @@ import {
|
|
|
11
11
|
InstancedBufferGeometry
|
|
12
12
|
} from "three";
|
|
13
13
|
import ObservedValue from "../../../../../core/model/ObservedValue.js";
|
|
14
|
+
import { typedArrayConstructorFromDataType } from "./typedArrayConstructorFromDataType.js";
|
|
15
|
+
import { itemSizeFromAttributeType } from "./itemSizeFromAttributeType.js";
|
|
16
|
+
import { OperationType } from "./OperationType.js";
|
|
17
|
+
import { Operation } from "./Operation.js";
|
|
18
|
+
import { optimizeCommandQueue } from "./optimizeCommandQueue.js";
|
|
14
19
|
|
|
15
20
|
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* @enum {number}
|
|
19
|
-
*/
|
|
20
|
-
const ParticleDataType = {
|
|
21
|
-
Float32: 0,
|
|
22
|
-
Float64: 1,
|
|
23
|
-
Uint8: 2
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
* @enum {number}
|
|
29
|
-
*/
|
|
30
|
-
const ParticleAttributeType = {
|
|
31
|
-
Scalar: 1,
|
|
32
|
-
Vector2: 2,
|
|
33
|
-
Vector3: 3,
|
|
34
|
-
Vector4: 4
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
*
|
|
39
|
-
* @enum {number}
|
|
40
|
-
*/
|
|
41
|
-
const OperationType = {
|
|
42
|
-
Remove: 0,
|
|
43
|
-
Add: 1,
|
|
44
|
-
WriteAttribute: 2
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
* @param {OperationType} operator
|
|
50
|
-
* @param {Array} operands
|
|
51
|
-
* @constructor
|
|
52
|
-
*/
|
|
53
|
-
function Operation(operator, operands) {
|
|
54
|
-
/**
|
|
55
|
-
*
|
|
56
|
-
* @type {OperationType}
|
|
57
|
-
*/
|
|
58
|
-
this.operator = operator;
|
|
59
|
-
/**
|
|
60
|
-
*
|
|
61
|
-
* @type {Array}
|
|
62
|
-
*/
|
|
63
|
-
this.operands = operands;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
*
|
|
68
|
-
* @param {ParticleAttributeType} type
|
|
69
|
-
*/
|
|
70
|
-
export function itemSizeFromAttributeType(type) {
|
|
71
|
-
switch (type) {
|
|
72
|
-
case ParticleAttributeType.Scalar:
|
|
73
|
-
return 1;
|
|
74
|
-
case ParticleAttributeType.Vector2:
|
|
75
|
-
return 2;
|
|
76
|
-
case ParticleAttributeType.Vector3:
|
|
77
|
-
return 3;
|
|
78
|
-
case ParticleAttributeType.Vector4:
|
|
79
|
-
return 4;
|
|
80
|
-
default:
|
|
81
|
-
throw new Error(`Unsupported attribute type: ${type}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
*
|
|
87
|
-
* @param {ParticleDataType} type
|
|
88
|
-
* @returns {*}
|
|
89
|
-
*/
|
|
90
|
-
export function typedArrayConstructorFromDataType(type) {
|
|
91
|
-
switch (type) {
|
|
92
|
-
case ParticleDataType.Float32:
|
|
93
|
-
return Float32Array;
|
|
94
|
-
case ParticleDataType.Float64:
|
|
95
|
-
return Float64Array;
|
|
96
|
-
case ParticleDataType.Uint8:
|
|
97
|
-
return Uint8Array;
|
|
98
|
-
default:
|
|
99
|
-
throw new Error(`Unsupported type: ${type}`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
21
|
/**
|
|
104
22
|
*
|
|
105
23
|
* @param {ParticleSpecification} spec
|
|
@@ -264,161 +182,7 @@ ParticleGroup.prototype.update = function () {
|
|
|
264
182
|
};
|
|
265
183
|
|
|
266
184
|
ParticleGroup.prototype.optimizeCommandQueue = function () {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* TODO this is pretty slow and should be optimized
|
|
271
|
-
* @param {Array.<Operation>} queue
|
|
272
|
-
*/
|
|
273
|
-
function cutRedundantOperations(queue) {
|
|
274
|
-
const queueLength = queue.length;
|
|
275
|
-
loop_Main: for (let i = queueLength - 1; i >= 0; i--) {
|
|
276
|
-
const opA = queue[i];
|
|
277
|
-
if (opA.operator === OperationType.Add) {
|
|
278
|
-
//nothing to do
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
const operandsA = opA.operands;
|
|
282
|
-
if (opA.operator === OperationType.Remove) {
|
|
283
|
-
//hunt and delete operations before this remove that affect deleted references
|
|
284
|
-
for (let k = 0, kl = operandsA.length; k < kl; k++) {
|
|
285
|
-
const refA = operandsA[k];
|
|
286
|
-
|
|
287
|
-
//walk the queue back and remove all previous operations on these references
|
|
288
|
-
loop_B: for (let j = i - 1; j >= 0; j--) {
|
|
289
|
-
const opB = queue[j];
|
|
290
|
-
const operandsB = opB.operands;
|
|
291
|
-
const operatorB = opB.operator;
|
|
292
|
-
if (operatorB === OperationType.WriteAttribute) {
|
|
293
|
-
const refB = operandsB[0];
|
|
294
|
-
if (refA === refB) {
|
|
295
|
-
//cut operation
|
|
296
|
-
queue.splice(j, 1);
|
|
297
|
-
i--;
|
|
298
|
-
}
|
|
299
|
-
} else if (operatorB === OperationType.Add) {
|
|
300
|
-
for (let m = 0, ml = operandsB.length; m < ml; m++) {
|
|
301
|
-
const refB = operandsB[m];
|
|
302
|
-
if (refA === refB) {
|
|
303
|
-
let jump = 0;
|
|
304
|
-
//delete operation and add operation cancel each other out
|
|
305
|
-
if (kl > 1) {
|
|
306
|
-
operandsA.splice(k, 1);
|
|
307
|
-
kl--;
|
|
308
|
-
k--;
|
|
309
|
-
} else {
|
|
310
|
-
queue.splice(i, 1);
|
|
311
|
-
i--;
|
|
312
|
-
jump |= 2;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
if (ml > 1) {
|
|
316
|
-
operandsB.splice(m, 1);
|
|
317
|
-
m--;
|
|
318
|
-
ml--;
|
|
319
|
-
} else {
|
|
320
|
-
//cut operation from the queue
|
|
321
|
-
queue.splice(j, 1);
|
|
322
|
-
i--;
|
|
323
|
-
jump |= 1;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
if ((jump & 2) !== 0) {
|
|
327
|
-
continue loop_Main;
|
|
328
|
-
} else if (jump !== 0) {
|
|
329
|
-
continue loop_B;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
} else if (opA.operator === OperationType.WriteAttribute) {
|
|
337
|
-
//find other operations that modify the same attribute, any previous operations are redundant at this point
|
|
338
|
-
const refA = operandsA[0];
|
|
339
|
-
const attributeIndexA = operandsA[1];
|
|
340
|
-
//walk the queue back and remove all previous operations on these references
|
|
341
|
-
for (let j = i - 1; j >= 0; j--) {
|
|
342
|
-
const opB = queue[j];
|
|
343
|
-
if (opB.operator !== OperationType.WriteAttribute) {
|
|
344
|
-
//ignore
|
|
345
|
-
continue;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
const operandsB = opB.operands;
|
|
349
|
-
if (operandsB[0] === refA && operandsB[1] === attributeIndexA) {
|
|
350
|
-
//operation will be overwritten anyway, cut it
|
|
351
|
-
queue.splice(j, 1);
|
|
352
|
-
i--;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
*
|
|
361
|
-
* @param {Array.<Operation>} queue
|
|
362
|
-
*/
|
|
363
|
-
function groupOperations(queue) {
|
|
364
|
-
let l = queue.length;
|
|
365
|
-
for (let i = 0; i < l; i++) {
|
|
366
|
-
const opA = queue[i];
|
|
367
|
-
const operatorA = opA.operator;
|
|
368
|
-
const operandsA = opA.operands;
|
|
369
|
-
if (operatorA === OperationType.Add || operatorA === OperationType.Remove) {
|
|
370
|
-
for (let j = i + 1; j < l; j++) {
|
|
371
|
-
const opB = queue[j];
|
|
372
|
-
if (opB.operator === operatorA) {
|
|
373
|
-
const operandsB = opB.operands;
|
|
374
|
-
const numOperands = operandsB.length;
|
|
375
|
-
|
|
376
|
-
for (let k = 0; k < numOperands; k++) {
|
|
377
|
-
const refB = operandsB[k];
|
|
378
|
-
if (operandsA.indexOf(refB) === -1) {
|
|
379
|
-
operandsA.push(refB);
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
queue.splice(j, 1);
|
|
384
|
-
j--;
|
|
385
|
-
l--;
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
/**
|
|
393
|
-
* @param {Array.<Operation>} queue
|
|
394
|
-
*/
|
|
395
|
-
function sortOperations(queue) {
|
|
396
|
-
queue.sort(function (a, b) {
|
|
397
|
-
const operatorA = a.operator;
|
|
398
|
-
const operatorB = b.operator;
|
|
399
|
-
|
|
400
|
-
//it's important that Add and Remove operations are sorted to the front of the queue, before Write operations
|
|
401
|
-
if (operatorA < operatorB) {
|
|
402
|
-
return -1;
|
|
403
|
-
} else if (operatorB > operatorA) {
|
|
404
|
-
return 1;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
if (operatorA !== OperationType.WriteAttribute) {
|
|
408
|
-
return 0;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
const attributeIndexA = a.operands[1];
|
|
412
|
-
const attributeIndexB = b.operands[1];
|
|
413
|
-
|
|
414
|
-
//sort write operations by buffer index
|
|
415
|
-
return attributeIndexB - attributeIndexA;
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
cutRedundantOperations(queue);
|
|
420
|
-
groupOperations(queue);
|
|
421
|
-
sortOperations(queue);
|
|
185
|
+
optimizeCommandQueue(this.commandQueue);
|
|
422
186
|
};
|
|
423
187
|
|
|
424
188
|
/**
|
|
@@ -869,7 +633,5 @@ ParticleGroup.prototype.setSize = function (newSize) {
|
|
|
869
633
|
};
|
|
870
634
|
|
|
871
635
|
export {
|
|
872
|
-
ParticleGroup
|
|
873
|
-
ParticleAttributeType,
|
|
874
|
-
ParticleDataType
|
|
636
|
+
ParticleGroup
|
|
875
637
|
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ParticleGroup, } from "./ParticleGroup.js";
|
|
2
2
|
import { ParticleSpecification } from "./ParticleSpecification.js";
|
|
3
3
|
import { ParticleAttribute } from "./ParticleAttribute.js";
|
|
4
|
+
import { ParticleDataType } from "./ParticleDataType.js";
|
|
5
|
+
import { ParticleAttributeType } from "./ParticleAttributeType.js";
|
|
4
6
|
|
|
5
7
|
test("After calling grow(1) size is increased by 1", () => {
|
|
6
8
|
const spec = new ParticleSpecification();
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { ParticleGroup } from "./ParticleGroup.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
1
|
/**
|
|
5
2
|
*
|
|
6
3
|
* @constructor
|
|
4
|
+
* @deprecated use {@link VertexDataSpec} instead
|
|
7
5
|
*/
|
|
8
6
|
export function ParticleSpecification() {
|
|
9
7
|
/**
|
|
@@ -13,6 +11,25 @@ export function ParticleSpecification() {
|
|
|
13
11
|
this.attributes = [];
|
|
14
12
|
}
|
|
15
13
|
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param {string} name
|
|
17
|
+
* @return {undefined|ParticleAttribute}
|
|
18
|
+
*/
|
|
19
|
+
ParticleSpecification.prototype.getByName = function (name) {
|
|
20
|
+
const attributes = this.attributes;
|
|
21
|
+
const n = attributes.length;
|
|
22
|
+
for (let i = 0; i < n; i++) {
|
|
23
|
+
const attribute = attributes[i];
|
|
24
|
+
|
|
25
|
+
if (attribute.name === name) {
|
|
26
|
+
return attribute;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return undefined;
|
|
31
|
+
};
|
|
32
|
+
|
|
16
33
|
/**
|
|
17
34
|
*
|
|
18
35
|
* @param {ParticleAttribute} attribute
|
|
@@ -20,9 +37,7 @@ export function ParticleSpecification() {
|
|
|
20
37
|
*/
|
|
21
38
|
ParticleSpecification.prototype.add = function (attribute) {
|
|
22
39
|
//check uniqueness of name
|
|
23
|
-
if (this.
|
|
24
|
-
return a.name === attribute.name;
|
|
25
|
-
})) {
|
|
40
|
+
if (this.getByName(attribute.name) !== undefined) {
|
|
26
41
|
throw new Error(`Attribute named '${attribute.name}' already exists`);
|
|
27
42
|
}
|
|
28
43
|
|
|
@@ -31,11 +46,3 @@ ParticleSpecification.prototype.add = function (attribute) {
|
|
|
31
46
|
//for chaining, return self
|
|
32
47
|
return this;
|
|
33
48
|
};
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
* @return {ParticleGroup}
|
|
38
|
-
*/
|
|
39
|
-
ParticleSpecification.prototype.build = function () {
|
|
40
|
-
return new ParticleGroup(this);
|
|
41
|
-
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ParticleAttributeType } from "./ParticleAttributeType.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param {ParticleAttributeType} type
|
|
6
|
+
*/
|
|
7
|
+
export function itemSizeFromAttributeType(type) {
|
|
8
|
+
switch (type) {
|
|
9
|
+
case ParticleAttributeType.Scalar:
|
|
10
|
+
return 1;
|
|
11
|
+
case ParticleAttributeType.Vector2:
|
|
12
|
+
return 2;
|
|
13
|
+
case ParticleAttributeType.Vector3:
|
|
14
|
+
return 3;
|
|
15
|
+
case ParticleAttributeType.Vector4:
|
|
16
|
+
return 4;
|
|
17
|
+
default:
|
|
18
|
+
throw new Error(`Unsupported attribute type: ${type}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { OperationType } from "./OperationType.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param {Operation[]} queue
|
|
6
|
+
*/
|
|
7
|
+
export function optimizeCommandQueue(queue) {
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* TODO this is pretty slow and should be optimized
|
|
11
|
+
* @param {Array.<Operation>} queue
|
|
12
|
+
*/
|
|
13
|
+
function cutRedundantOperations(queue) {
|
|
14
|
+
const queueLength = queue.length;
|
|
15
|
+
loop_Main: for (let i = queueLength - 1; i >= 0; i--) {
|
|
16
|
+
const opA = queue[i];
|
|
17
|
+
if (opA.operator === OperationType.Add) {
|
|
18
|
+
//nothing to do
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const operandsA = opA.operands;
|
|
22
|
+
if (opA.operator === OperationType.Remove) {
|
|
23
|
+
//hunt and delete operations before this remove that affect deleted references
|
|
24
|
+
for (let k = 0, kl = operandsA.length; k < kl; k++) {
|
|
25
|
+
const refA = operandsA[k];
|
|
26
|
+
|
|
27
|
+
//walk the queue back and remove all previous operations on these references
|
|
28
|
+
loop_B: for (let j = i - 1; j >= 0; j--) {
|
|
29
|
+
const opB = queue[j];
|
|
30
|
+
const operandsB = opB.operands;
|
|
31
|
+
const operatorB = opB.operator;
|
|
32
|
+
if (operatorB === OperationType.WriteAttribute) {
|
|
33
|
+
const refB = operandsB[0];
|
|
34
|
+
if (refA === refB) {
|
|
35
|
+
//cut operation
|
|
36
|
+
queue.splice(j, 1);
|
|
37
|
+
i--;
|
|
38
|
+
}
|
|
39
|
+
} else if (operatorB === OperationType.Add) {
|
|
40
|
+
for (let m = 0, ml = operandsB.length; m < ml; m++) {
|
|
41
|
+
const refB = operandsB[m];
|
|
42
|
+
if (refA === refB) {
|
|
43
|
+
let jump = 0;
|
|
44
|
+
//delete operation and add operation cancel each other out
|
|
45
|
+
if (kl > 1) {
|
|
46
|
+
operandsA.splice(k, 1);
|
|
47
|
+
kl--;
|
|
48
|
+
k--;
|
|
49
|
+
} else {
|
|
50
|
+
queue.splice(i, 1);
|
|
51
|
+
i--;
|
|
52
|
+
jump |= 2;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (ml > 1) {
|
|
56
|
+
operandsB.splice(m, 1);
|
|
57
|
+
m--;
|
|
58
|
+
ml--;
|
|
59
|
+
} else {
|
|
60
|
+
//cut operation from the queue
|
|
61
|
+
queue.splice(j, 1);
|
|
62
|
+
i--;
|
|
63
|
+
jump |= 1;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if ((jump & 2) !== 0) {
|
|
67
|
+
continue loop_Main;
|
|
68
|
+
} else if (jump !== 0) {
|
|
69
|
+
continue loop_B;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
} else if (opA.operator === OperationType.WriteAttribute) {
|
|
77
|
+
//find other operations that modify the same attribute, any previous operations are redundant at this point
|
|
78
|
+
const refA = operandsA[0];
|
|
79
|
+
const attributeIndexA = operandsA[1];
|
|
80
|
+
//walk the queue back and remove all previous operations on these references
|
|
81
|
+
for (let j = i - 1; j >= 0; j--) {
|
|
82
|
+
const opB = queue[j];
|
|
83
|
+
if (opB.operator !== OperationType.WriteAttribute) {
|
|
84
|
+
//ignore
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const operandsB = opB.operands;
|
|
89
|
+
if (operandsB[0] === refA && operandsB[1] === attributeIndexA) {
|
|
90
|
+
//operation will be overwritten anyway, cut it
|
|
91
|
+
queue.splice(j, 1);
|
|
92
|
+
i--;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
*
|
|
101
|
+
* @param {Array.<Operation>} queue
|
|
102
|
+
*/
|
|
103
|
+
function groupOperations(queue) {
|
|
104
|
+
let l = queue.length;
|
|
105
|
+
for (let i = 0; i < l; i++) {
|
|
106
|
+
const opA = queue[i];
|
|
107
|
+
const operatorA = opA.operator;
|
|
108
|
+
const operandsA = opA.operands;
|
|
109
|
+
if (operatorA === OperationType.Add || operatorA === OperationType.Remove) {
|
|
110
|
+
for (let j = i + 1; j < l; j++) {
|
|
111
|
+
const opB = queue[j];
|
|
112
|
+
if (opB.operator === operatorA) {
|
|
113
|
+
const operandsB = opB.operands;
|
|
114
|
+
const numOperands = operandsB.length;
|
|
115
|
+
|
|
116
|
+
for (let k = 0; k < numOperands; k++) {
|
|
117
|
+
const refB = operandsB[k];
|
|
118
|
+
if (operandsA.indexOf(refB) === -1) {
|
|
119
|
+
operandsA.push(refB);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
queue.splice(j, 1);
|
|
124
|
+
j--;
|
|
125
|
+
l--;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* @param {Array.<Operation>} queue
|
|
134
|
+
*/
|
|
135
|
+
function sortOperations(queue) {
|
|
136
|
+
queue.sort(function (a, b) {
|
|
137
|
+
const operatorA = a.operator;
|
|
138
|
+
const operatorB = b.operator;
|
|
139
|
+
|
|
140
|
+
//it's important that Add and Remove operations are sorted to the front of the queue, before Write operations
|
|
141
|
+
if (operatorA < operatorB) {
|
|
142
|
+
return -1;
|
|
143
|
+
} else if (operatorB > operatorA) {
|
|
144
|
+
return 1;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (operatorA !== OperationType.WriteAttribute) {
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const attributeIndexA = a.operands[1];
|
|
152
|
+
const attributeIndexB = b.operands[1];
|
|
153
|
+
|
|
154
|
+
//sort write operations by buffer index
|
|
155
|
+
return attributeIndexB - attributeIndexA;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
cutRedundantOperations(queue);
|
|
160
|
+
groupOperations(queue);
|
|
161
|
+
sortOperations(queue);
|
|
162
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ParticleDataType } from "./ParticleDataType.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param {ParticleDataType} type
|
|
6
|
+
* @returns {*}
|
|
7
|
+
*/
|
|
8
|
+
export function typedArrayConstructorFromDataType(type) {
|
|
9
|
+
switch (type) {
|
|
10
|
+
case ParticleDataType.Float32:
|
|
11
|
+
return Float32Array;
|
|
12
|
+
case ParticleDataType.Float64:
|
|
13
|
+
return Float64Array;
|
|
14
|
+
case ParticleDataType.Uint8:
|
|
15
|
+
return Uint8Array;
|
|
16
|
+
default:
|
|
17
|
+
throw new Error(`Unsupported type: ${type}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -108,7 +108,7 @@ function makeConfig(engine) {
|
|
|
108
108
|
new ClingToTerrainSystem(),
|
|
109
109
|
new TerrainSystem(graphics, assetManager),
|
|
110
110
|
new WaterSystem(graphics),
|
|
111
|
-
new Trail2DSystem(
|
|
111
|
+
new Trail2DSystem(engine),
|
|
112
112
|
new Foliage2System(assetManager, graphics),
|
|
113
113
|
new ViewportPositionSystem(graphics.viewport.size),
|
|
114
114
|
new GridPosition2TransformSystem(),
|
|
@@ -326,7 +326,7 @@ function main(engine) {
|
|
|
326
326
|
position: {
|
|
327
327
|
x: 60 + i * 10,
|
|
328
328
|
y: 0,
|
|
329
|
-
z: 30 + j*10
|
|
329
|
+
z: 30 + j * 10
|
|
330
330
|
},
|
|
331
331
|
scale: {
|
|
332
332
|
x: 1,
|
|
@@ -50,7 +50,7 @@ export class AmbientOcclusionPostProcessEffect extends EnginePlugin {
|
|
|
50
50
|
* @type {boolean}
|
|
51
51
|
* @private
|
|
52
52
|
*/
|
|
53
|
-
this.__use_normals =
|
|
53
|
+
this.__use_normals = false;
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* Resolution scale at which AO is to be rendered. Higher scale will lead to sharper and better looking results
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { computeHashFloat, computeHashIntegerArray } from "../../../../../../core/math/MathUtils.js";
|
|
2
1
|
import { ProgramValueSlotParameterType } from "./ProgramValueSlotParameterType.js";
|
|
3
2
|
import { computeStringHash } from "../../../../../../core/primitives/strings/computeStringHash.js";
|
|
3
|
+
import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
|
|
4
|
+
import { computeHashFloat } from "../../../../../../core/math/hash/computeHashFloat.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
*
|