Instancing will no longer be used under X instances

*Experimental* optimization


Former-commit-id: 4dee4905d59739b3ec062ef283d4b7561160e21d
This commit is contained in:
Lynix
2013-08-09 00:33:18 +02:00
parent b969c24060
commit 28eff9af30
4 changed files with 25 additions and 12 deletions

View File

@@ -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;
}