mirror of
https://github.com/JulianGro/overte.git
synced 2025-08-13 01:37:42 +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)
|
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.
|
/// A simple streamable edit.
|
||||||
class MetavoxelEditMessage {
|
class MetavoxelEditMessage {
|
||||||
STREAMABLE
|
STREAMABLE
|
||||||
|
|
|
@ -647,7 +647,8 @@ TestEndpoint::TestEndpoint(Mode mode) :
|
||||||
_mode(mode),
|
_mode(mode),
|
||||||
_highPriorityMessagesToSend(0.0f),
|
_highPriorityMessagesToSend(0.0f),
|
||||||
_reliableMessagesToSend(0.0f),
|
_reliableMessagesToSend(0.0f),
|
||||||
_reliableDeltaReceivedOffset(0) {
|
_reliableDeltaReceivedOffset(0),
|
||||||
|
_reliableDeltaPending(false) {
|
||||||
|
|
||||||
connect(&_sequencer, SIGNAL(receivedHighPriorityMessage(const QVariant&)),
|
connect(&_sequencer, SIGNAL(receivedHighPriorityMessage(const QVariant&)),
|
||||||
SLOT(handleHighPriorityMessage(const QVariant&)));
|
SLOT(handleHighPriorityMessage(const QVariant&)));
|
||||||
|
@ -905,7 +906,7 @@ bool TestEndpoint::simulate(int iterationNumber) {
|
||||||
if (_reliableDeltaReceivedOffset > 0) {
|
if (_reliableDeltaReceivedOffset > 0) {
|
||||||
if (_sequencer.getReliableOutputChannel()->getOffset() < _reliableDeltaReceivedOffset) {
|
if (_sequencer.getReliableOutputChannel()->getOffset() < _reliableDeltaReceivedOffset) {
|
||||||
Bitstream& out = _sequencer.startPacket();
|
Bitstream& out = _sequencer.startPacket();
|
||||||
out << QVariant();
|
out << QVariant::fromValue(MetavoxelDeltaPendingMessage());
|
||||||
_sequencer.endPacket();
|
_sequencer.endPacket();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -935,7 +936,7 @@ bool TestEndpoint::simulate(int iterationNumber) {
|
||||||
_reliableDeltaLOD = _lod;
|
_reliableDeltaLOD = _lod;
|
||||||
|
|
||||||
Bitstream& out = _sequencer.startPacket();
|
Bitstream& out = _sequencer.startPacket();
|
||||||
out << QVariant();
|
out << QVariant::fromValue(MetavoxelDeltaPendingMessage());
|
||||||
_sequencer.endPacket();
|
_sequencer.endPacket();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -1081,9 +1082,15 @@ void TestEndpoint::handleMessage(const QVariant& message, Bitstream& in) {
|
||||||
|
|
||||||
} else if (userType == MetavoxelDeltaMessage::Type) {
|
} else if (userType == MetavoxelDeltaMessage::Type) {
|
||||||
PacketRecord* receiveRecord = getLastAcknowledgedReceiveRecord();
|
PacketRecord* receiveRecord = getLastAcknowledgedReceiveRecord();
|
||||||
_data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, getLastAcknowledgedSendRecord()->getLOD());
|
_data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in,
|
||||||
|
_dataLOD = getLastAcknowledgedSendRecord()->getLOD());
|
||||||
compareMetavoxelData();
|
compareMetavoxelData();
|
||||||
|
|
||||||
|
} else if (userType == MetavoxelDeltaPendingMessage::Type) {
|
||||||
|
if (!_reliableDeltaPending) {
|
||||||
|
_reliableDeltaLOD = getLastAcknowledgedSendRecord()->getLOD();
|
||||||
|
_reliableDeltaPending = true;
|
||||||
|
}
|
||||||
} else if (userType == QMetaType::QVariantList) {
|
} else if (userType == QMetaType::QVariantList) {
|
||||||
foreach (const QVariant& element, message.toList()) {
|
foreach (const QVariant& element, message.toList()) {
|
||||||
handleMessage(element, in);
|
handleMessage(element, in);
|
||||||
|
@ -1100,8 +1107,7 @@ PacketRecord* TestEndpoint::maybeCreateSendRecord() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketRecord* TestEndpoint::maybeCreateReceiveRecord() const {
|
PacketRecord* TestEndpoint::maybeCreateReceiveRecord() const {
|
||||||
return new TestReceiveRecord(getLastAcknowledgedSendRecord()->getLOD(),
|
return new TestReceiveRecord(_dataLOD, (_mode == METAVOXEL_SERVER_MODE) ? MetavoxelData() : _data, _remoteState);
|
||||||
(_mode == METAVOXEL_SERVER_MODE) ? MetavoxelData() : _data, _remoteState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestEndpoint::handleHighPriorityMessage(const QVariant& message) {
|
void TestEndpoint::handleHighPriorityMessage(const QVariant& message) {
|
||||||
|
@ -1121,8 +1127,9 @@ void TestEndpoint::handleHighPriorityMessage(const QVariant& message) {
|
||||||
void TestEndpoint::handleReliableMessage(const QVariant& message, Bitstream& in) {
|
void TestEndpoint::handleReliableMessage(const QVariant& message, Bitstream& in) {
|
||||||
if (message.userType() == MetavoxelDeltaMessage::Type) {
|
if (message.userType() == MetavoxelDeltaMessage::Type) {
|
||||||
PacketRecord* receiveRecord = getLastAcknowledgedReceiveRecord();
|
PacketRecord* receiveRecord = getLastAcknowledgedReceiveRecord();
|
||||||
_data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, getLastAcknowledgedSendRecord()->getLOD());
|
_data.readDelta(receiveRecord->getData(), receiveRecord->getLOD(), in, _dataLOD = _reliableDeltaLOD);
|
||||||
compareMetavoxelData();
|
compareMetavoxelData();
|
||||||
|
_reliableDeltaPending = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (message.userType() == ClearSharedObjectMessage::Type ||
|
if (message.userType() == ClearSharedObjectMessage::Type ||
|
||||||
|
|
|
@ -77,6 +77,7 @@ private:
|
||||||
SharedObjectPointer _remoteState;
|
SharedObjectPointer _remoteState;
|
||||||
|
|
||||||
MetavoxelData _data;
|
MetavoxelData _data;
|
||||||
|
MetavoxelLOD _dataLOD;
|
||||||
MetavoxelLOD _lod;
|
MetavoxelLOD _lod;
|
||||||
|
|
||||||
SharedObjectPointer _sphere;
|
SharedObjectPointer _sphere;
|
||||||
|
@ -100,6 +101,7 @@ private:
|
||||||
int _reliableDeltaReceivedOffset;
|
int _reliableDeltaReceivedOffset;
|
||||||
MetavoxelData _reliableDeltaData;
|
MetavoxelData _reliableDeltaData;
|
||||||
MetavoxelLOD _reliableDeltaLOD;
|
MetavoxelLOD _reliableDeltaLOD;
|
||||||
|
bool _reliableDeltaPending;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A simple shared object.
|
/// A simple shared object.
|
||||||
|
|
Loading…
Reference in a new issue