Optimizations

This commit is contained in:
Daniel Chappuis 2020-10-15 22:23:32 +02:00
parent fcf7def577
commit 1bc1f0621e

View File

@ -47,7 +47,8 @@ void DynamicsSystem::integrateRigidBodiesPositions(decimal timeStep, bool isSpli
const decimal isSplitImpulseFactor = isSplitImpulseActive ? decimal(1.0) : decimal(0.0);
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
// Get the constrained velocity
Vector3 newLinVelocity = mRigidBodyComponents.mConstrainedLinearVelocities[i];
@ -74,7 +75,8 @@ void DynamicsSystem::updateBodiesState() {
RP3D_PROFILE("DynamicsSystem::updateBodiesState()", mProfiler);
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
// Update the linear and angular velocity of the body
mRigidBodyComponents.mLinearVelocities[i] = mRigidBodyComponents.mConstrainedLinearVelocities[i];
@ -89,7 +91,7 @@ void DynamicsSystem::updateBodiesState() {
}
// Update the position of the body (using the new center of mass and new orientation)
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
Transform& transform = mTransformComponents.getTransform(mRigidBodyComponents.mBodiesEntities[i]);
const Vector3& centerOfMassWorld = mRigidBodyComponents.mCentersOfMassWorld[i];
@ -98,7 +100,8 @@ void DynamicsSystem::updateBodiesState() {
}
// Update the local-to-world transform of the colliders
for (uint32 i=0; i < mColliderComponents.getNbEnabledComponents(); i++) {
const uint32 nbColliderComponents = mColliderComponents.getNbEnabledComponents();
for (uint32 i=0; i < nbColliderComponents; i++) {
// Update the local-to-world transform of the collider
mColliderComponents.mLocalToWorldTransforms[i] = mTransformComponents.getTransform(mColliderComponents.mBodiesEntities[i]) *
@ -119,7 +122,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
resetSplitVelocities();
// Integration component velocities using force/torque
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
const uint32 nbEnabledRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
for (uint32 i=0; i < nbEnabledRigidBodyComponents; i++) {
assert(mRigidBodyComponents.mSplitLinearVelocities[i] == Vector3(0, 0, 0));
assert(mRigidBodyComponents.mSplitAngularVelocities[i] == Vector3(0, 0, 0));
@ -137,7 +141,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
// Apply gravity force
if (mIsGravityEnabled) {
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
// If the gravity has to be applied to this rigid body
if (mRigidBodyComponents.mIsGravityEnabled[i]) {
@ -162,7 +167,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
// Using Taylor Serie for e^(-x) : e^x ~ 1 + x + x^2/2! + ...
// => e^(-x) ~ 1 - x
// => v2 = v1 * (1 - c * dt)
for (uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
const decimal linDampingFactor = mRigidBodyComponents.mLinearDampings[i];
const decimal angDampingFactor = mRigidBodyComponents.mAngularDampings[i];
@ -177,7 +183,8 @@ void DynamicsSystem::integrateRigidBodiesVelocities(decimal timeStep) {
void DynamicsSystem::resetBodiesForceAndTorque() {
// For each body of the world
for (uint32 i=0; i < mRigidBodyComponents.getNbComponents(); i++) {
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbComponents();
for (uint32 i=0; i < nbRigidBodyComponents; i++) {
mRigidBodyComponents.mExternalForces[i].setToZero();
mRigidBodyComponents.mExternalTorques[i].setToZero();
}
@ -186,7 +193,8 @@ void DynamicsSystem::resetBodiesForceAndTorque() {
// Reset the split velocities of the bodies
void DynamicsSystem::resetSplitVelocities() {
for(uint32 i=0; i < mRigidBodyComponents.getNbEnabledComponents(); i++) {
const uint32 nbRigidBodyComponents = mRigidBodyComponents.getNbEnabledComponents();
for(uint32 i=0; i < nbRigidBodyComponents; i++) {
mRigidBodyComponents.mSplitLinearVelocities[i].setToZero();
mRigidBodyComponents.mSplitAngularVelocities[i].setToZero();
}