Skip to content

Commit c30c310

Browse files
committed
Fixed so lists aren't created unless that rendering type is selected
1 parent cfabe6e commit c30c310

File tree

3 files changed

+125
-99
lines changed

3 files changed

+125
-99
lines changed

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

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

src/Interface/Modules/Render/ES/systems/RenderTransBasicSys.cc

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -157,18 +157,23 @@ class RenderBasicSysTrans :
157157

158158
std::vector<char> sorted_buffer(pass.front().ibo.data->getBufferSize());
159159
char* ibuffer = reinterpret_cast<char*>(pass.front().ibo.data->getBuffer());
160-
char* sbuffer = reinterpret_cast<char*>(&sorted_buffer[0]);
161-
size_t tri_size = pass.front().ibo.data->getBufferSize() / num_triangles;
162-
163-
for (size_t j = 0; j < num_triangles; j++)
160+
char* sbuffer = !sorted_buffer.empty() ? reinterpret_cast<char*>(&sorted_buffer[0]) : 0;
161+
GLuint result = ibo.front().glid;
162+
if (sbuffer && num_triangles > 0)
164163
{
165-
memcpy(sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
166-
}
164+
size_t tri_size = pass.front().ibo.data->getBufferSize() / num_triangles;
167165

168-
std::string transIBOName = pass.front().ibo.name + "trans";
166+
for (size_t j = 0; j < num_triangles; j++)
167+
{
168+
memcpy(sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
169+
}
170+
171+
std::string transIBOName = pass.front().ibo.name + "trans";
172+
result = iboMan.front().instance->addInMemoryIBO(sbuffer, pass.front().ibo.data->getBufferSize(), ibo.front().primMode, ibo.front().primType,
173+
numPrimitives, transIBOName);
174+
}
169175

170-
return iboMan.front().instance->addInMemoryIBO(sbuffer, pass.front().ibo.data->getBufferSize(), ibo.front().primMode, ibo.front().primType,
171-
numPrimitives, transIBOName);
176+
return result;
172177
}
173178

174179
void groupExecute(

src/Interface/Modules/Render/ES/systems/RenderTransColorMapSys.cc

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -154,18 +154,23 @@ class RenderColorMapSysTrans :
154154

155155
std::vector<char> sorted_buffer(pass.front().ibo.data->getBufferSize());
156156
char* ibuffer = reinterpret_cast<char*>(pass.front().ibo.data->getBuffer());
157-
char* sbuffer = reinterpret_cast<char*>(&sorted_buffer[0]);
158-
size_t tri_size = pass.front().ibo.data->getBufferSize() / num_triangles;
159-
160-
for (size_t j = 0; j < num_triangles; j++)
157+
char* sbuffer = !sorted_buffer.empty() ? reinterpret_cast<char*>(&sorted_buffer[0]) : 0;
158+
GLuint result = ibo.front().glid;
159+
if (sbuffer && num_triangles > 0)
161160
{
162-
memcpy(sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
163-
}
161+
size_t tri_size = pass.front().ibo.data->getBufferSize() / num_triangles;
164162

165-
std::string transIBOName = pass.front().ibo.name + "trans";
163+
for (size_t j = 0; j < num_triangles; j++)
164+
{
165+
memcpy(sbuffer + j * tri_size, ibuffer + rel_depth[j].mIndex * tri_size, tri_size);
166+
}
166167

167-
return iboMan.front().instance->addInMemoryIBO(sbuffer, pass.front().ibo.data->getBufferSize(), ibo.front().primMode, ibo.front().primType,
168-
numPrimitives, transIBOName);
168+
std::string transIBOName = pass.front().ibo.name + "trans";
169+
result = iboMan.front().instance->addInMemoryIBO(sbuffer, pass.front().ibo.data->getBufferSize(), ibo.front().primMode, ibo.front().primType,
170+
numPrimitives, transIBOName);
171+
}
172+
173+
return result;
169174
}
170175

171176
void groupExecute(

0 commit comments

Comments
 (0)