OCC22354 Bug in Overlay Text rendering
[occt.git] / src / OpenGl / OpenGl_TextRender.cxx
index d25d4de..af90722 100755 (executable)
@@ -269,6 +269,8 @@ void OpenGl_TextRender::RenderText ( char* str, GLuint base, int is2d, GLfloat x
   GLdouble xdis = 0., ydis = 0.;
   GLint renderMode;  
 
+  // FTFont changes texture state when it renders and computes size for the text
+  glPushAttrib(GL_TEXTURE_BIT);
   StringSize(str, &widthFont, &ascentFont, &descentFont );
 
   GLdouble identityMatrix[4][4] = 
@@ -298,6 +300,12 @@ void OpenGl_TextRender::RenderText ( char* str, GLuint base, int is2d, GLfloat x
   TsmGetAttri( 1, &keyZoom );
   zoom = keyZoom.data.ldata;
 
+  CMN_KEY keyfontName;
+  keyfontName.id = TelTextFont;//This flag responding about TextFontName
+  TsmGetAttri( 1, &keyfontName );
+  char *fontName = new char[strlen((char*)keyfontName.data.pdata) + 1];
+  strcpy(fontName,(char*)keyfontName.data.pdata);
+
   OpenGl_TextRender* textRender = OpenGl_TextRender::instance(); 
   int vh = 2 ;
   int vv = 2 ;
@@ -335,8 +343,10 @@ void OpenGl_TextRender::RenderText ( char* str, GLuint base, int is2d, GLfloat x
   OpenGl_FontMgr* mgr = OpenGl_FontMgr::instance();
 
   const FTFont* fnt = mgr->fontById( curFont );
-  if ( !fnt )
+  if ( !fnt ) {
+    glPopAttrib();
     return; 
+  }
 
   float export_h = 1.;
 
@@ -392,24 +402,19 @@ void OpenGl_TextRender::RenderText ( char* str, GLuint base, int is2d, GLfloat x
   if ( renderMode == GL_FEEDBACK ) 
   {
 #ifdef HAVE_GL2PS
-    CMN_KEY keyfontName;
-    keyfontName.id = TelTextFont;//This flag responding about TextFontName
-    TsmGetAttri( 1, &keyfontName );
-    char *fontName = new char[strlen((char*)keyfontName.data.pdata) + 1];
-    strcpy(fontName,(char*)keyfontName.data.pdata);
-
     export_h = (GLdouble)fnt->FaceSize() / export_h;
     int aligment = alignmentforgl2ps( vh, vv );
     glPopMatrix();
     ExportText( str, fontName, export_h, angle, aligment, x, y, z, is2d!=0 );
-    delete [] fontName;
 #endif
   }
   else
   {
-    mgr->render_text( curFont, str );
+    mgr->render_text( curFont, str, is2d );
     glPopMatrix();
   }
+  glPopAttrib();
+  delete [] fontName;
   return;
 
 }