| 269 | } |
| 270 | |
| 271 | bool TSShape::removeImposter() |
| 272 | { |
| 273 | // Find the imposter detail level |
| 274 | S32 detIndex; |
| 275 | for ( detIndex = 0; detIndex < details.size(); ++detIndex ) |
| 276 | { |
| 277 | if ( details[detIndex].subShapeNum < 0 ) |
| 278 | break; |
| 279 | } |
| 280 | |
| 281 | if ( detIndex == details.size() ) |
| 282 | { |
| 283 | Con::errorf( "TSShape::removeImposter: No imposter detail level found in shape" ); |
| 284 | return false; |
| 285 | } |
| 286 | |
| 287 | // Remove the detail level |
| 288 | details.erase( detIndex ); |
| 289 | |
| 290 | if ( detIndex < billboardDetails.size() ) |
| 291 | { |
| 292 | // Delete old textures |
| 293 | TSLastDetail* bb = billboardDetails[detIndex]; |
| 294 | bb->deleteImposterCacheTextures(); |
| 295 | delete billboardDetails[detIndex]; |
| 296 | } |
| 297 | billboardDetails.clear(); |
| 298 | |
| 299 | detailCollisionAccelerators.erase( detIndex ); |
| 300 | |
| 301 | // Remove the (NULL) meshes from each object |
| 302 | for ( S32 iObj = 0; iObj < objects.size(); ++iObj ) |
| 303 | { |
| 304 | if ( detIndex < objects[iObj].numMeshes ) |
| 305 | { |
| 306 | objects[iObj].numMeshes--; |
| 307 | meshes.erase( objects[iObj].startMeshIndex + detIndex ); |
| 308 | for (S32 j = iObj + 1; j < objects.size(); ++j ) |
| 309 | objects[j].startMeshIndex--; |
| 310 | } |
| 311 | } |
| 312 | |
| 313 | // Update smallest visible size |
| 314 | updateSmallestVisibleDL(); |
| 315 | |
| 316 | return true; |
| 317 | } |
| 318 | |
| 319 | //----------------------------------------------------------------------------- |
| 320 |
no test coverage detected