Implemented KRMesh::requestResidency

This commit is contained in:
2025-11-16 23:39:08 -08:00
parent 112fdab9f5
commit 0abc52525d
3 changed files with 13 additions and 6 deletions

View File

@@ -322,6 +322,7 @@ void KRModel::preStream(const KRViewport& viewport, std::list<KRResourceRequest>
for (int i = 0; i < kMeshLODCount; i++) { for (int i = 0; i < kMeshLODCount; i++) {
if (m_meshes[i].isBound()) { if (m_meshes[i].isBound()) {
m_meshes[i].get()->preStream(resourceRequests, lod_coverage); m_meshes[i].get()->preStream(resourceRequests, lod_coverage);
resourceRequests.emplace_back(m_meshes[i].get(), 0); // TODO: Pass in LOD level to drive streaming priority of meshes
} }
} }

View File

@@ -187,6 +187,17 @@ void KRMesh::getMaterials()
} }
} }
void KRMesh::requestResidency(uint32_t usage, float lodCoverage)
{
KRResource::requestResidency(usage, lodCoverage);
for (Submesh& mesh : m_submeshes) {
for (shared_ptr<KRMeshManager::KRVBOData>& vbo : mesh.vbo_data_blocks) {
vbo->requestResidency(lodCoverage);
}
}
}
void KRMesh::preStream(std::list<KRResourceRequest>& resourceRequests, float lodCoverage) void KRMesh::preStream(std::list<KRResourceRequest>& resourceRequests, float lodCoverage)
{ {
getSubmeshes(); getSubmeshes();
@@ -195,12 +206,6 @@ void KRMesh::preStream(std::list<KRResourceRequest>& resourceRequests, float lod
for (std::set<KRMaterial*>::iterator mat_itr = m_uniqueMaterials.begin(); mat_itr != m_uniqueMaterials.end(); mat_itr++) { for (std::set<KRMaterial*>::iterator mat_itr = m_uniqueMaterials.begin(); mat_itr != m_uniqueMaterials.end(); mat_itr++) {
(*mat_itr)->preStream(resourceRequests, lodCoverage); (*mat_itr)->preStream(resourceRequests, lodCoverage);
} }
for (Submesh& mesh : m_submeshes) {
for (shared_ptr<KRMeshManager::KRVBOData>& vbo : mesh.vbo_data_blocks) {
vbo->requestResidency(lodCoverage);
}
}
} }
kraken_stream_level KRMesh::getStreamLevel() kraken_stream_level KRMesh::getStreamLevel()

View File

@@ -76,6 +76,7 @@ public:
kraken_stream_level getStreamLevel(); kraken_stream_level getStreamLevel();
void preStream(std::list<KRResourceRequest>& resourceRequests, float lodCoverage); void preStream(std::list<KRResourceRequest>& resourceRequests, float lodCoverage);
void requestResidency(uint32_t usage, float lodCoverage) final;
bool hasTransparency(); bool hasTransparency();