KRMaterial is now using KRResourceRequest's to load textures

This commit is contained in:
2025-11-14 23:33:44 -08:00
parent dec5872cf6
commit 2e9fac869a
5 changed files with 12 additions and 18 deletions

View File

@@ -321,7 +321,7 @@ void KRModel::preStream(const KRViewport& viewport, std::list<KRResourceRequest>
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);
}
}

View File

@@ -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<KRResourceRequest>& 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);
}

View File

@@ -96,7 +96,7 @@ public:
bool needsVertexTangents();
kraken_stream_level getStreamLevel();
void preStream(float lodCoverage);
void preStream(std::list<KRResourceRequest>& resourceRequests, float lodCoverage);
private:
std::string m_name;

View File

@@ -187,13 +187,13 @@ void KRMesh::getMaterials()
}
}
void KRMesh::preStream(float lodCoverage)
void KRMesh::preStream(std::list<KRResourceRequest>& resourceRequests, float lodCoverage)
{
getSubmeshes();
getMaterials();
for (std::set<KRMaterial*>::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 {

View File

@@ -75,7 +75,7 @@ public:
virtual ~KRMesh();
kraken_stream_level getStreamLevel();
void preStream(float lodCoverage);
void preStream(std::list<KRResourceRequest>& resourceRequests, float lodCoverage);
bool hasTransparency();