optimization for when physics engine doesn't step

This commit is contained in:
Andrew Meadows 2015-01-27 15:54:32 -08:00
parent aebdd3b335
commit d5c0c200de
2 changed files with 22 additions and 17 deletions

View file

@ -29,23 +29,27 @@ PhysicsEngine::~PhysicsEngine() {
// begin EntitySimulation overrides // begin EntitySimulation overrides
void PhysicsEngine::updateEntitiesInternal(const quint64& now) { void PhysicsEngine::updateEntitiesInternal(const quint64& now) {
// NOTE: the grand order of operations is: // no need to send updates unless the physics simulation has actually stepped
// (1) relay incoming changes if (_lastNumSubstepsAtUpdateInternal != _numSubsteps) {
// (2) step simulation _lastNumSubstepsAtUpdateInternal = _numSubsteps;
// (3) synchronize outgoing motion states // NOTE: the grand order of operations is:
// (4) send outgoing packets // (1) relay incoming changes
// (2) step simulation
// (3) synchronize outgoing motion states
// (4) send outgoing packets
// this is step (4) // this is step (4)
QSet<ObjectMotionState*>::iterator stateItr = _outgoingPackets.begin(); QSet<ObjectMotionState*>::iterator stateItr = _outgoingPackets.begin();
while (stateItr != _outgoingPackets.end()) { while (stateItr != _outgoingPackets.end()) {
ObjectMotionState* state = *stateItr; ObjectMotionState* state = *stateItr;
if (state->doesNotNeedToSendUpdate()) { if (state->doesNotNeedToSendUpdate()) {
stateItr = _outgoingPackets.erase(stateItr); stateItr = _outgoingPackets.erase(stateItr);
} else if (state->shouldSendUpdate(_numSubsteps)) { } else if (state->shouldSendUpdate(_numSubsteps)) {
state->sendUpdate(_entityPacketSender, _numSubsteps); state->sendUpdate(_entityPacketSender, _numSubsteps);
++stateItr; ++stateItr;
} else { } else {
++stateItr; ++stateItr;
}
} }
} }
} }

View file

@ -114,6 +114,7 @@ private:
ContactMap _contactMap; ContactMap _contactMap;
uint32_t _numContactFrames = 0; uint32_t _numContactFrames = 0;
uint32_t _lastNumSubstepsAtUpdateInternal = 0;
}; };
#endif // hifi_PhysicsEngine_h #endif // hifi_PhysicsEngine_h