Work on reducing batch count.
This commit is contained in:
parent
a0bcd6b214
commit
b41793b520
@ -143,28 +143,34 @@ namespace Ogre
|
||||
//LogManager::getSingleton().logMessage("regionX = " + StringConverter::toString(regionX));
|
||||
if(surfaceUpToDate[regionX][regionY][regionZ] == false)
|
||||
{
|
||||
std::stringstream locationStream;
|
||||
locationStream << "(" << regionX << "," << regionY << "," << regionZ << ")";
|
||||
std::string location = locationStream.str();
|
||||
|
||||
//Generate the surface
|
||||
IndexedSurfacePatch* singleMaterialPatch = new IndexedSurfacePatch(false);
|
||||
IndexedSurfacePatch* multiMaterialPatch = new IndexedSurfacePatch(true);
|
||||
|
||||
generateMeshDataForRegion(regionX,regionY,regionZ, singleMaterialPatch, multiMaterialPatch);
|
||||
|
||||
/*if((singleMaterialPatch->m_vecVertices.size == 0) && (singleMaterialPatch->m_vecTriangleIndices.size == 0))
|
||||
if((singleMaterialPatch->m_vecVertices.size() == 0) && (singleMaterialPatch->m_vecTriangleIndices.size() == 0))
|
||||
{
|
||||
//No geometry exists. We can delete the scene node if it exists (it might, if the region has only just become empty)
|
||||
//No geometry exists. We can delete the scene node if it exists
|
||||
std::map<UIntVector3, SceneNode*>::iterator iterSceneNode = sceneNodes.find(UIntVector3(regionX,regionY,regionZ));
|
||||
if(iterSceneNode != sceneNodes.end())
|
||||
{
|
||||
getRootSceneNode()->removeChild
|
||||
getRootSceneNode()->removeChild(location);
|
||||
}
|
||||
}*/
|
||||
surfaceUpToDate[regionX][regionY][regionZ] = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
//If a SceneNode doesn't exist in this position then create one.
|
||||
std::map<UIntVector3, SceneNode*>::iterator iterSceneNode = sceneNodes.find(UIntVector3(regionX,regionY,regionZ));
|
||||
SceneNode* sceneNode;
|
||||
if(iterSceneNode == sceneNodes.end())
|
||||
{
|
||||
sceneNode = getRootSceneNode()->createChildSceneNode(Vector3(regionX*OGRE_REGION_SIDE_LENGTH,regionY*OGRE_REGION_SIDE_LENGTH,regionZ*OGRE_REGION_SIDE_LENGTH));
|
||||
sceneNode = getRootSceneNode()->createChildSceneNode(location, Vector3(regionX*OGRE_REGION_SIDE_LENGTH,regionY*OGRE_REGION_SIDE_LENGTH,regionZ*OGRE_REGION_SIDE_LENGTH));
|
||||
sceneNodes.insert(std::make_pair(UIntVector3(regionX,regionY,regionZ),sceneNode));
|
||||
}
|
||||
else
|
||||
@ -183,21 +189,21 @@ namespace Ogre
|
||||
triangleCounter += iterSurfacePatch->second.getNoOfTriangles();*/
|
||||
|
||||
SurfacePatchRenderable* singleMaterialSurfacePatchRenderable = m_singleMaterialSurfaces[regionX][regionY][regionZ];
|
||||
//SurfacePatchRenderable* multiMaterialSurfacePatchRenderable = m_multiMaterialSurfaces[regionX][regionY][regionZ];
|
||||
SurfacePatchRenderable* multiMaterialSurfacePatchRenderable = m_multiMaterialSurfaces[regionX][regionY][regionZ];
|
||||
if(singleMaterialSurfacePatchRenderable == 0) //if single is null then multi should also be null
|
||||
{
|
||||
//We have to create the surfaces
|
||||
singleMaterialSurfacePatchRenderable = new SurfacePatchRenderable(singleMaterialPatch,materialMap->getMaterialAtIndex(1));
|
||||
//multiMaterialSurfacePatchRenderable = new SurfacePatchRenderable(multiMaterialPatch,materialMap->getMaterialAtIndex(2));
|
||||
multiMaterialSurfacePatchRenderable = new SurfacePatchRenderable(multiMaterialPatch,materialMap->getMaterialAtIndex(2));
|
||||
|
||||
//multiMaterialSurfacePatchRenderable->setRenderQueueGroup(RENDER_QUEUE_3);
|
||||
multiMaterialSurfacePatchRenderable->setRenderQueueGroup(RENDER_QUEUE_3);
|
||||
singleMaterialSurfacePatchRenderable->setRenderQueueGroup(RENDER_QUEUE_4);
|
||||
|
||||
m_singleMaterialSurfaces[regionX][regionY][regionZ] = singleMaterialSurfacePatchRenderable;
|
||||
sceneNode->attachObject(singleMaterialSurfacePatchRenderable);
|
||||
|
||||
//m_multiMaterialSurfaces[regionX][regionY][regionZ] = multiMaterialSurfacePatchRenderable;
|
||||
//sceneNode->attachObject(multiMaterialSurfacePatchRenderable);
|
||||
m_multiMaterialSurfaces[regionX][regionY][regionZ] = multiMaterialSurfacePatchRenderable;
|
||||
sceneNode->attachObject(multiMaterialSurfacePatchRenderable);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -205,8 +211,8 @@ namespace Ogre
|
||||
singleMaterialSurfacePatchRenderable->updateWithNewSurfacePatch(singleMaterialPatch);
|
||||
sceneNode->attachObject(singleMaterialSurfacePatchRenderable);
|
||||
|
||||
//multiMaterialSurfacePatchRenderable->updateWithNewSurfacePatch(multiMaterialPatch);
|
||||
//sceneNode->attachObject(multiMaterialSurfacePatchRenderable);
|
||||
multiMaterialSurfacePatchRenderable->updateWithNewSurfacePatch(multiMaterialPatch);
|
||||
sceneNode->attachObject(multiMaterialSurfacePatchRenderable);
|
||||
}
|
||||
}
|
||||
//sceneNode->showBoundingBox(true);
|
||||
@ -222,9 +228,9 @@ namespace Ogre
|
||||
//Now call the base class to do the actual visibility determination...
|
||||
SceneManager::_findVisibleObjects(cam, visibleBounds, onlyShadowCasters);
|
||||
|
||||
LogManager::getSingleton().logMessage("\nNo of triangles = " + StringConverter::toString(IndexedSurfacePatch::noOfTrianglesSubmitted));
|
||||
LogManager::getSingleton().logMessage("No of vertices submitted = " + StringConverter::toString(IndexedSurfacePatch::noOfVerticesSubmitted));
|
||||
LogManager::getSingleton().logMessage("No of vertices accepted = " + StringConverter::toString(IndexedSurfacePatch::noOfVerticesAccepted));
|
||||
//LogManager::getSingleton().logMessage("\nNo of triangles = " + StringConverter::toString(IndexedSurfacePatch::noOfTrianglesSubmitted));
|
||||
//LogManager::getSingleton().logMessage("No of vertices submitted = " + StringConverter::toString(IndexedSurfacePatch::noOfVerticesSubmitted));
|
||||
//LogManager::getSingleton().logMessage("No of vertices accepted = " + StringConverter::toString(IndexedSurfacePatch::noOfVerticesAccepted));
|
||||
}
|
||||
|
||||
void PolyVoxSceneManager::setAllUpToDateFalse(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user