From ea7769d46631b65869a76f3d0c526addda2c4417 Mon Sep 17 00:00:00 2001 From: breki Date: Thu, 9 Jul 2026 16:45:18 +0000 Subject: [PATCH] fix texture mip flicker on instaned meshes, by reporting screen size per pass and never reporting 0 --- trinity/Eve/EveInstancedMeshManager.cpp | 7 +++++-- trinity/Eve/EveSpaceScene.cpp | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/trinity/Eve/EveInstancedMeshManager.cpp b/trinity/Eve/EveInstancedMeshManager.cpp index a9c418d3e..94ac071b6 100644 --- a/trinity/Eve/EveInstancedMeshManager.cpp +++ b/trinity/Eve/EveInstancedMeshManager.cpp @@ -985,9 +985,12 @@ void EveInstancedMeshManager::ReportUsedScreenSizes() const { for( auto& [mesh, meshInfo] : m_meshInstances ) { - if( auto meshData = mesh.geometry->GetMeshLod( mesh.meshIndex, 0 ) ) + if( meshInfo.maxScreenSize > 0.0f ) { - meshInfo.material->UsedWithScreenSize( meshInfo.maxScreenSize, meshInfo.radius, meshData->m_uvDensities ); + if( auto meshData = mesh.geometry->GetMeshLod( mesh.meshIndex, 0 ) ) + { + meshInfo.material->UsedWithScreenSize( meshInfo.maxScreenSize, meshInfo.radius, meshData->m_uvDensities ); + } } } } diff --git a/trinity/Eve/EveSpaceScene.cpp b/trinity/Eve/EveSpaceScene.cpp index df06d846d..2a370041b 100644 --- a/trinity/Eve/EveSpaceScene.cpp +++ b/trinity/Eve/EveSpaceScene.cpp @@ -1517,6 +1517,8 @@ void EveSpaceScene::GatherBatches( bool includeDistortions, Tr2RenderContext& re m_instancedMeshManager->GetBatches( m_updateContext.GetFrustum(), m_updateContext.GetInvLodFactor(), { { TRIBATCHTYPE_OPAQUE, *m_primaryBatches[TRIBATCHTYPE_OPAQUE] }, { TRIBATCHTYPE_DECAL, *m_primaryBatches[TRIBATCHTYPE_DECAL] }, { TRIBATCHTYPE_ADDITIVE, *m_primaryBatches[TRIBATCHTYPE_ADDITIVE] }, { TRIBATCHTYPE_DEPTH, *m_primaryBatches[TRIBATCHTYPE_DEPTH] }, { TRIBATCHTYPE_DISTORTION, *m_primaryBatches[TRIBATCHTYPE_DISTORTION] } } ); + m_instancedMeshManager->ReportUsedScreenSizes(); + FinalizeBatches( m_primaryBatches ); UpdateShLighting( allObjects ); @@ -1906,6 +1908,8 @@ void EveSpaceScene::RenderReflectionPass( Tr2GpuResourcePool& gpuResourcePool, T { TRIBATCHTYPE_DEPTH, *m_secondaryBatches[TRIBATCHTYPE_DEPTH] }, } ) > 0; + m_instancedMeshManager->ReportUsedScreenSizes(); + if( hasFog || !visibleRenderables.empty() || hasInstancedBatches ) { // clear planets