@@ -384,84 +384,93 @@ namespace SCIRun {
384384 primitive = GL_TRIANGLES;
385385 break ;
386386 }
387- // / Create sorted lists of Buffers for transparency in each direction of the axis
388- uint32_t * ibo_buffer = reinterpret_cast <uint32_t *>(ibo.data ->getBuffer ());
389- size_t num_triangles = ibo.data ->getBufferSize () / (sizeof (uint32_t ) * 3 );
390- Core::Geometry::Vector dir (0.0 , 0.0 , 0.0 );
391387
392- std::vector<DepthIndex> rel_depth (num_triangles);
393- for (int i = 0 ; i <= 6 ; ++i)
388+ if (mRenderSortType == RenderState::TransparencySortType::LISTS_SORT)
394389 {
395- std::string name = ibo.name ;
396- if (i == 0 )
397- {
398- int numPrimitives = ibo.data ->getBufferSize () / ibo.indexSize ;
399- iboMan.addInMemoryIBO (ibo.data ->getBuffer (), ibo.data ->getBufferSize (), primitive, primType, numPrimitives, ibo.name );
400- }
401- if (i == 1 )
402- {
403- dir = Core::Geometry::Vector (1.0 , 0.0 , 0.0 );
404- name += " X" ;
405- }
406- if (i == 2 )
407- {
408- dir = Core::Geometry::Vector (0.0 , 1.0 , 0.0 );
409- name += " Y" ;
410- }
411- if (i == 3 )
412- {
413- dir = Core::Geometry::Vector (0.0 , 0.0 , 1.0 );
414- name += " Z" ;
415- }
416- if (i == 4 )
417- {
418- dir = Core::Geometry::Vector (-1.0 , 0.0 , 0.0 );
419- name += " NegX" ;
420- }
421- if (i == 5 )
422- {
423- dir = Core::Geometry::Vector (0.0 , -1.0 , 0.0 );
424- name += " NegY" ;
425- }
426- if (i == 6 )
427- {
428- dir = Core::Geometry::Vector (0.0 , 0.0 , -1.0 );
429- name += " NegZ" ;
430- }
431- if (i > 0 )
390+ // / Create sorted lists of Buffers for transparency in each direction of the axis
391+ uint32_t * ibo_buffer = reinterpret_cast <uint32_t *>(ibo.data ->getBuffer ());
392+ size_t num_triangles = ibo.data ->getBufferSize () / (sizeof (uint32_t ) * 3 );
393+ Core::Geometry::Vector dir (0.0 , 0.0 , 0.0 );
394+
395+ std::vector<DepthIndex> rel_depth (num_triangles);
396+ for (int i = 0 ; i <= 6 ; ++i)
432397 {
433- for (size_t j = 0 ; j < num_triangles; j++)
398+ std::string name = ibo.name ;
399+ if (i == 0 )
400+ {
401+ int numPrimitives = ibo.data ->getBufferSize () / ibo.indexSize ;
402+ iboMan.addInMemoryIBO (ibo.data ->getBuffer (), ibo.data ->getBufferSize (), primitive, primType, numPrimitives, ibo.name );
403+ }
404+ if (i == 1 )
405+ {
406+ dir = Core::Geometry::Vector (1.0 , 0.0 , 0.0 );
407+ name += " X" ;
408+ }
409+ if (i == 2 )
410+ {
411+ dir = Core::Geometry::Vector (0.0 , 1.0 , 0.0 );
412+ name += " Y" ;
413+ }
414+ if (i == 3 )
415+ {
416+ dir = Core::Geometry::Vector (0.0 , 0.0 , 1.0 );
417+ name += " Z" ;
418+ }
419+ if (i == 4 )
420+ {
421+ dir = Core::Geometry::Vector (-1.0 , 0.0 , 0.0 );
422+ name += " NegX" ;
423+ }
424+ if (i == 5 )
434425 {
435- float * vertex1 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 ]));
436- Core::Geometry::Point node1 (vertex1[0 ], vertex1[1 ], vertex1[2 ]);
426+ dir = Core::Geometry::Vector (0.0 , -1.0 , 0.0 );
427+ name += " NegY" ;
428+ }
429+ if (i == 6 )
430+ {
431+ dir = Core::Geometry::Vector (0.0 , 0.0 , -1.0 );
432+ name += " NegZ" ;
433+ }
434+ if (i > 0 )
435+ {
436+ for (size_t j = 0 ; j < num_triangles; j++)
437+ {
438+ float * vertex1 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 ]));
439+ Core::Geometry::Point node1 (vertex1[0 ], vertex1[1 ], vertex1[2 ]);
437440
438- float * vertex2 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 + 1 ]));
439- Core::Geometry::Point node2 (vertex2[0 ], vertex2[1 ], vertex2[2 ]);
441+ float * vertex2 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 + 1 ]));
442+ Core::Geometry::Point node2 (vertex2[0 ], vertex2[1 ], vertex2[2 ]);
440443
441- float * vertex3 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 + 2 ]));
442- Core::Geometry::Point node3 (vertex3[0 ], vertex3[1 ], vertex3[2 ]);
444+ float * vertex3 = reinterpret_cast <float *>(vbo_buffer[nameIndex] + stride_vbo[nameIndex] * (ibo_buffer[j * 3 + 2 ]));
445+ Core::Geometry::Point node3 (vertex3[0 ], vertex3[1 ], vertex3[2 ]);
443446
444- rel_depth[j].mDepth = Core::Geometry::Dot (dir, node1) + Core::Geometry::Dot (dir, node2) + Core::Geometry::Dot (dir, node3);
445- rel_depth[j].mIndex = j;
446- }
447+ rel_depth[j].mDepth = Core::Geometry::Dot (dir, node1) + Core::Geometry::Dot (dir, node2) + Core::Geometry::Dot (dir, node3);
448+ rel_depth[j].mIndex = j;
449+ }
447450
448- std::sort (rel_depth.begin (), rel_depth.end ());
451+ std::sort (rel_depth.begin (), rel_depth.end ());
449452
450- int numPrimitives = ibo.data ->getBufferSize () / ibo.indexSize ;
453+ int numPrimitives = ibo.data ->getBufferSize () / ibo.indexSize ;
451454
452- std::vector<char > sorted_buffer (ibo.data ->getBufferSize ());
453- char * ibuffer = reinterpret_cast <char *>(ibo.data ->getBuffer ());
454- char * sbuffer = reinterpret_cast <char *>(&sorted_buffer[0 ]);
455- size_t tri_size = ibo.data ->getBufferSize () / num_triangles;
455+ std::vector<char > sorted_buffer (ibo.data ->getBufferSize ());
456+ char * ibuffer = reinterpret_cast <char *>(ibo.data ->getBuffer ());
457+ char * sbuffer = reinterpret_cast <char *>(&sorted_buffer[0 ]);
458+ size_t tri_size = ibo.data ->getBufferSize () / num_triangles;
456459
457- for (size_t j = 0 ; j < num_triangles; j++)
458- {
459- memcpy (sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
460- }
460+ for (size_t j = 0 ; j < num_triangles; j++)
461+ {
462+ memcpy (sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
463+ }
461464
462- iboMan.addInMemoryIBO (sbuffer, ibo.data ->getBufferSize (), primitive, primType, numPrimitives, name);
465+ iboMan.addInMemoryIBO (sbuffer, ibo.data ->getBufferSize (), primitive, primType, numPrimitives, name);
466+ }
463467 }
464- }
468+ }
469+ else
470+ {
471+ int numPrimitives = ibo.data ->getBufferSize () / ibo.indexSize ;
472+ iboMan.addInMemoryIBO (ibo.data ->getBuffer (), ibo.data ->getBufferSize (), primitive, primType, numPrimitives, ibo.name );
473+ }
465474 }
466475
467476 // Add default identity transform to the object globally (instead of per-pass)
@@ -481,23 +490,30 @@ namespace SCIRun {
481490 if (pass.renderType == Core::Datatypes::GeometryObject::RENDER_VBO_IBO)
482491 {
483492 addVBOToEntity (entityID, pass.vboName );
484- for ( int i = 0 ; i <= 6 ; ++i )
493+ if ( mRenderSortType == RenderState::TransparencySortType::LISTS_SORT )
485494 {
486- std::string name = pass.iboName ;
487- if (i == 1 )
488- name += " X" ;
489- if (i == 2 )
490- name += " Y" ;
491- if (i == 3 )
492- name += " Z" ;
493- if (i == 4 )
494- name += " NegX" ;
495- if (i == 5 )
496- name += " NegY" ;
497- if (i == 6 )
498- name += " NegZ" ;
499-
500- addIBOToEntity (entityID, name);
495+ for (int i = 0 ; i <= 6 ; ++i)
496+ {
497+ std::string name = pass.iboName ;
498+ if (i == 1 )
499+ name += " X" ;
500+ if (i == 2 )
501+ name += " Y" ;
502+ if (i == 3 )
503+ name += " Z" ;
504+ if (i == 4 )
505+ name += " NegX" ;
506+ if (i == 5 )
507+ name += " NegY" ;
508+ if (i == 6 )
509+ name += " NegZ" ;
510+
511+ addIBOToEntity (entityID, name);
512+ }
513+ }
514+ else
515+ {
516+ addIBOToEntity (entityID, pass.iboName );
501517 }
502518 }
503519 else
0 commit comments