first cut at delata view frustum encoding

This commit is contained in:
ZappoMan 2013-05-14 09:04:35 -07:00
parent 2ff8da2b46
commit 294367a417

View file

@ -107,8 +107,8 @@ void eraseVoxelTreeAndCleanupAgentVisitData() {
// Version of voxel distributor that sends each LOD level at a time // Version of voxel distributor that sends each LOD level at a time
void resInVoxelDistributor(AgentList* agentList, void resInVoxelDistributor(AgentList* agentList,
AgentList::iterator& agent, AgentList::iterator& agent,
VoxelAgentData* agentData, VoxelAgentData* agentData) {
ViewFrustum& viewFrustum) { ViewFrustum viewFrustum = agentData->getCurrentViewFrustum();
bool searchReset = false; bool searchReset = false;
int searchLoops = 0; int searchLoops = 0;
int searchLevelWas = agentData->getMaxSearchLevel(); int searchLevelWas = agentData->getMaxSearchLevel();
@ -224,12 +224,13 @@ void resInVoxelDistributor(AgentList* agentList,
// Version of voxel distributor that sends the deepest LOD level at once // Version of voxel distributor that sends the deepest LOD level at once
void deepestLevelVoxelDistributor(AgentList* agentList, void deepestLevelVoxelDistributor(AgentList* agentList,
AgentList::iterator& agent, AgentList::iterator& agent,
VoxelAgentData* agentData, VoxelAgentData* agentData) {
ViewFrustum& viewFrustum) {
int maxLevelReached = 0; int maxLevelReached = 0;
double start = usecTimestampNow(); double start = usecTimestampNow();
if (agentData->nodeBag.isEmpty()) { if (agentData->nodeBag.isEmpty()) {
maxLevelReached = randomTree.searchForColoredNodes(INT_MAX, randomTree.rootNode, viewFrustum, agentData->nodeBag); maxLevelReached = randomTree.searchForColoredNodes(INT_MAX, randomTree.rootNode, agentData->getCurrentViewFrustum(),
agentData->nodeBag, true, &agentData->getLastKnownViewFrustum());
} }
double end = usecTimestampNow(); double end = usecTimestampNow();
double elapsedmsec = (end - start)/1000.0; double elapsedmsec = (end - start)/1000.0;
@ -261,8 +262,9 @@ void deepestLevelVoxelDistributor(AgentList* agentList,
VoxelNode* subTree = agentData->nodeBag.extract(); VoxelNode* subTree = agentData->nodeBag.extract();
bytesWritten = randomTree.encodeTreeBitstream(INT_MAX, subTree, bytesWritten = randomTree.encodeTreeBitstream(INT_MAX, subTree,
&tempOutputBuffer[0], MAX_VOXEL_PACKET_SIZE - 1, &tempOutputBuffer[0], MAX_VOXEL_PACKET_SIZE - 1,
agentData->nodeBag, &viewFrustum, agentData->nodeBag, &agentData->getCurrentViewFrustum(),
agentData->getWantColor()); agentData->getWantColor(), true,
&agentData->getLastKnownViewFrustum());
if (agentData->getAvailable() >= bytesWritten) { if (agentData->getAvailable() >= bytesWritten) {
agentData->writeToPacket(&tempOutputBuffer[0], bytesWritten); agentData->writeToPacket(&tempOutputBuffer[0], bytesWritten);
@ -338,9 +340,9 @@ void *distributeVoxelsToListeners(void *args) {
agentData->updateViewFrustum(); agentData->updateViewFrustum();
if (agentData->getWantResIn()) { if (agentData->getWantResIn()) {
resInVoxelDistributor(agentList, agent, agentData, agentData->currentViewFrustum); resInVoxelDistributor(agentList, agent, agentData);
} else { } else {
deepestLevelVoxelDistributor(agentList, agent, agentData, agentData->currentViewFrustum); deepestLevelVoxelDistributor(agentList, agent, agentData);
} }
} }
} }