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)
|
void KRAmbientZone::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
|
|
||||||
bool bVisualize = ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_SIREN_AMBIENT_ZONES;
|
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)
|
void KRAudioSource::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
|
|
||||||
bool bVisualize = false;
|
bool bVisualize = false;
|
||||||
|
|||||||
@@ -75,8 +75,6 @@ AABB KRBone::getBounds()
|
|||||||
|
|
||||||
void KRBone::render(RenderInfo& ri)
|
void KRBone::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
|
|
||||||
bool bVisualize = ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_BONES;
|
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)
|
void KRCollider::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
|
|
||||||
if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_FORWARD_TRANSPARENT && ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_COLLIDERS) {
|
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)
|
void KRLight::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
|
|
||||||
ri.reflectedObjects.push_back(this);
|
ri.reflectedObjects.push_back(this);
|
||||||
|
|||||||
@@ -254,13 +254,6 @@ void KRModel::loadModel()
|
|||||||
|
|
||||||
void KRModel::render(KRNode::RenderInfo& ri)
|
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);
|
ri.reflectedObjects.push_back(this);
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
@@ -328,6 +321,7 @@ void KRModel::render(KRNode::RenderInfo& ri)
|
|||||||
|
|
||||||
void KRModel::preStream(const KRViewport& viewport)
|
void KRModel::preStream(const KRViewport& viewport)
|
||||||
{
|
{
|
||||||
|
KRNode::preStream(viewport);
|
||||||
loadModel();
|
loadModel();
|
||||||
float lod_coverage = viewport.coverage(getBounds());
|
float lod_coverage = viewport.coverage(getBounds());
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ public:
|
|||||||
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
|
virtual tinyxml2::XMLElement* saveXML(tinyxml2::XMLNode* parent);
|
||||||
|
|
||||||
virtual void render(KRNode::RenderInfo& ri) override;
|
virtual void render(KRNode::RenderInfo& ri) override;
|
||||||
|
virtual void preStream(const KRViewport& viewport) override;
|
||||||
|
|
||||||
virtual hydra::AABB getBounds();
|
virtual hydra::AABB getBounds();
|
||||||
|
|
||||||
@@ -77,7 +78,6 @@ public:
|
|||||||
virtual kraken_stream_level getStreamLevel(const KRViewport& viewport);
|
virtual kraken_stream_level getStreamLevel(const KRViewport& viewport);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void preStream(const KRViewport& viewport);
|
|
||||||
|
|
||||||
std::array<KRMeshBinding, kMeshLODCount> m_meshes;
|
std::array<KRMeshBinding, kMeshLODCount> m_meshes;
|
||||||
std::array<std::vector<KRBone*>, kMeshLODCount> m_bones; // Connects model to set of bones
|
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;
|
return new_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KRNode::preStream(const KRViewport& viewport)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void KRNode::render(RenderInfo& ri)
|
void KRNode::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
m_lastRenderFrame = getContext().getCurrentFrame();
|
m_lastRenderFrame = getContext().getCurrentFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -216,6 +216,7 @@ public:
|
|||||||
|
|
||||||
KRScene& getScene();
|
KRScene& getScene();
|
||||||
|
|
||||||
|
virtual void preStream(const KRViewport& viewport);
|
||||||
virtual void render(RenderInfo& ri);
|
virtual void render(RenderInfo& ri);
|
||||||
|
|
||||||
virtual void physicsUpdate(float deltaTime);
|
virtual void physicsUpdate(float deltaTime);
|
||||||
|
|||||||
@@ -82,9 +82,6 @@ bool KRParticleSystemNewtonian::hasPhysics()
|
|||||||
|
|
||||||
void KRParticleSystemNewtonian::render(RenderInfo& ri)
|
void KRParticleSystemNewtonian::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
ri.reflectedObjects.push_back(this);
|
ri.reflectedObjects.push_back(this);
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
|
|||||||
@@ -121,8 +121,6 @@ void KRReverbZone::setZone(const std::string& zone)
|
|||||||
|
|
||||||
void KRReverbZone::render(RenderInfo& ri)
|
void KRReverbZone::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
|
|
||||||
bool bVisualize = ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_SIREN_REVERB_ZONES;
|
bool bVisualize = ri.camera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_SIREN_REVERB_ZONES;
|
||||||
|
|||||||
@@ -112,24 +112,24 @@ AABB KRSprite::getBounds()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void KRSprite::preStream(const KRViewport& viewport)
|
||||||
|
{
|
||||||
|
KRNode::preStream(viewport);
|
||||||
|
|
||||||
|
// Pre-stream sprites, even if the alpha is zero
|
||||||
|
m_spriteTexture.load(&getContext());
|
||||||
|
|
||||||
|
if (m_spriteTexture.isLoaded()) {
|
||||||
|
m_spriteTexture.get()->resetPoolExpiry(0.0f, KRTexture::TEXTURE_USAGE_SPRITE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void KRSprite::render(RenderInfo& ri)
|
void KRSprite::render(RenderInfo& ri)
|
||||||
{
|
{
|
||||||
if (m_lod_visible >= LOD_VISIBILITY_PRESTREAM && ri.renderPass->getType() == RenderPassType::RENDER_PASS_PRESTREAM) {
|
|
||||||
// Pre-stream sprites, even if the alpha is zero
|
|
||||||
m_spriteTexture.load(&getContext());
|
|
||||||
|
|
||||||
if (m_spriteTexture.isLoaded()) {
|
|
||||||
m_spriteTexture.get()->resetPoolExpiry(0.0f, KRTexture::TEXTURE_USAGE_SPRITE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return;
|
|
||||||
|
|
||||||
ri.reflectedObjects.push_back(this);
|
ri.reflectedObjects.push_back(this);
|
||||||
|
|
||||||
KRNode::render(ri);
|
KRNode::render(ri);
|
||||||
|
|
||||||
|
|
||||||
if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES) {
|
if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES) {
|
||||||
if (m_spriteAlpha > 0.0f) {
|
if (m_spriteAlpha > 0.0f) {
|
||||||
if (m_spriteTexture.isLoaded()) {
|
if (m_spriteTexture.isLoaded()) {
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ public:
|
|||||||
void setSpriteAlpha(float alpha);
|
void setSpriteAlpha(float alpha);
|
||||||
float getSpriteAlpha() const;
|
float getSpriteAlpha() const;
|
||||||
|
|
||||||
|
virtual void preStream(const KRViewport& viewport) override;
|
||||||
virtual void render(RenderInfo& ri) override;
|
virtual void render(RenderInfo& ri) override;
|
||||||
|
|
||||||
virtual hydra::AABB getBounds() override;
|
virtual hydra::AABB getBounds() override;
|
||||||
|
|||||||
@@ -151,7 +151,15 @@ void KRScene::render(KRNode::RenderInfo& ri)
|
|||||||
// Render outer nodes
|
// Render outer nodes
|
||||||
for (std::set<KRNode*>::iterator itr = outerNodes.begin(); itr != outerNodes.end(); itr++) {
|
for (std::set<KRNode*>::iterator itr = outerNodes.begin(); itr != outerNodes.end(); itr++) {
|
||||||
KRNode* node = (*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;
|
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
|
// Render objects that are at this octree level
|
||||||
for (std::set<KRNode*>::iterator itr = pOctreeNode->getSceneNodes().begin(); itr != pOctreeNode->getSceneNodes().end(); itr++) {
|
for (std::set<KRNode*>::iterator itr = pOctreeNode->getSceneNodes().begin(); itr != pOctreeNode->getSceneNodes().end(); itr++) {
|
||||||
//assert(pOctreeNode->getBounds().contains((*itr)->getBounds())); // Sanity check
|
//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
|
// Render child octrees
|
||||||
|
|||||||
Reference in New Issue
Block a user