1 /***********************************************************************
5 file OpenGl_togl_begin_layer_mode.c :
10 HISTORIQUE DES MODIFICATIONS :
11 --------------------------------
12 01-12-98 : CAL ; Creation. S4062. Ajout des layers.
13 02.14.100 : JR : Warnings on WNT truncations from double to float
15 ************************************************************************/
17 /*----------------------------------------------------------------------*/
28 #if defined(HAVE_MALLOC_H) || defined(WNT)
32 #include <OpenGl_tgl_all.hxx>
38 #include <InterfaceGraphic_Labels.hxx>
39 #include <InterfaceGraphic_Graphic3d.hxx>
40 #include <InterfaceGraphic_Visual3d.hxx>
42 #include <OpenGl_tsm_ws.hxx>
43 #include <OpenGl_txgl.hxx>
44 #include <OpenGl_tgl_tox.hxx>
45 #include <OpenGl_tgl_funcs.hxx>
46 #include <OpenGl_telem_filters.hxx>
47 #include <OpenGl_telem.hxx>
48 #include <OpenGl_telem_util.hxx>
49 #include <OpenGl_telem_view.hxx>
51 #include <OpenGl_TextRender.hxx>
54 #include <OpenGl_telem_attri.hxx>
55 #include <OpenGl_LightBox.hxx>
57 #include <Visual3d_Layer.hxx>
59 #include <OpenGl_Extension.hxx>
61 /*----------------------------------------------------------------------*/
72 #define IsNotModified 0
75 /*----------------------------------------------------------------------*/
80 extern GLuint linestyleBase;
81 extern GLuint fontBase;
83 #if defined(__sun) || defined (__osf__) || defined (__hp) || defined (__sgi)
85 extern PFNGLBLENDEQUATIONEXTPROC glBlendEquationOp;
87 /*----------------------------------------------------------------------*/
89 * Prototypes fonctions
92 /*----------------------------------------------------------------------*/
94 * Prototypes Private functions
97 /*----------------------------------------------------------------------*/
102 static CALL_DEF_LAYER ACLayer;
104 static GLboolean layerOpen = GL_FALSE;
105 static float layerHeight = -1.;
106 static float layerWidth = -1.;
107 static int layerPoints = 0;
108 static Tchar *layerFont = NULL;
109 static int layerType = -1;
110 static int layerFontFlag = IsModified;
111 static int layerFontType = 0;
112 static float layerRed = -1.;
113 static float layerGreen = -1.;
114 static float layerBlue = -1.;
115 static float layerFontRed = -1.;
116 static float layerFontGreen = -1.;
117 static float layerFontBlue = -1.;
120 static OSD_FontAspect FTGLLayerFontAspect = OSD_FA_Regular;
121 static Tint FTGLLayerFontHeight = 16;
122 static Tint FTGLLayerFontAscent = 0;
123 static Tint FTGLLayerFontDescent = 0;
124 static Tint FTGLLayerFontWidth = 0;
125 static Tfloat FTGLLayerFontXScale = 1.f;
126 static Tfloat FTGLLayerFontYScale = 1.f;
127 static Tchar FTGLLayerFontName[100];
128 static Tint FTGLLayerFontCurrent = 0;
130 /*----------------------------------------------------------------------*/
134 CALL_DEF_LAYER * alayer
137 //call_def_ptrLayer ptrLayer;
140 printf ("call_togl_layer2d\n");
142 alayer->ptrLayer = (call_def_ptrLayer) malloc (sizeof (CALL_DEF_PTRLAYER));
143 alayer->ptrLayer->listIndex = glGenLists (1);
147 /*----------------------------------------------------------------------*/
149 call_togl_removelayer2d
151 CALL_DEF_LAYER * alayer
154 if (alayer->ptrLayer == NULL) return;
155 if (alayer->ptrLayer->listIndex == 0) return;
157 printf ("call_togl_removelayer2d %d\n", ptrLayer->listIndex);
161 * On detruit la display-list associee au layer.
163 glDeleteLists (alayer->ptrLayer->listIndex, 1);
164 alayer->ptrLayer->listIndex = 0;
168 /*----------------------------------------------------------------------*/
170 call_togl_clear_layer2d (
171 CALL_DEF_LAYER * aLayer
174 if (aLayer->ptrLayer == NULL) return;
175 if (aLayer->ptrLayer->listIndex == 0) return;
177 printf ("call_togl_clear_layer2d %d\n", ptrLayer->listIndex);
181 * On clear la display-list associee au layer.
184 * On detruit la display-list associee au layer.
186 glDeleteLists (aLayer->ptrLayer->listIndex, 1);
187 aLayer->ptrLayer->listIndex = 0;
189 * On cree la display-list associee au layer.
191 aLayer->ptrLayer->listIndex = glGenLists (1);
192 //alayer->ptrLayer = /*(void *) */ptrLayer;
196 /*----------------------------------------------------------------------*/
198 call_togl_redraw_layer2d (
199 CALL_DEF_VIEW * aview,
200 CALL_DEF_LAYER * alayer
203 float left, right, bottom, top;
207 GLdouble modelMatrix[16], projMatrix[16];
211 GLsizei dispWidth, dispHeight;
212 GLboolean isl = IsLightOn(); /*OCC6247*/
214 if ( aview->DefBitmap.bitmap ) {
215 dispWidth = aview->DefBitmap.width;
216 dispHeight = aview->DefBitmap.height;
219 dispWidth = (GLsizei) alayer->viewport[0];
220 dispHeight = (GLsizei) alayer->viewport[1];
223 if (alayer->ptrLayer == NULL) return;
224 if (alayer->ptrLayer->listIndex == 0) return;
226 printf ("call_togl_redraw_layer2d %d\n", ptrLayer->listIndex);
227 printf ("\twindow size %f %f\n",
228 aview->DefWindow.dx, aview->DefWindow.dy);
229 printf ("\tviewport %f %f\n", (float) dispWidth, (float) dispHeight);
233 LightOff(); /*OCC6247*/
237 * On positionne la projection
239 glMatrixMode( GL_MODELVIEW );
243 glMatrixMode (GL_PROJECTION);
247 if (alayer->sizeDependent == 0)
248 glViewport (0, 0, dispWidth, dispHeight);
250 left = alayer->ortho[0],
251 right = alayer->ortho[1],
252 bottom = alayer->ortho[2],
253 top = alayer->ortho[3];
254 attach = alayer->attach;
256 printf ("\tattach %d ortho %f %f %f %f %d\n",
257 attach, left, right, bottom, top);
259 if (alayer->sizeDependent == 0)
260 ratio = (float) dispWidth/dispHeight;
262 ratio = aview->DefWindow.dx/aview->DefWindow.dy;
263 if (ratio >= 1.0) { /* fenetre horizontale */
264 delta = (float )((top - bottom)/2.0);
266 case 0: /* Aspect_TOC_BOTTOM_LEFT */
267 top = bottom + 2*delta/ratio;
269 case 1: /* Aspect_TOC_BOTTOM_RIGHT */
270 top = bottom + 2*delta/ratio;
272 case 2: /* Aspect_TOC_TOP_LEFT */
273 bottom = top - 2*delta/ratio;
275 case 3: /* Aspect_TOC_TOP_RIGHT */
276 bottom = top - 2*delta/ratio;
280 else { /* fenetre verticale */
281 delta = (float )((right - left)/2.0);
283 case 0: /* Aspect_TOC_BOTTOM_LEFT */
284 right = left + 2*delta*ratio;
286 case 1: /* Aspect_TOC_BOTTOM_RIGHT */
287 left = right - 2*delta*ratio;
289 case 2: /* Aspect_TOC_TOP_LEFT */
290 right = left + 2*delta*ratio;
292 case 3: /* Aspect_TOC_TOP_RIGHT */
293 left = right - 2*delta*ratio;
298 printf ("\tratio %f new ortho %f %f %f %f\n",
299 ratio, left, right, bottom, top);
301 glOrtho (left, right, bottom, top, -1.0, 1.0);
304 glGetIntegerv (GL_VIEWPORT, viewport);
305 glGetDoublev (GL_MODELVIEW_MATRIX, modelMatrix);
306 glGetDoublev (GL_PROJECTION_MATRIX, projMatrix);
307 printf ("viewport :\n");
309 for (i = 0; i < 4; i++)
310 printf ("%d ", viewport[i]);
312 printf ("modelMatrix :\n");
313 for (i = 0; i < 4; i++) {
315 for (j = 0; j < 4; j++)
316 printf ("%f ", modelMatrix[i*4+j]);
319 printf ("projMatrix :\n");
320 for (i = 0; i < 4; i++) {
322 for (j = 0; j < 4; j++)
323 printf ("%f ", projMatrix[i*4+j]);
329 * On trace la display-list associee au layer.
332 if (glIsList (alayer->ptrLayer->listIndex))
333 printf ("\t%d is a list\n", alayer->ptrLayer->listIndex);
335 printf ("\t%d is not a list\n", alayer->ptrLayer->listIndex);
338 GL_LIGHTING_BIT | GL_LINE_BIT | GL_POLYGON_BIT |
339 GL_DEPTH_BUFFER_BIT | GL_CURRENT_BIT);
340 glDisable (GL_DEPTH_TEST);
341 glCallList (alayer->ptrLayer->listIndex);
344 //calling dynamic render of LayerItems
345 if ( alayer->ptrLayer->layerData ) {
347 Visual3d_Layer* layer = (Visual3d_Layer*)alayer->ptrLayer->layerData;
348 layer->RenderLayerItems();
349 ACLayer.ptrLayer = NULL;
356 * On retire la projection
358 glMatrixMode (GL_PROJECTION);
361 glMatrixMode( GL_MODELVIEW );
365 * Restauration du Viewport en cas de modification
367 if (alayer->sizeDependent == 0)
369 (GLsizei) aview->DefWindow.dx,
370 (GLsizei) aview->DefWindow.dy);
375 LightOn(); /*OCC6247*/
380 /*----------------------------------------------------------------------*/
382 call_togl_begin_layer2d
384 CALL_DEF_LAYER * alayer
387 call_def_ptrLayer ptrLayer;
391 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
392 if (ptrLayer == NULL) return;
393 if (ptrLayer->listIndex == 0) return;
395 printf ("call_togl_begin_layer2d %d\n", ptrLayer->listIndex);
399 glEnable(GL_TEXTURE_2D);
400 GLboolean stat = glIsEnabled( GL_TEXTURE_2D );
402 glNewList (ptrLayer->listIndex, GL_COMPILE);
406 /*----------------------------------------------------------------------*/
408 call_togl_end_layer2d
412 call_def_ptrLayer ptrLayer;
414 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
415 if (ptrLayer == NULL) return;
416 if (ptrLayer->listIndex == 0) return;
418 printf ("call_togl_end_layer2d %d\n", ptrLayer->listIndex);
422 * On ferme la display-list associee au layer.
426 layerOpen = GL_FALSE;
428 ACLayer.ptrLayer = NULL;
431 /*----------------------------------------------------------------------*/
433 call_togl_begin_polyline2d (
436 call_def_ptrLayer ptrLayer;
438 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
439 if (ptrLayer == NULL) return;
440 if (ptrLayer->listIndex == 0) return;
442 printf ("call_togl_begin_polyline2d %d\n", ptrLayer->listIndex);
446 glBegin (GL_LINE_STRIP);
449 /*----------------------------------------------------------------------*/
451 call_togl_end_polyline2d (
454 call_def_ptrLayer ptrLayer;
456 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
457 if (ptrLayer == NULL) return;
458 if (ptrLayer->listIndex == 0) return;
460 printf ("call_togl_end_polyline2d %d\n", ptrLayer->listIndex);
466 /*----------------------------------------------------------------------*/
468 call_togl_begin_polygon2d (
471 call_def_ptrLayer ptrLayer;
473 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
474 if (ptrLayer == NULL) return;
475 if (ptrLayer->listIndex == 0) return;
477 printf ("call_togl_begin_polygon2d %d\n", ptrLayer->listIndex);
481 glBegin (GL_POLYGON);
484 /*----------------------------------------------------------------------*/
486 call_togl_end_polygon2d (
489 call_def_ptrLayer ptrLayer;
491 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
492 if (ptrLayer == NULL) return;
493 if (ptrLayer->listIndex == 0) return;
495 printf ("call_togl_end_polygon2d %d\n", ptrLayer->listIndex);
501 /*----------------------------------------------------------------------*/
508 call_def_ptrLayer ptrLayer;
510 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
511 if (ptrLayer == NULL) return;
512 if (ptrLayer->listIndex == 0) return;
514 printf ("call_togl_edge2d %d\n", ptrLayer->listIndex);
515 printf ("\tcoord %f %f\n", x, y);
519 glVertex3f (x, y, 0.);
522 /*----------------------------------------------------------------------*/
530 call_def_ptrLayer ptrLayer;
532 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
533 if (ptrLayer == NULL) return;
534 if (ptrLayer->listIndex == 0) return;
536 printf ("call_togl_draw2d %d\n", ptrLayer->listIndex);
537 printf ("\tcoord %f %f\n", x, y);
541 glVertex3f (x, y, 0.);
544 /*----------------------------------------------------------------------*/
552 call_def_ptrLayer ptrLayer;
554 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
555 if (ptrLayer == NULL) return;
556 if (ptrLayer->listIndex == 0) return;
558 printf ("call_togl_move2d %d\n", ptrLayer->listIndex);
559 printf ("\tcoord %f %f\n", x, y);
562 if (layerPoints != 0) {
563 call_togl_end_polyline2d ();
564 call_togl_begin_polyline2d ();
568 glVertex3f (x, y, 0.);
571 /*----------------------------------------------------------------------*/
573 call_togl_rectangle2d
581 call_def_ptrLayer ptrLayer;
583 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
584 if (ptrLayer == NULL) return;
585 if (ptrLayer->listIndex == 0) return;
587 printf ("call_togl_rectangle2d %d\n", ptrLayer->listIndex);
588 printf ("\trectangle %f %f %f %f\n", x, y, w, h);
591 glRectf (x, y, x + w, y + h);
594 /*----------------------------------------------------------------------*/
596 call_togl_text2d ( char *s,
601 call_def_ptrLayer ptrLayer;
603 Tint dispWidth, dispHeight;
605 GLdouble objx1, objy1, objz1;
607 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
608 if (ptrLayer == NULL) return;
609 if (ptrLayer->listIndex == 0) return;
611 printf ("call_togl_text2d %d\n", ptrLayer->listIndex);
612 printf ("\ttext %s %f %f %f\n", s, x, y, height);
615 OpenGl_TextRender* textRender=OpenGl_TextRender::instance();
617 FTGLLayerFontCurrent = textRender->FindFont( FTGLLayerFontName,
621 FTGLLayerFontYScale );
628 * On traite les differents types d'affichage de texte
630 switch (layerFontType) {
631 case 0 : /* Aspect_TODT_Normal */
633 printf ("---------------------\n");
634 printf ("texte normal %f %f\n", objx1, objy1);
637 textRender->RenderText(s , fontBase, 1, (float )objx1, (float )objy1, 0.f );
640 case 1 : /* Aspect_TODT_SubTitle */
643 printf ("---------------------\n");
644 printf ("texte subtitle %f %f\n", objx1, objy1);
646 glGetIntegerv (GL_VIEWPORT, viewport);
647 glGetDoublev (GL_MODELVIEW_MATRIX, modelMatrix);
648 glGetDoublev (GL_PROJECTION_MATRIX, projMatrix);
650 printf ("viewport :\n");
652 for (i = 0; i < 4; i++)
653 printf ("%d ", viewport[i]);
655 printf ("modelMatrix :\n");
656 for (i = 0; i < 4; i++) {
658 for (j = 0; j < 4; j++)
659 printf ("%f ", modelMatrix[i*4+j]);
662 printf ("projMatrix :\n");
663 for (i = 0; i < 4; i++) {
665 for (j = 0; j < 4; j++)
666 printf ("%f ", projMatrix[i*4+j]);
671 * dimensionString("Methode cadre", &sWidth, &sAscent, &sDescent);
677 objx2 = objx1; objy2 = objy1; objz2 = objz1;
678 objx3 = objx1; objy3 = objy1; objz3 = objz1;
679 objx4 = objx1; objy4 = objy1; objz4 = objz1;
680 objx5 = objx1; objy5 = objy1; objz5 = objz1;
682 status = gluProject (objx1, objy1, objz1,
683 modelMatrix, projMatrix, viewport,
684 &winx1, &winy1, &winz1);
687 winy2 = winy1-sDescent;
688 winz2 = winz1+0.00001;
689 status = gluUnProject (winx2, winy2, winz2,
690 modelMatrix, projMatrix, viewport,
691 &objx2, &objy2, &objz2);
693 winx2 = winx1 + sWidth;
694 winy2 = winy1-sDescent;
695 winz2 = winz1+0.00001; /* il vaut mieux F+B / 1000000 ? */
696 status = gluUnProject (winx2, winy2, winz2,
697 modelMatrix, projMatrix, viewport,
698 &objx3, &objy3, &objz3);
700 winx2 = winx1 + sWidth;
701 winy2 = winy1 + sAscent;
702 winz2 = winz1+0.00001;
703 status = gluUnProject (winx2, winy2, winz2,
704 modelMatrix, projMatrix, viewport,
705 &objx4, &objy4, &objz4);
708 winy2 = winy1+ sAscent;
709 winz2 = winz1+0.00001;
710 status = gluUnProject (winx2, winy2, winz2,
711 modelMatrix, projMatrix, viewport,
712 &objx5, &objy5, &objz5);
714 glColor3f (layerFontRed, layerFontGreen, layerFontBlue);
716 glVertex3d(objx2, objy2, objz2);
717 glVertex3d(objx3, objy3, objz3);
718 glVertex3d(objx4, objy4, objz4);
719 glVertex3d(objx5, objy5, objz5);
721 glColor3f (layerRed, layerGreen, layerBlue);
725 textRender->RenderText(s, fontBase, 1, (float )objx1, (float )objy1, 0.f);
728 case 2 : /* Aspect_TODT_Dekale */
731 printf ("---------------------\n");
732 printf ("texte dekale %f %f\n", objx1, objy1);
734 glGetIntegerv (GL_VIEWPORT, viewport);
735 glGetDoublev (GL_MODELVIEW_MATRIX, modelMatrix);
736 glGetDoublev (GL_PROJECTION_MATRIX, projMatrix);
738 printf ("viewport :\n");
740 for (i = 0; i < 4; i++)
741 printf ("%d ", viewport[i]);
743 printf ("modelMatrix :\n");
744 for (i = 0; i < 4; i++) {
746 for (j = 0; j < 4; j++)
747 printf ("%f ", modelMatrix[i*4+j]);
750 printf ("projMatrix :\n");
751 for (i = 0; i < 4; i++) {
753 for (j = 0; j < 4; j++)
754 printf ("%f ", projMatrix[i*4+j]);
758 status = gluProject (objx1, objy1, objz1,
759 modelMatrix, projMatrix, viewport,
760 &winx1, &winy1, &winz1);
762 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
766 winz2 = winz1+0.00001;
767 status = gluUnProject (winx2, winy2, winz2,
768 modelMatrix, projMatrix, viewport,
769 &objx2, &objy2, &objz2);
771 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
773 glColor3f (layerFontRed, layerFontGreen, layerFontBlue);
776 OpenGl_TextRender* textRender=OpenGl_TextRender::instance();
777 textRender->RenderText(s, fontBase, 1, objx2, objy2, 0.f);
782 winz2 = winz1+0.00001;
783 status = gluUnProject (winx2, winy2, winz2,
784 modelMatrix, projMatrix, viewport,
785 &objx2, &objy2, &objz2);
787 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
790 textRender->RenderText(s, fontBase, 1, objx2, objy2, 0.f);
795 winz2 = winz1+0.00001;
796 status = gluUnProject (winx2, winy2, winz2,
797 modelMatrix, projMatrix, viewport,
798 &objx2, &objy2, &objz2);
800 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
804 textRender->RenderText(s, fontBase, 1, objx2, objy2, 0.f);
808 winz2 = winz1+0.00001;
809 status = gluUnProject (winx2, winy2, winz2,
810 modelMatrix, projMatrix, viewport,
811 &objx2, &objy2, &objz2);
813 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
816 textRender->RenderText(s, fontBase, 1, objx2, objy2, 0.f);
818 glColor3f (layerRed, layerGreen, layerBlue);
821 textRender->RenderText(s, fontBase, 1, (float )objx1, (float )objy1, 0.f);
824 printf ("---------------------\n");
827 case 3 : /* Aspect_TODT_Blend */
831 if ( (PFNGLBLENDEQUATIONEXTPROC)glBlendEquationOp == (PFNGLBLENDEQUATIONEXTPROC)INVALID_EXT_FUNCTION_PTR )
833 if(QueryExtension("GL_EXT_blend_logic_op"))
834 glBlendEquationOp = (PFNGLBLENDEQUATIONEXTPROC)glXGetProcAddress((GLubyte*)"glBlendEquationOp");
836 glBlendEquationOp = NULL;
839 if ( glBlendEquationOp )
844 glBlendEquationOp(GL_LOGIC_OP);
846 glBlendEquation(GL_LOGIC_OP);
849 glColor3f (layerRed, layerGreen, layerBlue);
850 glRasterPos2f (objx1, objy1);
851 glDisable (GL_BLEND);
854 glColor3f (layerRed, layerGreen, layerBlue);
856 textRender->RenderText(s, fontBase, 1, (float )objx1, (float )objy1, 0.f);
863 printf ("---------------------\n");
864 printf ("texte blend %f %f\n", objx1, objy1);
867 textRender->RenderText(s, fontBase, 1, (float )objx1, (float )objy1, 0.f);
870 printf ("---------------------\n");
887 call_def_ptrLayer ptrLayer;
889 Tint dispWidth, dispHeight;
893 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
894 if (ptrLayer == NULL) return;
895 if (ptrLayer->listIndex == 0) return;
898 if ( FTGLLayerFontHeight != height || layerFontFlag == IsModified || FTGLLayerFontCurrent == 0 ) {
899 layerFontFlag = IsNotModified;
900 FTGLLayerFontHeight = height;
901 OpenGl_TextRender* textRender = OpenGl_TextRender::instance();
902 FTGLLayerFontCurrent = textRender -> FindFont(FTGLLayerFontName, FTGLLayerFontAspect, FTGLLayerFontHeight);
903 textRender -> StringSize(s, &FTGLLayerFontWidth, &FTGLLayerFontAscent, &FTGLLayerFontDescent);
907 *width = (float) FTGLLayerFontWidth;
908 *ascent = (float) FTGLLayerFontAscent;
909 *descent = (float) FTGLLayerFontDescent;
913 /*----------------------------------------------------------------------*/
922 call_def_ptrLayer ptrLayer;
924 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
925 if (ptrLayer == NULL) return;
926 if (ptrLayer->listIndex == 0) return;
928 printf ("call_togl_set_color %d\n", ptrLayer->listIndex);
929 printf ("\tcolor %f %f %f\n", r, g, b);
938 /*----------------------------------------------------------------------*/
940 call_togl_set_transparency
945 call_def_ptrLayer ptrLayer;
947 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
948 if (ptrLayer == NULL) return;
949 if (ptrLayer->listIndex == 0) return;
951 printf ("call_togl_set_transparency %d\n", ptrLayer->listIndex);
952 printf ("\ttransparency %f\n", a);
956 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
957 glColor4f (layerRed, layerGreen, layerBlue, a);
960 /*----------------------------------------------------------------------*/
962 call_togl_unset_transparency
966 call_def_ptrLayer ptrLayer;
968 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
969 if (ptrLayer == NULL) return;
970 if (ptrLayer->listIndex == 0) return;
972 printf ("call_togl_set_untransparency %d\n", ptrLayer->listIndex);
975 glDisable (GL_BLEND);
978 /*----------------------------------------------------------------------*/
980 call_togl_set_line_attributes
986 call_def_ptrLayer ptrLayer;
988 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
989 if (ptrLayer == NULL) return;
990 if (ptrLayer->listIndex == 0) return;
992 printf ("call_togl_set_line_attributes %d\n", ptrLayer->listIndex);
993 printf ("\ttype, width %d %f\n", type, width);
995 if (layerType != type) {
997 if (layerType == 0) { /* TOL_SOLID */
998 glDisable (GL_LINE_STIPPLE);
1002 glCallList (linestyleBase+layerType);
1003 glEnable (GL_LINE_STIPPLE);
1007 if (layerWidth != width) {
1009 glLineWidth ((GLfloat) layerWidth);
1013 /*----------------------------------------------------------------------*/
1015 call_togl_set_text_attributes
1024 call_def_ptrLayer ptrLayer;
1026 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
1027 if (ptrLayer == NULL) return;
1028 if (ptrLayer->listIndex == 0) return;
1030 printf ("call_togl_set_text_attributes %d\n", ptrLayer->listIndex);
1031 printf ("\tfont %s type %ld\n", font, type);
1032 printf ("\tcolor %f %f %f\n", r, g, b);
1035 if ( strcmp( (char*)FTGLLayerFontName, (char*)font ) != 0 ) {
1036 FTGLLayerFontName[0] = '\0';
1037 strcat( (char*)FTGLLayerFontName, (char*)font );
1038 FTGLLayerFontAspect = OSD_FA_Regular;
1040 OpenGl_TextRender* textRender = OpenGl_TextRender::instance();
1041 FTGLLayerFontCurrent = textRender -> FindFont(FTGLLayerFontName, FTGLLayerFontAspect, FTGLLayerFontHeight);
1043 layerFontType = type;
1047 layerFontFlag = IsModified;
1053 void call_togl_set_text_attributes( Tchar* font,
1055 OSD_FontAspect aspect,
1060 call_def_ptrLayer ptrLayer;
1062 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
1063 if (ptrLayer == NULL) return;
1064 if (ptrLayer->listIndex == 0) return;
1067 printf ("call_togl_set_text_attributes %d\n", ptrLayer->listIndex);
1068 printf ("\tfont %s type \n", font);
1069 printf ("\tcolor %f %f %f\n", r, g, b);
1072 * On gere le type de font (ASCII !)
1074 if ( strcmp( (char*)FTGLLayerFontName, (char*)font ) != 0 &&
1075 FTGLLayerFontAspect == aspect &&
1076 FTGLLayerFontHeight == height
1079 FTGLLayerFontName[0] = '\0';
1080 strcat( (char*)FTGLLayerFontName, (char*)font );
1081 FTGLLayerFontHeight = height;
1082 FTGLLayerFontAspect = aspect;
1083 layerFontFlag = IsModified;
1084 FTGLLayerFontXScale = FTGLLayerFontYScale = 1.f;
1085 OpenGl_TextRender* textRender = OpenGl_TextRender::instance();
1086 FTGLLayerFontCurrent = textRender -> FindFont(FTGLLayerFontName, FTGLLayerFontAspect, FTGLLayerFontHeight);