diff --git a/trinity/Eve/EveInstancedMeshManager.cpp b/trinity/Eve/EveInstancedMeshManager.cpp index 38c63c6eb..57ba93a1e 100644 --- a/trinity/Eve/EveInstancedMeshManager.cpp +++ b/trinity/Eve/EveInstancedMeshManager.cpp @@ -296,7 +296,6 @@ void EveInstancedMeshManager::AddMeshGroup( false, true }; auto& instances = m_meshInstances[key]; - instances.material = material; if( instances.radius == 0 ) { auto meshData = geometry->GetMeshData( meshIndex ); @@ -323,6 +322,7 @@ void EveInstancedMeshManager::AddMeshGroup( meshGroup.handle = &handle; meshGroup.owner = pickingOwner; meshGroup.ownerIndex = pickingOwnerIndex; + meshGroup.material = material; handle.owner = this; handle.index = static_cast( instances.meshGroups.size() - 1 ); @@ -360,7 +360,6 @@ void EveInstancedMeshManager::AddMeshGroup( areaCount, areaReversed }; auto& instances = m_meshInstances[key]; - instances.material = material; if( instances.radius == 0 ) { auto meshData = geometry->GetMeshData( meshIndex ); @@ -387,6 +386,7 @@ void EveInstancedMeshManager::AddMeshGroup( meshGroup.handle = &handle; meshGroup.owner = pickingOwner; meshGroup.ownerIndex = pickingOwnerIndex; + meshGroup.material = material; handle.owner = this; handle.index = static_cast( instances.meshGroups.size() - 1 ); @@ -853,7 +853,7 @@ void EveInstancedMeshManager::GetPickingBatches( EvePendingPickingReadback& read uint32_t stride = uint32_t( mesh.isDynamic ? sizeof( DynamicPerInstanceBufferElement ) : sizeof( StaticPerInstanceBufferElement ) ); Tr2RenderBatch batch; - batch.SetMaterial( meshInfo.material ); + batch.SetMaterial( group.material ); batch.SetGeometry( mesh.combinedVertexDeclaration, draw.lodData->m_vertexAllocation, *draw.indexRange.indices ); batch.SetStreamSource( 1, *allocation.buffer, stride ); batch.SetDrawIndexedInstanced( @@ -940,7 +940,7 @@ size_t EveInstancedMeshManager::GetBatches( const std::initializer_listm_vertexAllocation, *draw.indexRange.indices ); batch.SetStreamSource( 1, *allocation.buffer, stride ); batch.SetDrawIndexedInstanced( @@ -1033,7 +1033,7 @@ void EveInstancedMeshManager::ReportUsedScreenSizes() const { if( auto meshData = mesh.geometry->GetMeshLod( mesh.meshIndex, 0 ) ) { - meshInfo.material->UsedWithScreenSize( meshInfo.maxScreenSize, meshInfo.radius, meshData->m_uvDensities ); + meshInfo.meshGroups.front().material->UsedWithScreenSize( meshInfo.maxScreenSize, meshInfo.radius, meshData->m_uvDensities ); } } } diff --git a/trinity/Eve/EveInstancedMeshManager.h b/trinity/Eve/EveInstancedMeshManager.h index e8ede912b..040371726 100644 --- a/trinity/Eve/EveInstancedMeshManager.h +++ b/trinity/Eve/EveInstancedMeshManager.h @@ -198,6 +198,7 @@ class EveInstancedMeshManager const StaticPerInstanceData* staticInstances = nullptr; const DynamicPerInstanceData* dynamicInstances; }; + Tr2EffectPtr material = nullptr; uint32_t count = 0; uint32_t sphereGroupIndex = 0; uint32_t perObjectDataIndex = 0; @@ -240,7 +241,6 @@ class EveInstancedMeshManager { std::vector meshGroups; - Tr2EffectPtr material = nullptr; float radius = 0.0f; float maxScreenSize = 0.0f; uint32_t totalVisibleInstances = 0;