Added id checking and remove try/catch

This commit is contained in:
matsukaze 2014-02-16 23:25:06 -05:00
parent 6c50491ee7
commit 1f7f4d2a22
2 changed files with 23 additions and 26 deletions

View file

@ -509,8 +509,10 @@ void PrimitiveRenderer::deconstructElements(
for (TriElementList::const_iterator it = tris.begin(); it != tris.end(); ++it) { for (TriElementList::const_iterator it = tris.begin(); it != tris.end(); ++it) {
const TriElement* tri = *it; const TriElement* tri = *it;
// Put the tri element index into decon queue if (tri->id) {
_deconstructTriElementIndex.push(tri->id); // Put the tri element index into decon queue
_deconstructTriElementIndex.push(tri->id);
}
} }
} }
@ -522,8 +524,10 @@ void PrimitiveRenderer::deconstructElements(
for (VertexElementIndexList::const_iterator it = vertexIndexList.begin(); it != vertexIndexList.end(); ++it) { for (VertexElementIndexList::const_iterator it = vertexIndexList.begin(); it != vertexIndexList.end(); ++it) {
int index = *it; int index = *it;
// Put the vertex element index into the available queue if (index) {
_availableVertexElementIndex.push(index); // Put the vertex element index into the available queue
_availableVertexElementIndex.push(index);
}
} }
} }
@ -633,42 +637,34 @@ int PrimitiveRenderer::vAdd(
) { ) {
QMutexLocker lock(&_guard); QMutexLocker lock(&_guard);
int index = getAvailablePrimitiveIndex(); int id = getAvailablePrimitiveIndex();
if (index != 0) { if (id != 0) {
try { // Take ownership of primitive, including responsibility
// Take ownership of primitive, including responsibility // for destruction
// for destruction _primitives[id] = primitive;
_primitives[index] = primitive; _constructPrimitiveIndex.push(id);
_constructPrimitiveIndex.push(index); _cpuMemoryUsage += primitive->getMemoryUsage();
_cpuMemoryUsage += primitive->getMemoryUsage();
} catch(...) {
// Qt failed, recycle the index
_availablePrimitiveIndex.push(index);
index = 0;
}
} }
return index; return id;
} }
void PrimitiveRenderer::vRemove( void PrimitiveRenderer::vRemove(
int index int id
) { ) {
try { if (id != 0) {
QMutexLocker lock(&_guard); QMutexLocker lock(&_guard);
// Locate and remove the primitive by id in the vector map // Locate and remove the primitive by id in the vector map
Primitive* primitive = _primitives[index]; Primitive* primitive = _primitives[id];
if (primitive) { if (primitive) {
_primitives[index] = 0; _primitives[id] = 0;
_cpuMemoryUsage -= primitive->getMemoryUsage(); _cpuMemoryUsage -= primitive->getMemoryUsage();
deconstructElements(primitive); deconstructElements(primitive);
// Queue the index onto the available primitive stack. // Queue the index onto the available primitive stack.
_availablePrimitiveIndex.push(index); _availablePrimitiveIndex.push(id);
} }
} catch(...) {
// Qt failed
} }
} }
@ -681,8 +677,8 @@ void PrimitiveRenderer::vRelease() {
} }
void PrimitiveRenderer::vRender() { void PrimitiveRenderer::vRender() {
int id;
int id;
QMutexLocker lock(&_guard); QMutexLocker lock(&_guard);
// Iterate over the set of triangle element array buffer ids scheduled for // Iterate over the set of triangle element array buffer ids scheduled for

View file

@ -283,6 +283,7 @@ private:
/// Add primitive to renderer database. /// Add primitive to renderer database.
/// Service implementer to provide private override for this method /// Service implementer to provide private override for this method
/// in derived class /// in derived class
/// @return primitive id
/// ///
virtual int vAdd( virtual int vAdd(
Primitive* primitive ///< Pointer to primitive Primitive* primitive ///< Pointer to primitive