Streamlined resource handling in Pre-Stream with KRResourceBinding::submitRequest

This commit is contained in:
2025-11-17 00:55:50 -08:00
parent 61cc889880
commit b146886691
15 changed files with 93 additions and 81 deletions

View File

@@ -70,6 +70,8 @@ KrResult KRCamera::update(const KrNodeInfo* nodeInfo)
KRCamera::KRCamera(KRScene& scene, std::string name)
: KRNode(scene, name)
, m_fontTexture(KRTextureBinding("font", KRTexture::TEXTURE_USAGE_UI))
, m_skyBox(KRTextureBinding(KRTexture::TEXTURE_USAGE_SKY_CUBE))
{
m_surfaceHandle = KR_NULL_HANDLE;
m_last_frame_start = 0;
@@ -148,16 +150,8 @@ void KRCamera::preStream(const KRViewport& viewport, std::list<KRResourceRequest
{
KRNode::preStream(viewport, resourceRequests);
m_skyBox.bind(&getContext());
m_fontTexture.bind(&getContext());
if (m_skyBox.isBound()) {
resourceRequests.emplace_back(m_skyBox.get(), KRTexture::TEXTURE_USAGE_SKY_CUBE);
}
if (m_fontTexture.isBound()) {
resourceRequests.emplace_back(m_fontTexture.get(), KRTexture::TEXTURE_USAGE_UI);
}
m_skyBox.submitRequest(&getContext(), resourceRequests);
m_fontTexture.submitRequest(&getContext(), resourceRequests);
}
void KRCamera::render(KRNode::RenderInfo& ri)

View File

@@ -63,7 +63,9 @@ void KRLight::InitNodeInfo(KrNodeInfo* nodeInfo)
nodeInfo->light.light_shafts = true;
}
KRLight::KRLight(KRScene& scene, std::string name) : KRNode(scene, name)
KRLight::KRLight(KRScene& scene, std::string name)
: KRNode(scene, name)
, m_flareTexture(KRTextureBinding(KRTexture::TEXTURE_USAGE_LIGHT_FLARE))
{
m_intensity = 1.0f;
m_dust_particle_intensity = 1.0f;
@@ -226,11 +228,7 @@ void KRLight::preStream(const KRViewport& viewport, std::list<KRResourceRequest>
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);
}
m_flareTexture.submitRequest(&getContext(), resourceRequests);
}
void KRLight::render(RenderInfo& ri)

View File

@@ -56,6 +56,7 @@ void KRModel::InitNodeInfo(KrNodeInfo* nodeInfo)
KRModel::KRModel(KRScene& scene, std::string name)
: KRNode(scene, name)
, m_lightMap(KRTexture::TEXTURE_USAGE_LIGHT_MAP)
, m_min_lod_coverage(0.0f)
, m_receivesShadow(true)
, m_faces_camera(false)
@@ -82,8 +83,8 @@ KRModel::KRModel(KRScene& scene, std::string name)
KRModel::KRModel(KRScene& scene, std::string instance_name, std::string model_name[kMeshLODCount], std::string light_map, float lod_min_coverage, bool receives_shadow, bool faces_camera, Vector3 rim_color, float rim_power)
: KRNode(scene, instance_name)
, m_lightMap(light_map, KRTexture::TEXTURE_USAGE_LIGHT_MAP)
{
m_lightMap.set(light_map);
for (int lod = 0; lod < kMeshLODCount; lod++) {
m_meshes[lod].set(model_name[lod]);
}
@@ -312,17 +313,10 @@ void KRModel::preStream(const KRViewport& viewport, std::list<KRResourceRequest>
float lod_coverage = viewport.coverage(getBounds());
for (int i = 0; i < kMeshLODCount; i++) {
if (m_meshes[i].isBound()) {
m_meshes[i].get()->preStream(resourceRequests, lod_coverage);
resourceRequests.emplace_back(m_meshes[i].get(), 0, lod_coverage);
}
m_meshes[i].submitRequest(&getContext(), resourceRequests, lod_coverage);
}
m_lightMap.bind(&getContext());
if (m_lightMap.isBound()) {
resourceRequests.emplace_back(m_lightMap.get(), KRTexture::TEXTURE_USAGE_LIGHT_MAP);
}
m_lightMap.submitRequest(&getContext(), resourceRequests);
}

View File

@@ -54,7 +54,9 @@ void KRSprite::InitNodeInfo(KrNodeInfo* nodeInfo)
nodeInfo->sprite.texture = -1;
}
KRSprite::KRSprite(KRScene& scene, std::string name) : KRNode(scene, name)
KRSprite::KRSprite(KRScene& scene, std::string name)
: KRNode(scene, name)
, m_spriteTexture(KRTextureBinding(KRTexture::TEXTURE_USAGE_SPRITE))
{
m_spriteAlpha = 1.0f;
}
@@ -117,11 +119,7 @@ void KRSprite::preStream(const KRViewport& viewport, std::list<KRResourceRequest
KRNode::preStream(viewport, resourceRequests);
// Pre-stream sprites, even if the alpha is zero
m_spriteTexture.bind(&getContext());
if (m_spriteTexture.isBound()) {
resourceRequests.emplace_back(m_spriteTexture.get(), KRTexture::TEXTURE_USAGE_SPRITE);
}
m_spriteTexture.submitRequest(&getContext(), resourceRequests);
}
void KRSprite::render(RenderInfo& ri)