Skip to content

Commit b9430c2

Browse files
committed
[engine] handle line index layer picking render mode.
1 parent 4a7e4a1 commit b9430c2

1 file changed

Lines changed: 35 additions & 18 deletions

File tree

src/Engine/Data/Mesh.cpp

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,22 @@ void GeometryDisplayable::loadGeometry( Core::Geometry::MultiIndexedGeometry&& m
168168
m_geom = std::move( mesh );
169169
setupCoreMeshObservers();
170170

171-
/// \todo check if other layer ? at least triangulate
172-
if ( m_geom.containsLayer( Core::Geometry::TriangleIndexLayer::staticSemanticName ) ) {
171+
if ( m_geom.containsLayer( Core::Geometry::LineIndexLayer::staticSemanticName ) ) {
172+
auto [key, layer] =
173+
m_geom.getFirstLayerOccurrence( Core::Geometry::LineIndexLayer::staticSemanticName );
174+
m_activeLayerKey = key;
175+
setRenderMode( AttribArrayDisplayable::RM_LINES );
176+
177+
auto ok = addRenderLayer( key, AttribArrayDisplayable::RM_LINES );
178+
if ( !ok ) { LOG( logERROR ) << "loadGeometry could not add layer"; }
179+
}
180+
else if ( m_geom.containsLayer( Core::Geometry::TriangleIndexLayer::staticSemanticName ) ) {
173181
auto [key, layer] = m_geom.getFirstLayerOccurrence(
174182
Core::Geometry::TriangleIndexLayer::staticSemanticName );
175183
m_activeLayerKey = key;
176184
addRenderLayer( key, AttribArrayDisplayable::RM_TRIANGLES );
177185
}
178186
else if ( m_geom.containsLayer( Core::Geometry::QuadIndexLayer::staticSemanticName ) ) {
179-
std::cerr << "get quad layer\n";
180187
auto [key, layer] =
181188
m_geom.getFirstLayerOccurrence( Core::Geometry::QuadIndexLayer::staticSemanticName );
182189

@@ -211,6 +218,9 @@ void GeometryDisplayable::loadGeometry( Core::Geometry::MultiIndexedGeometry&& m
211218
addRenderLayer( triangleKey, AttribArrayDisplayable::RM_TRIANGLES );
212219
}
213220
}
221+
else {
222+
LOG( logERROR ) << "no valid layer found";
223+
}
214224
m_isDirty = true;
215225
}
216226

@@ -365,23 +375,30 @@ void GeometryDisplayable::render( const ShaderProgram* prog ) {
365375

366376
void GeometryDisplayable::render( const ShaderProgram* prog, const LayerKeyType& key ) {
367377
GL_CHECK_ERROR;
368-
if ( m_geomLayers[key].vao ) {
369-
m_geomLayers[key].vao->bind();
370-
GL_CHECK_ERROR;
371-
autoVertexAttribPointer( prog, key );
372-
GL_CHECK_ERROR;
373-
374-
m_geomLayers[key].vao->drawElements( static_cast<GLenum>( m_geomLayers[key].renderMode ),
375-
GLsizei( m_geomLayers[key].indices.numElements ),
376-
GL_UNSIGNED_INT,
377-
nullptr );
378-
GL_CHECK_ERROR;
379-
m_geomLayers[key].vao->unbind();
380-
GL_CHECK_ERROR;
378+
if ( m_geomLayers.find( key ) != m_geomLayers.end() ) {
379+
if ( m_geomLayers[key].vao ) {
380+
m_geomLayers[key].vao->bind();
381+
GL_CHECK_ERROR;
382+
autoVertexAttribPointer( prog, key );
383+
GL_CHECK_ERROR;
384+
LOG( logERROR ) << "draw " << *key.first.begin() << " [" << key.second << "] "
385+
<< prog->getBasicConfiguration().getName();
386+
m_geomLayers[key].vao->drawElements(
387+
static_cast<GLenum>( m_geomLayers[key].renderMode ),
388+
GLsizei( m_geomLayers[key].indices.numElements ),
389+
GL_UNSIGNED_INT,
390+
nullptr );
391+
GL_CHECK_ERROR;
392+
m_geomLayers[key].vao->unbind();
393+
GL_CHECK_ERROR;
394+
}
395+
else {
396+
LOG( logERROR ) << "try to draw an invalid layer " << *key.first.begin() << " ["
397+
<< key.second << "]\n";
398+
}
381399
}
382400
else {
383-
LOG( logERROR ) << "try to draw an invalid layer " << *key.first.begin() << " ["
384-
<< key.second << "]\n";
401+
LOG( logERROR ) << "layer was not added as a render layer";
385402
}
386403
}
387404

0 commit comments

Comments
 (0)