Skip to content

Commit 230d6cf

Browse files
committed
Merge branch 'master' into fix-transparency
Conflicts: src/Interface/Modules/Render/ES/SRInterface.cc
2 parents c30c310 + 1e511e0 commit 230d6cf

File tree

1 file changed

+48
-46
lines changed

1 file changed

+48
-46
lines changed

src/Interface/Modules/Render/ES/SRInterface.cc

Lines changed: 48 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)