diff --git a/kraken/nodes/KRLight.cpp b/kraken/nodes/KRLight.cpp index 238a57c..68773c2 100755 --- a/kraken/nodes/KRLight.cpp +++ b/kraken/nodes/KRLight.cpp @@ -221,6 +221,18 @@ float KRLight::getDecayStart() const return m_decayStart; } +void KRLight::preStream(const KRViewport& viewport, std::list& resourceRequests) +{ + KRNode::preStream(viewport, resourceRequests); + + // Pre-stream sprites, even if the alpha is zero + m_flareTexture.bind(&getContext()); + + if (m_flareTexture.isBound()) { + resourceRequests.emplace_back(m_flareTexture.get(), KRTexture::TEXTURE_USAGE_LIGHT_FLARE); + } +} + void KRLight::render(RenderInfo& ri) { KRNode::render(ri); @@ -338,7 +350,7 @@ void KRLight::render(RenderInfo& ri) } if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_PARTICLE_OCCLUSION) { - if (m_flareTexture.isSet() && m_flareSize > 0.0f) { + if (m_flareTexture.isBound() && m_flareSize > 0.0f) { KRMesh* sphereModel = getContext().getMeshManager()->getMesh("__sphere"); if (sphereModel) { @@ -385,7 +397,7 @@ void KRLight::render(RenderInfo& ri) } if (ri.renderPass->getType() == RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES) { - if (m_flareTexture.isSet() && m_flareSize > 0.0f) { + if (m_flareTexture.isBound() && m_flareSize > 0.0f) { if (m_occlusionQuery) { int params = 0; @@ -393,10 +405,6 @@ void KRLight::render(RenderInfo& ri) GLDEBUG(glDeleteQueriesEXT(1, &m_occlusionQuery)); if (params) { - m_flareTexture.bind(&getContext()); - - if (m_flareTexture.isBound()) { - m_flareTexture.get()->requestResidency(0.0f, KRTexture::TEXTURE_USAGE_LIGHT_FLARE); KRMeshManager::KRVBOData& vertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES; // Render light flare on transparency pass @@ -422,7 +430,6 @@ void KRLight::render(RenderInfo& ri) m_pContext->getMeshManager()->bindVBO(ri.commandBuffer, &vertices, 1.0f); vkCmdDraw(ri.commandBuffer, 4, 1, 0, 0); } - } } } diff --git a/kraken/nodes/KRLight.h b/kraken/nodes/KRLight.h index f24c893..61cd82f 100755 --- a/kraken/nodes/KRLight.h +++ b/kraken/nodes/KRLight.h @@ -65,6 +65,7 @@ public: void setFlareOcclusionSize(float occlusion_size); void deleteBuffers(); + virtual void preStream(const KRViewport& viewport, std::list& resourceRequests) override; virtual void render(RenderInfo& ri) override; int getShadowBufferCount(); diff --git a/kraken/nodes/KRModel.cpp b/kraken/nodes/KRModel.cpp index 9094991..1104cd1 100755 --- a/kraken/nodes/KRModel.cpp +++ b/kraken/nodes/KRModel.cpp @@ -328,7 +328,7 @@ void KRModel::preStream(const KRViewport& viewport, std::list m_lightMap.bind(&getContext()); if (m_lightMap.isBound()) { - m_lightMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_LIGHT_MAP); + resourceRequests.emplace_back(m_lightMap.get(), KRTexture::TEXTURE_USAGE_LIGHT_MAP); } }