Move pre-streaming logic from KRNode and descendants to KRScene, simplifying KRNode render methods
This commit is contained in:
@@ -123,8 +123,6 @@ void KRAmbientZone::setZone(const std::string& zone)
|
||||
|
||||
void KRAmbientZone::render(RenderInfo& ri)
|
||||
{
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
KRNode::render(ri);
|
||||
|
||||
bool bVisualize = ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_SIREN_AMBIENT_ZONES;
|
||||
|
||||
@@ -192,9 +192,6 @@ void KRAudioSource::queueBuffer()
|
||||
|
||||
void KRAudioSource::render(RenderInfo& ri)
|
||||
{
|
||||
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
KRNode::render(ri);
|
||||
|
||||
bool bVisualize = false;
|
||||
|
||||
@@ -75,8 +75,6 @@ AABB KRBone::getBounds()
|
||||
|
||||
void KRBone::render(RenderInfo& ri)
|
||||
{
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
KRNode::render(ri);
|
||||
|
||||
bool bVisualize = ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_BONES;
|
||||
|
||||
@@ -210,8 +210,6 @@ void KRCollider::setAudioOcclusion(float audio_occlusion)
|
||||
|
||||
void KRCollider::render(RenderInfo& ri)
|
||||
{
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
KRNode::render(ri);
|
||||
|
||||
if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_FORWARD_TRANSPARENT && ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_COLLIDERS) {
|
||||
|
||||
@@ -223,9 +223,6 @@ float KRLight::getDecayStart() const
|
||||
|
||||
void KRLight::render(RenderInfo& ri)
|
||||
{
|
||||
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
KRNode::render(ri);
|
||||
|
||||
ri.reflectedObjects.push_back(this);
|
||||
|
||||
@@ -254,13 +254,6 @@ void KRModel::loadModel()
|
||||
|
||||
void KRModel::render(KRNode::RenderInfo& ri)
|
||||
{
|
||||
if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_PRESTREAM) {
|
||||
if (m_lod_visible >= LOD_VISIBILITY_PRESTREAM) {
|
||||
preStream(*ri.viewport);
|
||||
}
|
||||
}
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
ri.reflectedObjects.push_back(this);
|
||||
|
||||
KRNode::render(ri);
|
||||
@@ -328,6 +321,7 @@ void KRModel::render(KRNode::RenderInfo& ri)
|
||||
|
||||
void KRModel::preStream(const KRViewport& viewport)
|
||||
{
|
||||
KRNode::preStream(viewport);
|
||||
loadModel();
|
||||
float lod_coverage = viewport.coverage(getBounds());
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ public:
|
||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
|
||||
|
||||
virtual void render(KRNode::RenderInfo& ri) override;
|
||||
virtual void preStream(const KRViewport& viewport) override;
|
||||
|
||||
virtual hydra::AABB getBounds();
|
||||
|
||||
@@ -77,7 +78,6 @@ public:
|
||||
virtual kraken_stream_level getStreamLevel(const KRViewport& viewport);
|
||||
|
||||
private:
|
||||
void preStream(const KRViewport& viewport);
|
||||
|
||||
std::array<KRMeshBinding, kMeshLODCount> m_meshes;
|
||||
std::array<std::vector<KRBone*>, kMeshLODCount> m_bones; // Connects model to set of bones
|
||||
|
||||
@@ -684,10 +684,13 @@ KRNode* KRNode::LoadXML(KRScene& scene, tinyxml2::XMLElement* e)
|
||||
return new_node;
|
||||
}
|
||||
|
||||
void KRNode::preStream(const KRViewport& viewport)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void KRNode::render(RenderInfo& ri)
|
||||
{
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
m_lastRenderFrame = getContext().getCurrentFrame();
|
||||
}
|
||||
|
||||
|
||||
@@ -216,6 +216,7 @@ public:
|
||||
|
||||
KRScene& getScene();
|
||||
|
||||
virtual void preStream(const KRViewport& viewport);
|
||||
virtual void render(RenderInfo& ri);
|
||||
|
||||
virtual void physicsUpdate(float deltaTime);
|
||||
|
||||
@@ -82,9 +82,6 @@ bool KRParticleSystemNewtonian::hasPhysics()
|
||||
|
||||
void KRParticleSystemNewtonian::render(RenderInfo& ri)
|
||||
{
|
||||
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
ri.reflectedObjects.push_back(this);
|
||||
|
||||
KRNode::render(ri);
|
||||
|
||||
@@ -121,8 +121,6 @@ void KRReverbZone::setZone(const std::string& zone)
|
||||
|
||||
void KRReverbZone::render(RenderInfo& ri)
|
||||
{
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
KRNode::render(ri);
|
||||
|
||||
bool bVisualize = ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_SIREN_REVERB_ZONES;
|
||||
|
||||
@@ -112,9 +112,10 @@ AABB KRSprite::getBounds()
|
||||
}
|
||||
|
||||
|
||||
void KRSprite::render(RenderInfo& ri)
|
||||
void KRSprite::preStream(const KRViewport& viewport)
|
||||
{
|
||||
if (m_lod_visible >= LOD_VISIBILITY_PRESTREAM && ri.renderPass->getType() == RenderPassType::RENDER_PASS_PRESTREAM) {
|
||||
KRNode::preStream(viewport);
|
||||
|
||||
// Pre-stream sprites, even if the alpha is zero
|
||||
m_spriteTexture.load(&getContext());
|
||||
|
||||
@@ -123,13 +124,12 @@ void KRSprite::render(RenderInfo& ri)
|
||||
}
|
||||
}
|
||||
|
||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
||||
|
||||
void KRSprite::render(RenderInfo& ri)
|
||||
{
|
||||
ri.reflectedObjects.push_back(this);
|
||||
|
||||
KRNode::render(ri);
|
||||
|
||||
|
||||
if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES) {
|
||||
if (m_spriteAlpha > 0.0f) {
|
||||
if (m_spriteTexture.isLoaded()) {
|
||||
|
||||
@@ -52,6 +52,7 @@ public:
|
||||
void setSpriteAlpha(float alpha);
|
||||
float getSpriteAlpha() const;
|
||||
|
||||
virtual void preStream(const KRViewport& viewport) override;
|
||||
virtual void render(RenderInfo& ri) override;
|
||||
|
||||
virtual hydra::AABB getBounds() override;
|
||||
|
||||
@@ -151,8 +151,16 @@ void KRScene::render(KRNode::RenderInfo& ri)
|
||||
// Render outer nodes
|
||||
for (std::set<KRNode*>::iterator itr = outerNodes.begin(); itr != outerNodes.end(); itr++) {
|
||||
KRNode* node = (*itr);
|
||||
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;
|
||||
std::vector<KROctreeNode*> remainingOctreesTestResults;
|
||||
@@ -346,8 +354,17 @@ 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
|
||||
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
|
||||
const int* childOctreeOrder = ri.renderPass->getType() == RenderPassType::RENDER_PASS_FORWARD_TRANSPARENT || ri.renderPass->getType() == RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES || ri.renderPass->getType() == RenderPassType::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE ? ri.viewport->getBackToFrontOrder() : ri.viewport->getFrontToBackOrder();
|
||||
|
||||
Reference in New Issue
Block a user