diff --git a/kraken/nodes/KRModel.cpp b/kraken/nodes/KRModel.cpp index 55096ac..9094991 100755 --- a/kraken/nodes/KRModel.cpp +++ b/kraken/nodes/KRModel.cpp @@ -321,7 +321,7 @@ void KRModel::preStream(const KRViewport& viewport, std::list for (int i = 0; i < kMeshLODCount; i++) { if (m_meshes[i].isBound()) { - m_meshes[i].get()->preStream(lod_coverage); + m_meshes[i].get()->preStream(resourceRequests, lod_coverage); } } diff --git a/kraken/resources/material/KRMaterial.cpp b/kraken/resources/material/KRMaterial.cpp index da3b335..181807b 100755 --- a/kraken/resources/material/KRMaterial.cpp +++ b/kraken/resources/material/KRMaterial.cpp @@ -228,32 +228,32 @@ bool KRMaterial::isTransparent() return m_tr < 1.0 || m_alpha_mode == KRMATERIAL_ALPHA_MODE_BLENDONESIDE || m_alpha_mode == KRMATERIAL_ALPHA_MODE_BLENDTWOSIDE; } -void KRMaterial::preStream(float lodCoverage) +void KRMaterial::preStream(std::list& resourceRequests, float lodCoverage) { getTextures(); if (m_ambientMap.isBound()) { - m_ambientMap.get()->requestResidency(lodCoverage, KRTexture::TEXTURE_USAGE_AMBIENT_MAP); + resourceRequests.emplace_back(m_ambientMap.get(), KRTexture::TEXTURE_USAGE_AMBIENT_MAP); } if (m_diffuseMap.isBound()) { - m_diffuseMap.get()->requestResidency(lodCoverage, KRTexture::TEXTURE_USAGE_DIFFUSE_MAP); + resourceRequests.emplace_back(m_diffuseMap.get(), KRTexture::TEXTURE_USAGE_DIFFUSE_MAP); } if (m_normalMap.isBound()) { - m_normalMap.get()->requestResidency(lodCoverage, KRTexture::TEXTURE_USAGE_NORMAL_MAP); + resourceRequests.emplace_back(m_normalMap.get(), KRTexture::TEXTURE_USAGE_NORMAL_MAP); } if (m_specularMap.isBound()) { - m_specularMap.get()->requestResidency(lodCoverage, KRTexture::TEXTURE_USAGE_SPECULAR_MAP); + resourceRequests.emplace_back(m_specularMap.get(), KRTexture::TEXTURE_USAGE_SPECULAR_MAP); } if (m_reflectionMap.isBound()) { - m_reflectionMap.get()->requestResidency(lodCoverage, KRTexture::TEXTURE_USAGE_REFLECTION_MAP); + resourceRequests.emplace_back(m_reflectionMap.get(), KRTexture::TEXTURE_USAGE_REFLECTION_MAP); } if (m_reflectionCube.isBound()) { - m_reflectionCube.get()->requestResidency(lodCoverage, KRTexture::TEXTURE_USAGE_REFECTION_CUBE); + resourceRequests.emplace_back(m_reflectionCube.get(), KRTexture::TEXTURE_USAGE_REFECTION_CUBE); } } @@ -384,27 +384,22 @@ void KRMaterial::bind(KRNode::RenderInfo& ri, ModelFormat modelFormat, __uint32_ } if (bDiffuseMap) { - m_diffuseMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_DIFFUSE_MAP); pShader->setImageBinding("diffuseTexture", m_diffuseMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER); } if (bSpecMap) { - m_specularMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_SPECULAR_MAP); pShader->setImageBinding("specularTexture", m_specularMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER); } if (bNormalMap) { - m_normalMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_NORMAL_MAP); pShader->setImageBinding("normalTexture", m_normalMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER); } if (bReflectionCubeMap) { - m_reflectionCube.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_REFECTION_CUBE); pShader->setImageBinding("reflectionCubeTexture", m_reflectionCube.get(), getContext().getSamplerManager()->DEFAULT_CLAMPED_SAMPLER); } if (bReflectionMap) { - m_reflectionMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_REFLECTION_MAP); pShader->setImageBinding("reflectionTexture", m_reflectionMap.get(), getContext().getSamplerManager()->DEFAULT_CLAMPED_SAMPLER); } diff --git a/kraken/resources/material/KRMaterial.h b/kraken/resources/material/KRMaterial.h index 8096382..08e24c5 100755 --- a/kraken/resources/material/KRMaterial.h +++ b/kraken/resources/material/KRMaterial.h @@ -96,7 +96,7 @@ public: bool needsVertexTangents(); kraken_stream_level getStreamLevel(); - void preStream(float lodCoverage); + void preStream(std::list& resourceRequests, float lodCoverage); private: std::string m_name; diff --git a/kraken/resources/mesh/KRMesh.cpp b/kraken/resources/mesh/KRMesh.cpp index 43d6a35..f9c1033 100755 --- a/kraken/resources/mesh/KRMesh.cpp +++ b/kraken/resources/mesh/KRMesh.cpp @@ -187,13 +187,13 @@ void KRMesh::getMaterials() } } -void KRMesh::preStream(float lodCoverage) +void KRMesh::preStream(std::list& resourceRequests, float lodCoverage) { getSubmeshes(); getMaterials(); for (std::set::iterator mat_itr = m_uniqueMaterials.begin(); mat_itr != m_uniqueMaterials.end(); mat_itr++) { - (*mat_itr)->preStream(lodCoverage); + (*mat_itr)->preStream(resourceRequests, lodCoverage); } for (Submesh& mesh : m_submeshes) { @@ -236,7 +236,6 @@ void KRMesh::render(KRNode::RenderInfo& ri, const std::string& object_name, cons { //fprintf(stderr, "Rendering model: %s\n", m_name.c_str()); if (ri.renderPass->getType() != RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES && ri.renderPass->getType() != RenderPassType::RENDER_PASS_PARTICLE_OCCLUSION && ri.renderPass->getType() != RenderPassType::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE) { - preStream(lod_coverage); if (getStreamLevel() == kraken_stream_level::STREAM_LEVEL_OUT) { } else { diff --git a/kraken/resources/mesh/KRMesh.h b/kraken/resources/mesh/KRMesh.h index 7af49e5..e2d1a70 100755 --- a/kraken/resources/mesh/KRMesh.h +++ b/kraken/resources/mesh/KRMesh.h @@ -75,7 +75,7 @@ public: virtual ~KRMesh(); kraken_stream_level getStreamLevel(); - void preStream(float lodCoverage); + void preStream(std::list& resourceRequests, float lodCoverage); bool hasTransparency();