mirror of
https://github.com/overte-org/overte.git
synced 2025-08-05 06:49:41 +02:00
first cut at delata view frustum encoding
This commit is contained in:
parent
2ff8da2b46
commit
294367a417
1 changed files with 11 additions and 9 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue