mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 19:59:28 +02:00
make temporary buffer bound to each sending thread object
This commit is contained in:
parent
0c03fdd366
commit
f7fa172ab7
2 changed files with 8 additions and 7 deletions
|
@ -196,7 +196,6 @@ void VoxelSendThread::deepestLevelVoxelDistributor(Node* node, VoxelNodeData* no
|
||||||
|
|
||||||
// If we have something in our nodeBag, then turn them into packets and send them out...
|
// If we have something in our nodeBag, then turn them into packets and send them out...
|
||||||
if (!nodeData->nodeBag.isEmpty()) {
|
if (!nodeData->nodeBag.isEmpty()) {
|
||||||
static unsigned char tempOutputBuffer[MAX_VOXEL_PACKET_SIZE - 1]; // save on allocs by making this static
|
|
||||||
int bytesWritten = 0;
|
int bytesWritten = 0;
|
||||||
int packetsSentThisInterval = 0;
|
int packetsSentThisInterval = 0;
|
||||||
uint64_t start = usecTimestampNow();
|
uint64_t start = usecTimestampNow();
|
||||||
|
@ -235,17 +234,17 @@ void VoxelSendThread::deepestLevelVoxelDistributor(Node* node, VoxelNodeData* no
|
||||||
isFullScene, &nodeData->stats, ::jurisdiction);
|
isFullScene, &nodeData->stats, ::jurisdiction);
|
||||||
|
|
||||||
nodeData->stats.encodeStarted();
|
nodeData->stats.encodeStarted();
|
||||||
bytesWritten = serverTree.encodeTreeBitstream(subTree, &tempOutputBuffer[0], MAX_VOXEL_PACKET_SIZE - 1,
|
bytesWritten = serverTree.encodeTreeBitstream(subTree, _tempOutputBuffer, MAX_VOXEL_PACKET_SIZE - 1,
|
||||||
nodeData->nodeBag, params);
|
nodeData->nodeBag, params);
|
||||||
nodeData->stats.encodeStopped();
|
nodeData->stats.encodeStopped();
|
||||||
|
|
||||||
if (nodeData->getAvailable() >= bytesWritten) {
|
if (nodeData->getAvailable() >= bytesWritten) {
|
||||||
nodeData->writeToPacket(&tempOutputBuffer[0], bytesWritten);
|
nodeData->writeToPacket(_tempOutputBuffer, bytesWritten);
|
||||||
} else {
|
} else {
|
||||||
handlePacketSend(node, nodeData, trueBytesSent, truePacketsSent);
|
handlePacketSend(node, nodeData, trueBytesSent, truePacketsSent);
|
||||||
packetsSentThisInterval++;
|
packetsSentThisInterval++;
|
||||||
nodeData->resetVoxelPacket();
|
nodeData->resetVoxelPacket();
|
||||||
nodeData->writeToPacket(&tempOutputBuffer[0], bytesWritten);
|
nodeData->writeToPacket(_tempOutputBuffer, bytesWritten);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (nodeData->isPacketWaiting()) {
|
if (nodeData->isPacketWaiting()) {
|
||||||
|
@ -257,15 +256,15 @@ void VoxelSendThread::deepestLevelVoxelDistributor(Node* node, VoxelNodeData* no
|
||||||
}
|
}
|
||||||
// send the environment packet
|
// send the environment packet
|
||||||
if (shouldSendEnvironments) {
|
if (shouldSendEnvironments) {
|
||||||
int numBytesPacketHeader = populateTypeAndVersion(tempOutputBuffer, PACKET_TYPE_ENVIRONMENT_DATA);
|
int numBytesPacketHeader = populateTypeAndVersion(_tempOutputBuffer, PACKET_TYPE_ENVIRONMENT_DATA);
|
||||||
int envPacketLength = numBytesPacketHeader;
|
int envPacketLength = numBytesPacketHeader;
|
||||||
int environmentsToSend = ::sendMinimalEnvironment ? 1 : sizeof(environmentData) / sizeof(EnvironmentData);
|
int environmentsToSend = ::sendMinimalEnvironment ? 1 : sizeof(environmentData) / sizeof(EnvironmentData);
|
||||||
|
|
||||||
for (int i = 0; i < environmentsToSend; i++) {
|
for (int i = 0; i < environmentsToSend; i++) {
|
||||||
envPacketLength += environmentData[i].getBroadcastData(tempOutputBuffer + envPacketLength);
|
envPacketLength += environmentData[i].getBroadcastData(_tempOutputBuffer + envPacketLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeList::getInstance()->getNodeSocket()->send(node->getActiveSocket(), tempOutputBuffer, envPacketLength);
|
NodeList::getInstance()->getNodeSocket()->send(node->getActiveSocket(), _tempOutputBuffer, envPacketLength);
|
||||||
trueBytesSent += envPacketLength;
|
trueBytesSent += envPacketLength;
|
||||||
truePacketsSent++;
|
truePacketsSent++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,8 @@ private:
|
||||||
|
|
||||||
void handlePacketSend(Node* node, VoxelNodeData* nodeData, int& trueBytesSent, int& truePacketsSent);
|
void handlePacketSend(Node* node, VoxelNodeData* nodeData, int& trueBytesSent, int& truePacketsSent);
|
||||||
void deepestLevelVoxelDistributor(Node* node, VoxelNodeData* nodeData, bool viewFrustumChanged);
|
void deepestLevelVoxelDistributor(Node* node, VoxelNodeData* nodeData, bool viewFrustumChanged);
|
||||||
|
|
||||||
|
unsigned char _tempOutputBuffer[MAX_VOXEL_PACKET_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __voxel_server__VoxelSendThread__
|
#endif // __voxel_server__VoxelSendThread__
|
||||||
|
|
Loading…
Reference in a new issue