@@ -344,46 +344,46 @@ namespace SCIRun {
344344
345345 // Add index buffer objects.
346346 nameIndex = 0 ;
347- for (auto it = obj->mIBOs .cbegin (); it != obj->mIBOs .cend (); ++it, ++nameIndex)
348- {
349- const Core::Datatypes::GeometryObject::SpireIBO& ibo = *it;
350- GLenum primType = GL_UNSIGNED_SHORT;
351- switch (ibo.indexSize )
352- {
353- case 1 : // 8-bit
354- primType = GL_UNSIGNED_BYTE;
355- break ;
356-
357- case 2 : // 16-bit
358- primType = GL_UNSIGNED_SHORT;
359- break ;
360-
361- case 4 : // 32-bit
362- primType = GL_UNSIGNED_INT;
363- break ;
364-
365- default :
366- primType = GL_UNSIGNED_INT;
367- throw std::invalid_argument (" Unable to determine index buffer depth." );
368- break ;
369- }
347+ for (auto it = obj->mIBOs .cbegin (); it != obj->mIBOs .cend (); ++it, ++nameIndex)
348+ {
349+ const Core::Datatypes::GeometryObject::SpireIBO& ibo = *it;
350+ GLenum primType = GL_UNSIGNED_SHORT;
351+ switch (ibo.indexSize )
352+ {
353+ case 1 : // 8-bit
354+ primType = GL_UNSIGNED_BYTE;
355+ break ;
356+
357+ case 2 : // 16-bit
358+ primType = GL_UNSIGNED_SHORT;
359+ break ;
360+
361+ case 4 : // 32-bit
362+ primType = GL_UNSIGNED_INT;
363+ break ;
364+
365+ default :
366+ primType = GL_UNSIGNED_INT;
367+ throw std::invalid_argument (" Unable to determine index buffer depth." );
368+ break ;
369+ }
370370
371- GLenum primitive = GL_TRIANGLES;
372- switch (ibo.prim )
373- {
374- case Core::Datatypes::GeometryObject::SpireIBO::POINTS:
375- primitive = GL_POINTS;
376- break ;
377-
378- case Core::Datatypes::GeometryObject::SpireIBO::LINES:
379- primitive = GL_LINES;
380- break ;
381-
382- case Core::Datatypes::GeometryObject::SpireIBO::TRIANGLES:
383- default :
384- primitive = GL_TRIANGLES;
385- break ;
386- }
371+ GLenum primitive = GL_TRIANGLES;
372+ switch (ibo.prim )
373+ {
374+ case Core::Datatypes::GeometryObject::SpireIBO::POINTS:
375+ primitive = GL_POINTS;
376+ break ;
377+
378+ case Core::Datatypes::GeometryObject::SpireIBO::LINES:
379+ primitive = GL_LINES;
380+ break ;
381+
382+ case Core::Datatypes::GeometryObject::SpireIBO::TRIANGLES:
383+ default :
384+ primitive = GL_TRIANGLES;
385+ break ;
386+ }
387387
388388 if (mRenderSortType == RenderState::TransparencySortType::LISTS_SORT)
389389 {
@@ -454,15 +454,17 @@ namespace SCIRun {
454454
455455 std::vector<char > sorted_buffer (ibo.data ->getBufferSize ());
456456 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;
457+ char * sbuffer = !sorted_buffer.empty () ? reinterpret_cast <char *>(&sorted_buffer[0 ]) : 0 ;
459458
460- for ( size_t j = 0 ; j < num_triangles; j++ )
459+ if (sbuffer && num_triangles > 0 )
461460 {
462- memcpy (sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
461+ size_t tri_size = ibo.data ->getBufferSize () / num_triangles;
462+ for (size_t j = 0 ; j < num_triangles; j++)
463+ {
464+ memcpy (sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
465+ }
466+ iboMan.addInMemoryIBO (sbuffer, ibo.data ->getBufferSize (), primitive, primType, numPrimitives, name);
463467 }
464-
465- iboMan.addInMemoryIBO (sbuffer, ibo.data ->getBufferSize (), primitive, primType, numPrimitives, name);
466468 }
467469 }
468470 }
@@ -471,7 +473,7 @@ namespace SCIRun {
471473 int numPrimitives = ibo.data ->getBufferSize () / ibo.indexSize ;
472474 iboMan.addInMemoryIBO (ibo.data ->getBuffer (), ibo.data ->getBufferSize (), primitive, primType, numPrimitives, ibo.name );
473475 }
474- }
476+ }
475477
476478 // Add default identity transform to the object globally (instead of per-pass)
477479 glm::mat4 xform;
0 commit comments