@@ -378,7 +378,7 @@ namespace SCIRun {
378378 Core::Geometry::Vector dir (0.0 , 0.0 , 0.0 );
379379
380380 std::vector<DepthIndex> rel_depth (num_triangles);
381- for (int i = 0 ; i < 6 ; ++i)
381+ for (int i = 0 ; i <= 6 ; ++i)
382382 {
383383 std::string name = ibo.name ;
384384
@@ -387,62 +387,69 @@ namespace SCIRun {
387387 dir = Core::Geometry::Vector (1.0 , 0.0 , 0.0 );
388388 name += " X" ;
389389 }
390- else if (i == 1 )
390+ if (i == 1 )
391391 {
392392 dir = Core::Geometry::Vector (0.0 , 1.0 , 0.0 );
393393 name += " Y" ;
394394 }
395- else if (i == 2 )
395+ if (i == 2 )
396396 {
397397 dir = Core::Geometry::Vector (0.0 , 0.0 , 1.0 );
398398 name += " Z" ;
399399 }
400- else if (i == 3 )
400+ if (i == 3 )
401401 {
402402 dir = Core::Geometry::Vector (-1.0 , 0.0 , 0.0 );
403403 name += " NegX" ;
404404 }
405- else if (i == 4 )
405+ if (i == 4 )
406406 {
407407 dir = Core::Geometry::Vector (0.0 , -1.0 , 0.0 );
408408 name += " NegY" ;
409409 }
410- else if (i == 5 )
410+ if (i == 5 )
411411 {
412412 dir = Core::Geometry::Vector (0.0 , 0.0 , -1.0 );
413413 name += " NegZ" ;
414414 }
415-
416- for (size_t j = 0 ; j < num_triangles; j++)
415+ if (i < 6 )
417416 {
418- float * vertex1 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 ]));
419- Core::Geometry::Point node1 (vertex1[0 ], vertex1[1 ], vertex1[2 ]);
417+ for (size_t j = 0 ; j < num_triangles; j++)
418+ {
419+ float * vertex1 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 ]));
420+ Core::Geometry::Point node1 (vertex1[0 ], vertex1[1 ], vertex1[2 ]);
420421
421- float * vertex2 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 + 1 ]));
422- Core::Geometry::Point node2 (vertex2[0 ], vertex2[1 ], vertex2[2 ]);
422+ float * vertex2 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 + 1 ]));
423+ Core::Geometry::Point node2 (vertex2[0 ], vertex2[1 ], vertex2[2 ]);
423424
424- float * vertex3 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 + 2 ]));
425- Core::Geometry::Point node3 (vertex3[0 ], vertex3[1 ], vertex3[2 ]);
425+ float * vertex3 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 + 2 ]));
426+ Core::Geometry::Point node3 (vertex3[0 ], vertex3[1 ], vertex3[2 ]);
426427
427- rel_depth[j].mDepth = Core::Geometry::Dot (dir, node1) + Core::Geometry::Dot (dir, node2) + Core::Geometry::Dot (dir, node3);
428- rel_depth[j].mIndex = j;
429- }
428+ rel_depth[j].mDepth = Core::Geometry::Dot (dir, node1) + Core::Geometry::Dot (dir, node2) + Core::Geometry::Dot (dir, node3);
429+ rel_depth[j].mIndex = j;
430+ }
431+
432+ std::sort (rel_depth.begin (), rel_depth.end ());
430433
431- std::sort (rel_depth. begin (), rel_depth. end ()) ;
434+ int numPrimitives = ibo. data -> getBufferSize () / ibo. indexSize ;
432435
433- int numPrimitives = ibo.data ->getBufferSize () / ibo.indexSize ;
436+ std::vector<char > sorted_buffer (ibo.data ->getBufferSize ());
437+ char * ibuffer = reinterpret_cast <char *>(ibo.data ->getBuffer ());
438+ char * sbuffer = reinterpret_cast <char *>(&sorted_buffer[0 ]);
439+ size_t tri_size = ibo.data ->getBufferSize () / num_triangles;
434440
435- std::vector< char > sorted_buffer (ibo. data -> getBufferSize ());
436- char * ibuffer = reinterpret_cast < char *>(ibo. data -> getBuffer ());
437- char * sbuffer = reinterpret_cast < char *>(&sorted_buffer[ 0 ] );
438- size_t tri_size = ibo. data -> getBufferSize () / num_triangles;
441+ for ( size_t j = 0 ; j < num_triangles; j++)
442+ {
443+ memcpy ( sbuffer + j * tri_size, ibuffer + rel_depth[j]. mIndex * tri_size, tri_size );
444+ }
439445
440- for (size_t j = 0 ; j < num_triangles; j++)
446+ iboMan.addInMemoryIBO (sbuffer, ibo.data ->getBufferSize (), primitive, primType, numPrimitives, name);
447+ }
448+ else
441449 {
442- memcpy (sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
450+ int numPrimitives = ibo.data ->getBufferSize () / ibo.indexSize ;
451+ iboMan.addInMemoryIBO (ibo.data ->getBuffer (), ibo.data ->getBufferSize (), primitive, primType, numPrimitives, ibo.name );
443452 }
444-
445- iboMan.addInMemoryIBO (sbuffer, ibo.data ->getBufferSize (), primitive, primType, numPrimitives, name);
446453 }
447454 }
448455
@@ -464,7 +471,7 @@ namespace SCIRun {
464471 {
465472 // reorderIBO(pass);
466473 addVBOToEntity (entityID, pass.vboName );
467- for (int i = 0 ; i < 6 ; ++i)
474+ for (int i = 0 ; i <= 6 ; ++i)
468475 {
469476 std::string name = pass.iboName ;
470477 if (i == 0 )
0 commit comments