diff --git a/source/MRMesh/MRObjectLabel.cpp b/source/MRMesh/MRObjectLabel.cpp index 2a12eba64984..7adddae754e2 100644 --- a/source/MRMesh/MRObjectLabel.cpp +++ b/source/MRMesh/MRObjectLabel.cpp @@ -157,6 +157,8 @@ void ObjectLabel::setDefaultColors_() { setFrontColor( SceneColors::get( SceneColors::Labels ) ); setFrontColor( SceneColors::get( SceneColors::Labels ), false ); + setSourcePointColor( SceneColors::get( SceneColors::Labels ) ); + setLeaderLineColor( SceneColors::get( SceneColors::Labels ) ); } void ObjectLabel::buildMesh_() diff --git a/source/MRViewer/MRRenderLabelObject.cpp b/source/MRViewer/MRRenderLabelObject.cpp index 856397ff1587..b49fbdebe16c 100644 --- a/source/MRViewer/MRRenderLabelObject.cpp +++ b/source/MRViewer/MRRenderLabelObject.cpp @@ -144,6 +144,21 @@ void RenderLabelObject::renderSourcePoint_( const RenderParams& renderParams ) c GL_EXEC( glUniform1ui( glGetUniformLocation( shader, "primBucketSize" ), 1 ) ); + // Selection + GL_EXEC( glActiveTexture( GL_TEXTURE0 ) ); + GL_EXEC( glBindTexture( GL_TEXTURE_2D, srcIndicesSelectionTexId_ ) ); + if ( dirtySrc_ ) + { + GL_EXEC( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT ) ); + GL_EXEC( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT ) ); + GL_EXEC( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ) ); + GL_EXEC( glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ) ); + GL_EXEC( glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ) ); + unsigned selTexture = 0; + GL_EXEC( glTexImage2D( GL_TEXTURE_2D, 0, GL_R32UI, 1, 1, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, &selTexture ) ); + } + GL_EXEC( glUniform1i( glGetUniformLocation( shader, "selection" ), 0 ) ); + getViewerInstance().incrementThisFrameGLPrimitivesCount( Viewer::GLPrimitivesType::PointElementsNum, pointIndices.size() ); #ifdef __EMSCRIPTEN__ @@ -335,6 +350,7 @@ void RenderLabelObject::initBuffers_() GL_EXEC( glBindVertexArray( srcArrayObjId_ ) ); GL_EXEC( glGenBuffers( 1, &srcVertPosBufferObjId_ ) ); GL_EXEC( glGenBuffers( 1, &srcIndicesBufferObjId_ ) ); + GL_EXEC( glGenTextures( 1, &srcIndicesSelectionTexId_ ) ); GL_EXEC( glGenVertexArrays( 1, &bgArrayObjId_ ) ); GL_EXEC( glBindVertexArray( bgArrayObjId_ ) ); @@ -364,6 +380,7 @@ void RenderLabelObject::freeBuffers_() GL_EXEC( glDeleteVertexArrays( 1, &srcArrayObjId_ ) ); GL_EXEC( glDeleteBuffers( 1, &srcVertPosBufferObjId_ ) ); GL_EXEC( glDeleteBuffers( 1, &srcIndicesBufferObjId_ ) ); + GL_EXEC( glDeleteTextures( 1, &srcIndicesSelectionTexId_ ) ); GL_EXEC( glDeleteVertexArrays( 1, &bgArrayObjId_ ) ); GL_EXEC( glDeleteBuffers( 1, &bgVertPosBufferObjId_ ) ); diff --git a/source/MRViewer/MRRenderLabelObject.h b/source/MRViewer/MRRenderLabelObject.h index 7b8aea5d0924..f4404d2486f0 100644 --- a/source/MRViewer/MRRenderLabelObject.h +++ b/source/MRViewer/MRRenderLabelObject.h @@ -26,6 +26,7 @@ class RenderLabelObject : public IRenderObject GLuint srcArrayObjId_{ 0 }; GLuint srcVertPosBufferObjId_{ 0 }; GLuint srcIndicesBufferObjId_{ 0 }; + GLuint srcIndicesSelectionTexId_{ 0 }; GLuint bgArrayObjId_{ 0 }; GLuint bgVertPosBufferObjId_{ 0 };