Move pre-streaming logic from KRNode and descendants to KRScene, simplifying KRNode render methods

This commit is contained in:
2025-11-13 22:01:24 -08:00
parent 614ce0a151
commit e029e0b3fc
14 changed files with 40 additions and 41 deletions

View File

@@ -151,7 +151,15 @@ void KRScene::render(KRNode::RenderInfo& ri)
// Render outer nodes
for (std::set<KRNode*>::iterator itr = outerNodes.begin(); itr != outerNodes.end(); itr++) {
KRNode* node = (*itr);
node->render(ri);
if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_PRESTREAM) {
if ((*itr)->getLODVisibility() >= KRNode::LOD_VISIBILITY_PRESTREAM) {
node->preStream(*ri.viewport);
}
} else {
if ((*itr)->getLODVisibility() > KRNode::LOD_VISIBILITY_PRESTREAM) {
node->render(ri);
}
}
}
std::vector<KROctreeNode*> remainingOctrees;
@@ -346,7 +354,16 @@ void KRScene::render(KRNode::RenderInfo& ri, KROctreeNode* pOctreeNode, std::vec
// Render objects that are at this octree level
for (std::set<KRNode*>::iterator itr = pOctreeNode->getSceneNodes().begin(); itr != pOctreeNode->getSceneNodes().end(); itr++) {
//assert(pOctreeNode->getBounds().contains((*itr)->getBounds())); // Sanity check
(*itr)->render(ri);
if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_PRESTREAM) {
if ((*itr)->getLODVisibility() >= KRNode::LOD_VISIBILITY_PRESTREAM) {
(*itr)->preStream(*ri.viewport);
}
} else {
if ((*itr)->getLODVisibility() > KRNode::LOD_VISIBILITY_PRESTREAM)
{
(*itr)->render(ri);
}
}
}
// Render child octrees