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++) { for (int i = 0; i < kMeshLODCount; i++) {
if (m_meshes[i].isBound()) { 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; 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(); getTextures();
if (m_ambientMap.isBound()) { 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()) { 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()) { 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()) { 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()) { 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()) { 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) { if (bDiffuseMap) {
m_diffuseMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_DIFFUSE_MAP);
pShader->setImageBinding("diffuseTexture", m_diffuseMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER); pShader->setImageBinding("diffuseTexture", m_diffuseMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER);
} }
if (bSpecMap) { if (bSpecMap) {
m_specularMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_SPECULAR_MAP);
pShader->setImageBinding("specularTexture", m_specularMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER); pShader->setImageBinding("specularTexture", m_specularMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER);
} }
if (bNormalMap) { if (bNormalMap) {
m_normalMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_NORMAL_MAP);
pShader->setImageBinding("normalTexture", m_normalMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER); pShader->setImageBinding("normalTexture", m_normalMap.get(), getContext().getSamplerManager()->DEFAULT_WRAPPING_SAMPLER);
} }
if (bReflectionCubeMap) { if (bReflectionCubeMap) {
m_reflectionCube.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_REFECTION_CUBE);
pShader->setImageBinding("reflectionCubeTexture", m_reflectionCube.get(), getContext().getSamplerManager()->DEFAULT_CLAMPED_SAMPLER); pShader->setImageBinding("reflectionCubeTexture", m_reflectionCube.get(), getContext().getSamplerManager()->DEFAULT_CLAMPED_SAMPLER);
} }
if (bReflectionMap) { if (bReflectionMap) {
m_reflectionMap.get()->requestResidency(lod_coverage, KRTexture::TEXTURE_USAGE_REFLECTION_MAP);
pShader->setImageBinding("reflectionTexture", m_reflectionMap.get(), getContext().getSamplerManager()->DEFAULT_CLAMPED_SAMPLER); pShader->setImageBinding("reflectionTexture", m_reflectionMap.get(), getContext().getSamplerManager()->DEFAULT_CLAMPED_SAMPLER);
} }

View File

@@ -96,7 +96,7 @@ public:
bool needsVertexTangents(); bool needsVertexTangents();
kraken_stream_level getStreamLevel(); kraken_stream_level getStreamLevel();
void preStream(float lodCoverage); void preStream(std::list<KRResourceRequest>& resourceRequests, float lodCoverage);
private: private:
std::string m_name; 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(); getSubmeshes();
getMaterials(); getMaterials();
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(lodCoverage); (*mat_itr)->preStream(resourceRequests, lodCoverage);
} }
for (Submesh& mesh : m_submeshes) { 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()); //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) { 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) { if (getStreamLevel() == kraken_stream_level::STREAM_LEVEL_OUT) {
} else { } else {

View File

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