mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 15:33:10 +02:00
Handle LODs correctly (?) for reliable deltas.
This commit is contained in:
parent
154eb04336
commit
282c62a083
3 changed files with 23 additions and 7 deletions
|
@ -61,6 +61,13 @@ class MetavoxelDeltaMessage {
|
|||
|
||||
DECLARE_STREAMABLE_METATYPE(MetavoxelDeltaMessage)
|
||||
|
||||
/// A message indicating that metavoxel delta information is being sent on a reliable channel.
|
||||
class MetavoxelDeltaPendingMessage {
|
||||
STREAMABLE
|
||||
};
|
||||
|
||||
DECLARE_STREAMABLE_METATYPE(MetavoxelDeltaPendingMessage)
|
||||
|
||||
/// A simple streamable edit.
|
||||
class MetavoxelEditMessage {
|
||||
STREAMABLE
|
||||
|
|
|
@ -647,7 +647,8 @@ TestEndpoint::TestEndpoint(Mode mode) :
|
|||
_mode(mode),
|
||||
_highPriorityMessagesToSend(0.0f),
|
||||
_reliableMessagesToSend(0.0f),
|
||||
_reliableDeltaReceivedOffset(0) {
|
||||
_reliableDeltaReceivedOffset(0),
|
||||
_reliableDeltaPending(false) {
|
||||
|
||||
connect(&_sequencer, SIGNAL(receivedHighPriorityMessage(const QVariant&)),
|
||||
SLOT(handleHighPriorityMessage(const QVariant&)));
|
||||
|
@ -905,7 +906,7 @@ bool TestEndpoint::simulate(int iterationNumber) {
|
|||
if (_reliableDeltaReceivedOffset > 0) {
|
||||
if (_sequencer.getReliableOutputChannel()->getOffset() < _reliableDeltaReceivedOffset) {
|
||||
Bitstream& out = _sequencer.startPacket();
|
||||
out << QVariant();
|
||||
out << QVariant::fromValue(MetavoxelDeltaPendingMessage());
|
||||
_sequencer.endPacket();
|
||||
return false;
|
||||
}
|
||||
|
@ -935,7 +936,7 @@ bool TestEndpoint::simulate(int iterationNumber) {
|
|||
_reliableDeltaLOD = _lod;
|
||||
|
||||
Bitstream& out = _sequencer.startPacket();
|
||||
out << QVariant();
|
||||
out << QVariant::fromValue(MetavoxelDeltaPendingMessage());
|
||||
_sequencer.endPacket();
|
||||
}
|
||||
} else {
|
||||
|
@ -1081,9 +1082,15 @@ void TestEndpoint::handleMessage(const QVariant& message, Bitstream& in) {
|
|||
|
||||
} else if (userType == MetavoxelDeltaMessage::Type) {
|
||||
PacketRecord* receiveRecord = getLastAcknowledgedReceiveRecord();
|
||||
_data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, getLastAcknowledgedSendRecord()->getLOD());
|
||||
_data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in,
|
||||
_dataLOD = getLastAcknowledgedSendRecord()->getLOD());
|
||||
compareMetavoxelData();
|
||||
|
||||
} else if (userType == MetavoxelDeltaPendingMessage::Type) {
|
||||
if (!_reliableDeltaPending) {
|
||||
_reliableDeltaLOD = getLastAcknowledgedSendRecord()->getLOD();
|
||||
_reliableDeltaPending = true;
|
||||
}
|
||||
} else if (userType == QMetaType::QVariantList) {
|
||||
foreach (const QVariant& element, message.toList()) {
|
||||
handleMessage(element, in);
|
||||
|
@ -1100,8 +1107,7 @@ PacketRecord* TestEndpoint::maybeCreateSendRecord() const {
|
|||
}
|
||||
|
||||
PacketRecord* TestEndpoint::maybeCreateReceiveRecord() const {
|
||||
return new TestReceiveRecord(getLastAcknowledgedSendRecord()->getLOD(),
|
||||
(_mode == METAVOXEL_SERVER_MODE) ? MetavoxelData() : _data, _remoteState);
|
||||
return new TestReceiveRecord(_dataLOD, (_mode == METAVOXEL_SERVER_MODE) ? MetavoxelData() : _data, _remoteState);
|
||||
}
|
||||
|
||||
void TestEndpoint::handleHighPriorityMessage(const QVariant& message) {
|
||||
|
@ -1121,8 +1127,9 @@ void TestEndpoint::handleHighPriorityMessage(const QVariant& message) {
|
|||
void TestEndpoint::handleReliableMessage(const QVariant& message, Bitstream& in) {
|
||||
if (message.userType() == MetavoxelDeltaMessage::Type) {
|
||||
PacketRecord* receiveRecord = getLastAcknowledgedReceiveRecord();
|
||||
_data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, getLastAcknowledgedSendRecord()->getLOD());
|
||||
_data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, _dataLOD = _reliableDeltaLOD);
|
||||
compareMetavoxelData();
|
||||
_reliableDeltaPending = false;
|
||||
return;
|
||||
}
|
||||
if (message.userType() == ClearSharedObjectMessage::Type ||
|
||||
|
|
|
@ -77,6 +77,7 @@ private:
|
|||
SharedObjectPointer _remoteState;
|
||||
|
||||
MetavoxelData _data;
|
||||
MetavoxelLOD _dataLOD;
|
||||
MetavoxelLOD _lod;
|
||||
|
||||
SharedObjectPointer _sphere;
|
||||
|
@ -100,6 +101,7 @@ private:
|
|||
int _reliableDeltaReceivedOffset;
|
||||
MetavoxelData _reliableDeltaData;
|
||||
MetavoxelLOD _reliableDeltaLOD;
|
||||
bool _reliableDeltaPending;
|
||||
};
|
||||
|
||||
/// A simple shared object.
|
||||
|
|
Loading…
Reference in a new issue