Instancing will no longer be used under X instances
*Experimental* optimization Former-commit-id: 4dee4905d59739b3ec062ef283d4b7561160e21d
This commit is contained in:
@@ -136,7 +136,7 @@ void NzForwardRenderQueue::AddModel(const NzModel* model)
|
||||
if (pair.second)
|
||||
material->AddResourceListener(this, ResourceType_Material);
|
||||
|
||||
auto& meshMap = pair.first->second.second;
|
||||
auto& meshMap = std::get<2>(pair.first->second);
|
||||
|
||||
auto pair2 = meshMap.insert(std::make_pair(staticMesh, StaticMeshContainer::mapped_type()));
|
||||
if (pair2.second)
|
||||
@@ -144,7 +144,13 @@ void NzForwardRenderQueue::AddModel(const NzModel* model)
|
||||
|
||||
std::vector<StaticData>& staticDataContainer = pair2.first->second;
|
||||
|
||||
staticDataContainer.resize(staticDataContainer.size()+1);
|
||||
unsigned int instanceCount = staticDataContainer.size() + 1;
|
||||
|
||||
// As-t-on suffisamment d'instances pour que le coût d'utilisation de l'instancing soit payé ?
|
||||
if (instanceCount >= NAZARA_GRAPHICS_INSTANCING_MIN_INSTANCES_COUNT)
|
||||
std::get<0>(pair.first->second) = true; // Apparemment oui, activons l'instancing avec ce matériau
|
||||
|
||||
staticDataContainer.resize(instanceCount);
|
||||
StaticData& data = staticDataContainer.back();
|
||||
|
||||
data.aabb = staticMesh->GetAABB();
|
||||
@@ -211,7 +217,7 @@ void NzForwardRenderQueue::OnResourceDestroy(const NzResource* resource, int ind
|
||||
case ResourceType_SkeletalMesh:
|
||||
{
|
||||
for (auto& pair : opaqueModels)
|
||||
pair.second.first.erase(static_cast<const NzSkeletalMesh*>(resource));
|
||||
std::get<1>(pair.second).erase(static_cast<const NzSkeletalMesh*>(resource));
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -219,7 +225,7 @@ void NzForwardRenderQueue::OnResourceDestroy(const NzResource* resource, int ind
|
||||
case ResourceType_StaticMesh:
|
||||
{
|
||||
for (auto& pair : opaqueModels)
|
||||
pair.second.second.erase(static_cast<const NzStaticMesh*>(resource));
|
||||
std::get<2>(pair.second).erase(static_cast<const NzStaticMesh*>(resource));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user