Moving from using ManualObject to using HardwareBuffers directly.

This commit is contained in:
David Williams 2007-08-15 09:35:21 +00:00
parent 72bc4a03e3
commit eeacb222e1
3 changed files with 11 additions and 48 deletions

View File

@ -12,8 +12,7 @@ namespace Ogre
class Surface : public SimpleRenderable
{
public:
Surface();
Surface(const String& material);
Surface(const String& material = "BaseWhiteNoLighting");
~Surface(void);
void setGeometry(std::vector<Vertex> verticesToSet, std::vector<Triangle> indicesToSet);

View File

@ -331,10 +331,12 @@ namespace Ogre
//LogManager::getSingleton().logMessage("regionX = " + StringConverter::toString(regionX));
if(surfaceUpToDate[regionX][regionY][regionZ] == false)
{
//Generate the surface
std::vector<Vertex> vertexData;
std::vector< std::vector< Triangle> > indexData;
generateMeshDataForRegion(regionX,regionY,regionZ,vertexData,indexData);
//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())
@ -348,6 +350,7 @@ namespace Ogre
sceneNode->detachAllObjects();
}
//For each surface attach it to the scene node.
for(uint meshCt = 1; meshCt < 256; ++meshCt)
{
if(indexData[meshCt].size() == 0)
@ -359,40 +362,27 @@ namespace Ogre
{
//We have to create the surface
Surface* surface = new Surface(materialMap->getMaterialAtIndex(meshCt));
sceneNode->attachObject(surface);
surface->setGeometry(vertexData,indexData[meshCt]);
m_mapSurfaces[regionX][regionY][regionZ].insert(std::make_pair(meshCt,surface));
surface->setGeometry(vertexData,indexData[meshCt]);
sceneNode->attachObject(surface);
}
else
{
//We just update the existing surface
iterSurface->second->setGeometry(vertexData,indexData[meshCt]);
sceneNode->attachObject(iterSurface->second);
//sceneNodes[regionX][regionY][regionZ]->detachObject(iterSurface->second);
/*delete iterSurface->second;
m_mapSurfaces[regionX][regionY][regionZ].erase(iterSurface);
//We have to create the surface
Surface* surface = new Surface(materialMap->getMaterialAtIndex(meshCt));
//sceneNodes[regionX][regionY][regionZ] = getRootSceneNode()->createChildSceneNode(Vector3(regionX*OGRE_REGION_SIDE_LENGTH,regionY*OGRE_REGION_SIDE_LENGTH,regionZ*OGRE_REGION_SIDE_LENGTH));
sceneNodes[regionX][regionY][regionZ]->attachObject(surface);
m_mapSurfaces[regionX][regionY][regionZ].insert(std::make_pair(meshCt,surface));
surface->setGeometry(vertexData,indexData[meshCt]);*/
}
}
sceneNode->showBoundingBox(true);
surfaceUpToDate[regionX][regionY][regionZ] = true;
}
}
}
}
}
//showBoundingBoxes(true);
//Now call the base class to do the actual visibility determination...
SceneManager::_findVisibleObjects(cam, visibleBounds, onlyShadowCasters);
}

View File

@ -4,19 +4,10 @@
namespace Ogre
{
Surface::Surface()
{
mRenderOp.vertexData = NULL;
mRenderOp.indexData = NULL;
this->setMaterial("BaseWhiteNoLighting");
}
Surface::Surface(const String& material)
{
mRenderOp.vertexData = NULL;
mRenderOp.indexData = NULL;
mRenderOp.vertexData = new VertexData();
mRenderOp.indexData = new IndexData();
this->setMaterial(material);
}
@ -29,20 +20,7 @@ namespace Ogre
void Surface::setGeometry(std::vector<Vertex> verticesToSet, std::vector<Triangle> indicesToSet)
{
if(mRenderOp.vertexData)
{
delete mRenderOp.vertexData;
mRenderOp.vertexData = NULL;
}
if(mRenderOp.indexData)
{
delete mRenderOp.indexData;
mRenderOp.indexData = NULL;
}
mRenderOp.vertexData = new VertexData();
mRenderOp.indexData = new IndexData();
//LogManager::getSingleton().logMessage("In setGeometry()");
// Initialization stuff
mRenderOp.vertexData->vertexCount = verticesToSet.size();
@ -121,8 +99,6 @@ namespace Ogre
mBox.setExtents(vaabMin, vaabMax);
//LogManager::getSingleton().logMessage("Setting Index Data of size " + StringConverter::toString(indicesToSet.size()));
unsigned short* pIdx = static_cast<unsigned short*>(ibuf->lock(HardwareBuffer::HBL_DISCARD));
for(int i = 0; i < indicesToSet.size(); i++)
{
@ -134,8 +110,6 @@ namespace Ogre
pIdx++;
}
ibuf->unlock();
}
Real Surface::getSquaredViewDepth(const Camera *cam) const