@@ -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
366376void 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