Work on reducing batch count.
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user