diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 9a60bb6f..8a154337 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1990,6 +1990,7 @@ Performance improvements - More vector pool usage Increase human move speed LOD components re-attach physics +VectorPool->JomlPool diff --git a/src/main/java/electrosphere/client/entity/camera/CameraEntityUtils.java b/src/main/java/electrosphere/client/entity/camera/CameraEntityUtils.java index 4aa76f8b..2bf85886 100644 --- a/src/main/java/electrosphere/client/entity/camera/CameraEntityUtils.java +++ b/src/main/java/electrosphere/client/entity/camera/CameraEntityUtils.java @@ -8,7 +8,7 @@ import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; import electrosphere.entity.btree.BehaviorTree; import electrosphere.entity.types.common.CommonEntityUtils; -import electrosphere.mem.VectorPool; +import electrosphere.mem.JomlPool; import electrosphere.util.math.SpatialMathUtils; import org.joml.Matrix4d; @@ -222,9 +222,9 @@ public class CameraEntityUtils { */ public static Matrix4d getCameraViewMatrix(Entity camera){ //alloc - Vector3d cameraCenter = VectorPool.getD(); - Vector3d cameraEye = VectorPool.getD(); - Vector3d cameraUp = VectorPool.getD(); + Vector3d cameraCenter = JomlPool.getD(); + Vector3d cameraEye = JomlPool.getD(); + Vector3d cameraUp = JomlPool.getD(); //perform math cameraCenter.set(0,0,0); @@ -239,9 +239,9 @@ public class CameraEntityUtils { ).scale(1.0f, 1.0f, 1.0f); //free - VectorPool.release(cameraCenter); - VectorPool.release(cameraEye); - VectorPool.release(cameraUp); + JomlPool.release(cameraCenter); + JomlPool.release(cameraEye); + JomlPool.release(cameraUp); return rVal; } diff --git a/src/main/java/electrosphere/controls/CameraHandler.java b/src/main/java/electrosphere/controls/CameraHandler.java index 6a19913b..f3db0ca6 100644 --- a/src/main/java/electrosphere/controls/CameraHandler.java +++ b/src/main/java/electrosphere/controls/CameraHandler.java @@ -7,7 +7,7 @@ import electrosphere.client.entity.camera.CameraEntityUtils; import electrosphere.client.entity.crosshair.Crosshair; import electrosphere.engine.Globals; import electrosphere.entity.EntityUtils; -import electrosphere.mem.VectorPool; +import electrosphere.mem.JomlPool; import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.renderer.ui.events.MouseEvent; import electrosphere.util.math.SpatialMathUtils; @@ -114,7 +114,7 @@ public class CameraHandler { Vector3d characterPos = EntityUtils.getPosition(Globals.clientState.playerEntity); Vector3d targetPos = Crosshair.getTargetPosition(); - Vector3d diffed = VectorPool.getD(); + Vector3d diffed = JomlPool.getD(); diffed.set(targetPos).sub(characterPos).mul(-1).normalize(); cameraRotationVector.set((float)diffed.x, 0.5f, (float)diffed.z).normalize(); @@ -123,7 +123,7 @@ public class CameraHandler { CameraEntityUtils.setCameraPitch(Globals.clientState.playerCamera, pitch); CameraEntityUtils.setCameraYaw(Globals.clientState.playerCamera, yaw); - VectorPool.release(diffed); + JomlPool.release(diffed); } else { CameraEntityUtils.setCameraPitch(Globals.clientState.playerCamera, pitch); CameraEntityUtils.setCameraYaw(Globals.clientState.playerCamera, yaw); @@ -139,10 +139,10 @@ public class CameraHandler { //free previous vec Vector3d oldCenter = CameraEntityUtils.getCameraCenter(Globals.clientState.playerCamera); Vector3d entityPos = EntityUtils.getPosition(Globals.clientState.playerEntity); - Vector3d newCenter = VectorPool.getD(); + Vector3d newCenter = JomlPool.getD(); newCenter.set(entityPos).add(CameraEntityUtils.getOrbitalCameraRadialOffset(Globals.clientState.playerCamera)); CameraEntityUtils.setCameraCenter(Globals.clientState.playerCamera, newCenter); - VectorPool.release(oldCenter); + JomlPool.release(oldCenter); } //update view matrix offset float xFactor = (float)Math.cos(yaw / 180.0f * Math.PI); @@ -151,10 +151,10 @@ public class CameraHandler { //update offset Vector3d radialOffset = CameraEntityUtils.getOrbitalCameraRadialOffset(Globals.clientState.playerCamera); Vector3d oldOffset = CameraEntityUtils.getOrbitalCameraRadialOffset(Globals.clientState.playerCamera); - Vector3d trueOffset = VectorPool.getD(); + Vector3d trueOffset = JomlPool.getD(); trueOffset.set(radialOffset).mul(xFactor,1.0f,yFactor); CameraEntityUtils.setOrbitalCameraRadialOffset(Globals.clientState.playerCamera, trueOffset); - VectorPool.release(oldOffset); + JomlPool.release(oldOffset); //update rotation vec cameraRotationVector.mul(CameraEntityUtils.getOrbitalCameraDistance(Globals.clientState.playerCamera)); diff --git a/src/main/java/electrosphere/data/utils/DataFormatUtil.java b/src/main/java/electrosphere/data/utils/DataFormatUtil.java index 12716277..7f142bd6 100644 --- a/src/main/java/electrosphere/data/utils/DataFormatUtil.java +++ b/src/main/java/electrosphere/data/utils/DataFormatUtil.java @@ -6,7 +6,7 @@ import java.util.List; import org.joml.Quaterniond; import org.joml.Vector3d; -import electrosphere.mem.VectorPool; +import electrosphere.mem.JomlPool; /** * Converts data structures between formats saved to disk vs formats used in engine @@ -45,12 +45,12 @@ public class DataFormatUtil { */ public static Vector3d getDoubleListAsVector(List values){ if(values == null){ - return VectorPool.getD(); + return JomlPool.getD(); } if(values.size() > 0){ - return VectorPool.getD(values.get(0),values.get(1),values.get(2)); + return JomlPool.getD(values.get(0),values.get(1),values.get(2)); } else { - return VectorPool.getD(); + return JomlPool.getD(); } } diff --git a/src/main/java/electrosphere/entity/state/attach/AttachUtils.java b/src/main/java/electrosphere/entity/state/attach/AttachUtils.java index e790952f..99285cd4 100644 --- a/src/main/java/electrosphere/entity/state/attach/AttachUtils.java +++ b/src/main/java/electrosphere/entity/state/attach/AttachUtils.java @@ -6,7 +6,7 @@ import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityTags; import electrosphere.entity.EntityUtils; import electrosphere.logger.LoggerInterface; -import electrosphere.mem.VectorPool; +import electrosphere.mem.JomlPool; import electrosphere.renderer.actor.Actor; import electrosphere.server.datacell.ServerDataCell; import electrosphere.server.datacell.utils.ServerEntityTagUtils; @@ -347,7 +347,7 @@ public class AttachUtils { Vector3d parentScale ){ //transform bone space - Vector3d position = VectorPool.getD(offsetVector); + Vector3d position = JomlPool.getD(offsetVector); position = position.rotate(new Quaterniond(boneRotation)); position = position.add(bonePosition); position = position.mul(parentScale); diff --git a/src/main/java/electrosphere/entity/state/hitbox/HitboxCollectionState.java b/src/main/java/electrosphere/entity/state/hitbox/HitboxCollectionState.java index 12068dec..0650e5cb 100644 --- a/src/main/java/electrosphere/entity/state/hitbox/HitboxCollectionState.java +++ b/src/main/java/electrosphere/entity/state/hitbox/HitboxCollectionState.java @@ -26,7 +26,7 @@ import electrosphere.entity.EntityUtils; import electrosphere.entity.state.attach.AttachUtils; import electrosphere.entity.state.hitbox.HitboxCollectionState.HitboxState.HitboxShapeType; import electrosphere.logger.LoggerInterface; -import electrosphere.mem.VectorPool; +import electrosphere.mem.JomlPool; import electrosphere.server.datacell.Realm; import electrosphere.server.entity.poseactor.PoseActor; import electrosphere.util.math.SpatialMathUtils; @@ -462,7 +462,7 @@ public class HitboxCollectionState { Quaterniond offsetRotation = new Quaterniond(); //the bone's transform - Vector3d bonePositionD = VectorPool.getD(); + Vector3d bonePositionD = JomlPool.getD(); if(bonePosition != null){ bonePositionD.set(bonePosition); } @@ -471,7 +471,7 @@ public class HitboxCollectionState { //the parent's transform Vector3d parentPosition = EntityUtils.getPosition(parent); Quaterniond parentRotation = EntityUtils.getRotation(parent); - Vector3d parentScale = VectorPool.getD(); + Vector3d parentScale = JomlPool.getD(); parentScale.set(EntityUtils.getScale(parent)); //calculate @@ -482,9 +482,9 @@ public class HitboxCollectionState { PhysicsEntityUtils.setGeometryOffsetPosition(collisionEngine, geom, hitboxPos, new Quaterniond()); //free vecs used in computation - VectorPool.release(bonePositionD); - VectorPool.release(parentScale); - VectorPool.release(hitboxPos); + JomlPool.release(bonePositionD); + JomlPool.release(parentScale); + JomlPool.release(hitboxPos); } /** diff --git a/src/main/java/electrosphere/mem/VectorPool.java b/src/main/java/electrosphere/mem/JomlPool.java similarity index 95% rename from src/main/java/electrosphere/mem/VectorPool.java rename to src/main/java/electrosphere/mem/JomlPool.java index fbb3d1db..5432188b 100644 --- a/src/main/java/electrosphere/mem/VectorPool.java +++ b/src/main/java/electrosphere/mem/JomlPool.java @@ -8,9 +8,9 @@ import org.joml.Vector3d; import org.joml.Vector3f; /** - * A pool for temporary vectors + * A pool for temporary joml objects */ -public class VectorPool { +public class JomlPool { /** * Structure to store not-in-use objects @@ -53,7 +53,7 @@ public class VectorPool { data.y = 0; data.z = 0; lock.lock(); - VectorPool.vec3fPool.add(data); + JomlPool.vec3fPool.add(data); lock.unlock(); } @@ -117,7 +117,7 @@ public class VectorPool { data.y = 0; data.z = 0; lock.lock(); - VectorPool.vec3dPool.add(data); + JomlPool.vec3dPool.add(data); lock.unlock(); } diff --git a/src/main/java/electrosphere/renderer/actor/Actor.java b/src/main/java/electrosphere/renderer/actor/Actor.java index 6148bb80..823a85ef 100644 --- a/src/main/java/electrosphere/renderer/actor/Actor.java +++ b/src/main/java/electrosphere/renderer/actor/Actor.java @@ -5,7 +5,7 @@ import electrosphere.data.entity.creature.bonegroups.BoneGroup; import electrosphere.engine.Globals; import electrosphere.entity.state.AnimationPriorities; import electrosphere.logger.LoggerInterface; -import electrosphere.mem.VectorPool; +import electrosphere.mem.JomlPool; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.RenderPipelineState; import electrosphere.renderer.actor.ActorUniformMap.UniformValue; @@ -887,9 +887,9 @@ public class Actor { } Globals.profiler.beginAggregateCpuSample("Actor.isWithinFrustumBox"); Sphered sphere = model.getBoundingSphere(); - Vector3d modelPosition = model.getModelMatrix().getTranslation(VectorPool.getD()); + Vector3d modelPosition = model.getModelMatrix().getTranslation(JomlPool.getD()); boolean check = renderPipelineState.getFrustumIntersection().testSphere((float)(sphere.x + modelPosition.x), (float)(sphere.y + modelPosition.y), (float)(sphere.z + modelPosition.z), (float)sphere.r); - VectorPool.release(modelPosition); + JomlPool.release(modelPosition); Globals.profiler.endCpuSample(); return check; } diff --git a/src/main/java/electrosphere/renderer/meshgen/TransvoxelModelGeneration.java b/src/main/java/electrosphere/renderer/meshgen/TransvoxelModelGeneration.java index ec097c42..32ac6598 100644 --- a/src/main/java/electrosphere/renderer/meshgen/TransvoxelModelGeneration.java +++ b/src/main/java/electrosphere/renderer/meshgen/TransvoxelModelGeneration.java @@ -13,7 +13,7 @@ import electrosphere.client.terrain.cells.VoxelTextureAtlas; import electrosphere.client.terrain.data.TerrainChunkData; import electrosphere.engine.Globals; import electrosphere.logger.LoggerInterface; -import electrosphere.mem.VectorPool; +import electrosphere.mem.JomlPool; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.model.Material; import electrosphere.renderer.model.Mesh; @@ -431,8 +431,8 @@ public class TransvoxelModelGeneration { //calculate normal for new triangle - Vector3f u = VectorPool.getF().set(verts.get(index1)).sub(verts.get(index0)); - Vector3f v = VectorPool.getF().set(verts.get(index2)).sub(verts.get(index1)); + Vector3f u = JomlPool.getF().set(verts.get(index1)).sub(verts.get(index0)); + Vector3f v = JomlPool.getF().set(verts.get(index2)).sub(verts.get(index1)); float dotVal = u.dot(v); Vector3f n; // if(dotVal > NORMAL_DOT_THRESHOLD || dotVal < -NORMAL_DOT_THRESHOLD){ @@ -455,8 +455,8 @@ public class TransvoxelModelGeneration { dotVal ); } - VectorPool.release(u); - VectorPool.release(v); + JomlPool.release(u); + JomlPool.release(v); @@ -907,14 +907,14 @@ public class TransvoxelModelGeneration { //calculate normal for new triangle - Vector3f u = VectorPool.getF().set(verts.get(index1)).sub(verts.get(index0)); - Vector3f v = VectorPool.getF().set(verts.get(index2)).sub(verts.get(index1)); + Vector3f u = JomlPool.getF().set(verts.get(index1)).sub(verts.get(index0)); + Vector3f v = JomlPool.getF().set(verts.get(index2)).sub(verts.get(index1)); Vector3f n = new Vector3f(u.y * v.z - u.z * v.y, u.z * v.x - u.x * v.z, u.x * v.y - u.y * v.x).normalize(); if(invertNormals){ n = n.mul(-1); } - VectorPool.release(u); - VectorPool.release(v); + JomlPool.release(u); + JomlPool.release(v);