diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 42895db69b..70efa48356 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2883,19 +2883,35 @@ void Application::displayStats() { drawtext(10, statsVerticalOffset + 15, 0.10f, 0, 1.0, 0, stats); if (_testPing->isChecked()) { - int pingAudio = 0, pingAvatar = 0, pingVoxel = 0; + int pingAudio = 0, pingAvatar = 0, pingVoxel = 0, pingVoxelMax = 0; - NodeList *nodeList = NodeList::getInstance(); - Node *audioMixerNode = nodeList->soloNodeOfType(NODE_TYPE_AUDIO_MIXER); - Node *avatarMixerNode = nodeList->soloNodeOfType(NODE_TYPE_AVATAR_MIXER); - Node *voxelServerNode = nodeList->soloNodeOfType(NODE_TYPE_VOXEL_SERVER); + NodeList* nodeList = NodeList::getInstance(); + Node* audioMixerNode = nodeList->soloNodeOfType(NODE_TYPE_AUDIO_MIXER); + Node* avatarMixerNode = nodeList->soloNodeOfType(NODE_TYPE_AVATAR_MIXER); pingAudio = audioMixerNode ? audioMixerNode->getPingMs() : 0; pingAvatar = avatarMixerNode ? avatarMixerNode->getPingMs() : 0; - pingVoxel = voxelServerNode ? voxelServerNode->getPingMs() : 0; + + + // Now handle voxel servers, since there could be more than one, we average their ping times + unsigned long totalPingVoxel = 0; + int voxelServerCount = 0; + for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { + if (node->getType() == NODE_TYPE_VOXEL_SERVER) { + totalPingVoxel += node->getPingMs(); + voxelServerCount++; + if (pingVoxelMax < node->getPingMs()) { + pingVoxelMax = node->getPingMs(); + } + } + } + if (voxelServerCount) { + pingVoxel = totalPingVoxel/voxelServerCount; + } + char pingStats[200]; - sprintf(pingStats, "Ping audio/avatar/voxel: %d / %d / %d ", pingAudio, pingAvatar, pingVoxel); + sprintf(pingStats, "Ping audio/avatar/voxel: %d / %d / %d avg %d max ", pingAudio, pingAvatar, pingVoxel, pingVoxelMax); drawtext(10, statsVerticalOffset + 35, 0.10f, 0, 1.0, 0, pingStats); } @@ -3495,7 +3511,6 @@ void* Application::networkReceive(void* args) { } // fall through to piggyback message if (app->_renderVoxels->isChecked()) { - //Node* voxelServer = NodeList::getInstance()->soloNodeOfType(NODE_TYPE_VOXEL_SERVER); Node* voxelServer = NodeList::getInstance()->nodeWithAddress(&senderAddress); if (voxelServer && socketMatch(voxelServer->getActiveSocket(), &senderAddress)) { voxelServer->lock(); diff --git a/libraries/voxels/src/VoxelTree.cpp b/libraries/voxels/src/VoxelTree.cpp index 7b8dd67dc2..6fa843fdfe 100644 --- a/libraries/voxels/src/VoxelTree.cpp +++ b/libraries/voxels/src/VoxelTree.cpp @@ -310,7 +310,7 @@ int VoxelTree::readNodeData(VoxelNode* destinationNode, unsigned char* nodeData, // question is responsible for. Maybe we can handle this in the server and not "remove" bits for // portions of the server that the server is not responsible for.... or maybe we need to let the client // manage this concept. - const bool singleVoxelServer = true; + const bool singleVoxelServer = false; if (singleVoxelServer && includeExistsBits) { for (int i = 0; i < NUMBER_OF_CHILDREN; i++) { // now also check the childrenInTreeMask, if the mask is missing the bit, then it means we need to delete this child