History

Merging upstream

matsukaze committed 12 years ago

Commit 259b2852 parents bbf4f88 8797c35243 files · +6973 −4353Browse files

Showing the changes to interface/src/VoxelSystem.cpp (1 of 243 files). Show all

Unified · Split

interface/src/VoxelSystem.cpp+27−26
@@ -16,7 +16,6 @@ · 15 unmodified lines
16#include <PerfStat.h>16#include <PerfStat.h>
17#include <SharedUtil.h>17#include <SharedUtil.h>
18#include <NodeList.h>18#include <NodeList.h>
19#include <NodeTypes.h>
20 19
21#include "Application.h"20#include "Application.h"
22#include "CoverageMap.h"21#include "CoverageMap.h"
@@ -581,17 +580,17 @@ bool VoxelSystem::readFromSchematicFile(const char* filename) { · 558 unmodified lines
581 return result;580 return result;
582}581}
583 582
584int VoxelSystem::parseData(unsigned char* sourceBuffer, int numBytes) {583int VoxelSystem::parseData(const QByteArray& packet) {
585 bool showTimingDetails = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);584 bool showTimingDetails = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings);
586 PerformanceWarning warn(showTimingDetails, "VoxelSystem::parseData()",showTimingDetails);585 PerformanceWarning warn(showTimingDetails, "VoxelSystem::parseData()",showTimingDetails);
587 586
588 unsigned char command = *sourceBuffer;587 PacketType command = packetTypeForPacket(packet);
589 int numBytesPacketHeader = numBytesForPacketHeader(sourceBuffer);588 int numBytesPacketHeader = numBytesForPacketHeader(packet);
590 switch(command) {589 switch(command) {
591 case PACKET_TYPE_VOXEL_DATA: {590 case PacketTypeVoxelData: {
592 PerformanceWarning warn(showTimingDetails, "VoxelSystem::parseData() PACKET_TYPE_VOXEL_DATA part...",showTimingDetails);591 PerformanceWarning warn(showTimingDetails, "VoxelSystem::parseData() PacketType_VOXEL_DATA part...",showTimingDetails);
593 592
594 unsigned char* dataAt = sourceBuffer + numBytesPacketHeader;593 const unsigned char* dataAt = reinterpret_cast<const unsigned char*>(packet.data()) + numBytesPacketHeader;
595 594
596 VOXEL_PACKET_FLAGS flags = (*(VOXEL_PACKET_FLAGS*)(dataAt));595 VOXEL_PACKET_FLAGS flags = (*(VOXEL_PACKET_FLAGS*)(dataAt));
597 dataAt += sizeof(VOXEL_PACKET_FLAGS);596 dataAt += sizeof(VOXEL_PACKET_FLAGS);
@@ -608,7 +607,7 @@ int VoxelSystem::parseData(unsigned char* sourceBuffer, int numBytes) { · 10 unmodified lines
608 int flightTime = arrivedAt - sentAt;607 int flightTime = arrivedAt - sentAt;
609 608
610 VOXEL_PACKET_INTERNAL_SECTION_SIZE sectionLength = 0;609 VOXEL_PACKET_INTERNAL_SECTION_SIZE sectionLength = 0;
611 int dataBytes = numBytes - VOXEL_PACKET_HEADER_SIZE;610 int dataBytes = packet.size() - VOXEL_PACKET_HEADER_SIZE;
612 611
613 int subsection = 1;612 int subsection = 1;
614 while (dataBytes > 0) {613 while (dataBytes > 0) {
@@ -636,7 +635,8 @@ int VoxelSystem::parseData(unsigned char* sourceBuffer, int numBytes) { · 21 unmodified lines
636 " color:%s compressed:%s sequence: %u flight:%d usec size:%d data:%d"635 " color:%s compressed:%s sequence: %u flight:%d usec size:%d data:%d"
637 " subsection:%d sectionLength:%d uncompressed:%d",636 " subsection:%d sectionLength:%d uncompressed:%d",
638 debug::valueOf(packetIsColored), debug::valueOf(packetIsCompressed),637 debug::valueOf(packetIsColored), debug::valueOf(packetIsCompressed),
639 sequence, flightTime, numBytes, dataBytes, subsection, sectionLength, packetData.getUncompressedSize());638 sequence, flightTime, packet.size(), dataBytes, subsection, sectionLength,
639 packetData.getUncompressedSize());
640 }640 }
641 _tree->readBitstreamToTree(packetData.getUncompressedData(), packetData.getUncompressedSize(), args);641 _tree->readBitstreamToTree(packetData.getUncompressedData(), packetData.getUncompressedSize(), args);
642 unlockTree();642 unlockTree();
@@ -647,7 +647,8 @@ int VoxelSystem::parseData(unsigned char* sourceBuffer, int numBytes) { · 4 unmodified lines
647 }647 }
648 subsection++;648 subsection++;
649 }649 }
650 break;650 default:
651 break;
651 }652 }
652 if (!_useFastVoxelPipeline || _writeRenderFullVBO) {653 if (!_useFastVoxelPipeline || _writeRenderFullVBO) {
653 setupNewVoxelsForDrawing();654 setupNewVoxelsForDrawing();
@@ -655,9 +656,9 @@ int VoxelSystem::parseData(unsigned char* sourceBuffer, int numBytes) { · 1 unmodified line
655 setupNewVoxelsForDrawingSingleNode(DONT_BAIL_EARLY);656 setupNewVoxelsForDrawingSingleNode(DONT_BAIL_EARLY);
656 }657 }
657 658
658 Application::getInstance()->getBandwidthMeter()->inputStream(BandwidthMeter::VOXELS).updateValue(numBytes);659 Application::getInstance()->getBandwidthMeter()->inputStream(BandwidthMeter::VOXELS).updateValue(packet.size());
659 660
660 return numBytes;661 return packet.size();
661}662}
662 663
663void VoxelSystem::setupNewVoxelsForDrawing() {664void VoxelSystem::setupNewVoxelsForDrawing() {
@@ -668,8 +669,8 @@ void VoxelSystem::setupNewVoxelsForDrawing() { · 4 unmodified lines
668 return; // bail early if we're not initialized669 return; // bail early if we're not initialized
669 }670 }
670 671
671 uint64_t start = usecTimestampNow();672 quint64 start = usecTimestampNow();
672 uint64_t sinceLastTime = (start - _setupNewVoxelsForDrawingLastFinished) / 1000;673 quint64 sinceLastTime = (start - _setupNewVoxelsForDrawingLastFinished) / 1000;
673 674
674 bool iAmDebugging = false; // if you're debugging set this to true, so you won't get skipped for slow debugging675 bool iAmDebugging = false; // if you're debugging set this to true, so you won't get skipped for slow debugging
675 if (!iAmDebugging && sinceLastTime <= std::max((float) _setupNewVoxelsForDrawingLastElapsed, SIXTY_FPS_IN_MILLISECONDS)) {676 if (!iAmDebugging && sinceLastTime <= std::max((float) _setupNewVoxelsForDrawingLastElapsed, SIXTY_FPS_IN_MILLISECONDS)) {
@@ -729,7 +730,7 @@ void VoxelSystem::setupNewVoxelsForDrawing() { · 53 unmodified lines
729 _bufferWriteLock.unlock();730 _bufferWriteLock.unlock();
730 }731 }
731 732
732 uint64_t end = usecTimestampNow();733 quint64 end = usecTimestampNow();
733 int elapsedmsec = (end - start) / 1000;734 int elapsedmsec = (end - start) / 1000;
734 _setupNewVoxelsForDrawingLastFinished = end;735 _setupNewVoxelsForDrawingLastFinished = end;
735 _setupNewVoxelsForDrawingLastElapsed = elapsedmsec;736 _setupNewVoxelsForDrawingLastElapsed = elapsedmsec;
@@ -746,8 +747,8 @@ void VoxelSystem::setupNewVoxelsForDrawingSingleNode(bool allowBailEarly) { · 10 unmodified lines
746 PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings),747 PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings),
747 "setupNewVoxelsForDrawingSingleNode() xxxxx");748 "setupNewVoxelsForDrawingSingleNode() xxxxx");
748 749
749 uint64_t start = usecTimestampNow();750 quint64 start = usecTimestampNow();
750 uint64_t sinceLastTime = (start - _setupNewVoxelsForDrawingLastFinished) / 1000;751 quint64 sinceLastTime = (start - _setupNewVoxelsForDrawingLastFinished) / 1000;
751 752
752 bool iAmDebugging = false; // if you're debugging set this to true, so you won't get skipped for slow debugging753 bool iAmDebugging = false; // if you're debugging set this to true, so you won't get skipped for slow debugging
753 if (allowBailEarly && !iAmDebugging &&754 if (allowBailEarly && !iAmDebugging &&
@@ -777,7 +778,7 @@ void VoxelSystem::setupNewVoxelsForDrawingSingleNode(bool allowBailEarly) { · 23 unmodified lines
777 778
778 _bufferWriteLock.unlock();779 _bufferWriteLock.unlock();
779 }780 }
780 uint64_t end = usecTimestampNow();781 quint64 end = usecTimestampNow();
781 int elapsedmsec = (end - start) / 1000;782 int elapsedmsec = (end - start) / 1000;
782 _setupNewVoxelsForDrawingLastFinished = end;783 _setupNewVoxelsForDrawingLastFinished = end;
783 _setupNewVoxelsForDrawingLastElapsed = elapsedmsec;784 _setupNewVoxelsForDrawingLastElapsed = elapsedmsec;
@@ -786,14 +787,14 @@ void VoxelSystem::setupNewVoxelsForDrawingSingleNode(bool allowBailEarly) { · 2 unmodified lines
786void VoxelSystem::checkForCulling() {787void VoxelSystem::checkForCulling() {
787 788
788 PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "checkForCulling()");789 PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "checkForCulling()");
789 uint64_t start = usecTimestampNow();790 quint64 start = usecTimestampNow();
790 791
791 // track how long its been since we were last moving. If we have recently moved then only use delta frustums, if792 // track how long its been since we were last moving. If we have recently moved then only use delta frustums, if
792 // it's been a long time since we last moved, then go ahead and do a full frustum cull.793 // it's been a long time since we last moved, then go ahead and do a full frustum cull.
793 if (isViewChanging()) {794 if (isViewChanging()) {
794 _lastViewIsChanging = start;795 _lastViewIsChanging = start;
795 }796 }
796 uint64_t sinceLastMoving = (start - _lastViewIsChanging) / 1000;797 quint64 sinceLastMoving = (start - _lastViewIsChanging) / 1000;
797 bool enoughTime = (sinceLastMoving >= std::max((float) _lastViewCullingElapsed, VIEW_CULLING_RATE_IN_MILLISECONDS));798 bool enoughTime = (sinceLastMoving >= std::max((float) _lastViewCullingElapsed, VIEW_CULLING_RATE_IN_MILLISECONDS));
798 799
799 // These has changed events will occur before we stop. So we need to remember this for when we finally have stopped800 // These has changed events will occur before we stop. So we need to remember this for when we finally have stopped
@@ -815,7 +816,7 @@ void VoxelSystem::checkForCulling() { · 15 unmodified lines
815 hideOutOfView(forceFullFrustum);816 hideOutOfView(forceFullFrustum);
816 817
817 if (forceFullFrustum) {818 if (forceFullFrustum) {
818 uint64_t endViewCulling = usecTimestampNow();819 quint64 endViewCulling = usecTimestampNow();
819 _lastViewCullingElapsed = (endViewCulling - start) / 1000;820 _lastViewCullingElapsed = (endViewCulling - start) / 1000;
820 }821 }
821 822
@@ -824,7 +825,7 @@ void VoxelSystem::checkForCulling() { · 2 unmodified lines
824 // VBO reubuilding. Possibly we should do this only if our actual VBO usage crosses some lower boundary.825 // VBO reubuilding. Possibly we should do this only if our actual VBO usage crosses some lower boundary.
825 cleanupRemovedVoxels();826 cleanupRemovedVoxels();
826 827
827 uint64_t sinceLastAudit = (start - _lastAudit) / 1000;828 quint64 sinceLastAudit = (start - _lastAudit) / 1000;
828 829
829 if (Menu::getInstance()->isOptionChecked(MenuOption::AutomaticallyAuditTree)) {830 if (Menu::getInstance()->isOptionChecked(MenuOption::AutomaticallyAuditTree)) {
830 if (sinceLastAudit >= std::max((float) _lastViewCullingElapsed, VIEW_CULLING_RATE_IN_MILLISECONDS)) {831 if (sinceLastAudit >= std::max((float) _lastViewCullingElapsed, VIEW_CULLING_RATE_IN_MILLISECONDS)) {
@@ -1895,7 +1896,7 @@ void VoxelSystem::falseColorizeBySource() { · 1064 unmodified lines
1895 // create a bunch of colors we'll use during colorization1896 // create a bunch of colors we'll use during colorization
1896 1897
1897 foreach (const SharedNodePointer& node, NodeList::getInstance()->getNodeHash()) {1898 foreach (const SharedNodePointer& node, NodeList::getInstance()->getNodeHash()) {
1898 if (node->getType() == NODE_TYPE_VOXEL_SERVER) {1899 if (node->getType() == NodeType::VoxelServer) {
1899 uint16_t nodeID = VoxelTreeElement::getSourceNodeUUIDKey(node->getUUID());1900 uint16_t nodeID = VoxelTreeElement::getSourceNodeUUIDKey(node->getUUID());
1900 int groupColor = voxelServerCount % NUMBER_OF_COLOR_GROUPS;1901 int groupColor = voxelServerCount % NUMBER_OF_COLOR_GROUPS;
1901 args.colors[nodeID] = groupColors[groupColor];1902 args.colors[nodeID] = groupColors[groupColor];
@@ -2995,7 +2996,7 @@ void VoxelSystem::falseColorizeOccludedV2() { · 1093 unmodified lines
2995}2996}
2996 2997
2997void VoxelSystem::nodeAdded(SharedNodePointer node) {2998void VoxelSystem::nodeAdded(SharedNodePointer node) {
2998 if (node->getType() == NODE_TYPE_VOXEL_SERVER) {2999 if (node->getType() == NodeType::VoxelServer) {
2999 qDebug("VoxelSystem... voxel server %s added...", node->getUUID().toString().toLocal8Bit().constData());3000 qDebug("VoxelSystem... voxel server %s added...", node->getUUID().toString().toLocal8Bit().constData());
3000 _voxelServerCount++;3001 _voxelServerCount++;
3001 }3002 }
@@ -3016,7 +3017,7 @@ bool VoxelSystem::killSourceVoxelsOperation(OctreeElement* element, void* extraD · 14 unmodified lines
3016}3017}
3017 3018
3018void VoxelSystem::nodeKilled(SharedNodePointer node) {3019void VoxelSystem::nodeKilled(SharedNodePointer node) {
3019 if (node->getType() == NODE_TYPE_VOXEL_SERVER) {3020 if (node->getType() == NodeType::VoxelServer) {
3020 _voxelServerCount--;3021 _voxelServerCount--;
3021 QUuid nodeUUID = node->getUUID();3022 QUuid nodeUUID = node->getUUID();
3022 qDebug("VoxelSystem... voxel server %s removed...", nodeUUID.toString().toLocal8Bit().constData());3023 qDebug("VoxelSystem... voxel server %s removed...", nodeUUID.toString().toLocal8Bit().constData());