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.;
119 static OSD_FontAspect FTGLLayerFontAspect = OSD_FA_Regular;
120 static Tint FTGLLayerFontHeight = 16;
121 static Tint FTGLLayerFontAscent = 0;
122 static Tint FTGLLayerFontDescent = 0;
123 static Tint FTGLLayerFontWidth = 0;
124 static Tfloat FTGLLayerFontXScale = 1.f;
125 static Tfloat FTGLLayerFontYScale = 1.f;
126 static Tchar FTGLLayerFontName[100];
127 static Tint FTGLLayerFontCurrent = 0;
129 /*----------------------------------------------------------------------*/
133 CALL_DEF_LAYER * alayer
136 //call_def_ptrLayer ptrLayer;
139 printf ("call_togl_layer2d\n");
141 alayer->ptrLayer = (call_def_ptrLayer) malloc (sizeof (CALL_DEF_PTRLAYER));
142 alayer->ptrLayer->listIndex = glGenLists (1);
146 /*----------------------------------------------------------------------*/
148 call_togl_removelayer2d
150 CALL_DEF_LAYER * alayer
153 if (alayer->ptrLayer == NULL) return;
154 if (alayer->ptrLayer->listIndex == 0) return;
156 printf ("call_togl_removelayer2d %d\n", ptrLayer->listIndex);
160 * On detruit la display-list associee au layer.
162 glDeleteLists (alayer->ptrLayer->listIndex, 1);
163 alayer->ptrLayer->listIndex = 0;
167 /*----------------------------------------------------------------------*/
169 call_togl_clear_layer2d (
170 CALL_DEF_LAYER * aLayer
173 if (aLayer->ptrLayer == NULL) return;
174 if (aLayer->ptrLayer->listIndex == 0) return;
176 printf ("call_togl_clear_layer2d %d\n", ptrLayer->listIndex);
180 * On clear la display-list associee au layer.
183 * On detruit la display-list associee au layer.
185 glDeleteLists (aLayer->ptrLayer->listIndex, 1);
186 aLayer->ptrLayer->listIndex = 0;
188 * On cree la display-list associee au layer.
190 aLayer->ptrLayer->listIndex = glGenLists (1);
191 //alayer->ptrLayer = /*(void *) */ptrLayer;
195 /*----------------------------------------------------------------------*/
197 call_togl_redraw_layer2d (
198 CALL_DEF_VIEW * aview,
199 CALL_DEF_LAYER * alayer
202 float left, right, bottom, top;
206 GLdouble modelMatrix[16], projMatrix[16];
210 GLsizei dispWidth, dispHeight;
211 GLboolean isl = IsLightOn(); /*OCC6247*/
213 if ( aview->DefBitmap.bitmap ) {
214 dispWidth = aview->DefBitmap.width;
215 dispHeight = aview->DefBitmap.height;
218 dispWidth = (GLsizei) alayer->viewport[0];
219 dispHeight = (GLsizei) alayer->viewport[1];
222 if (alayer->ptrLayer == NULL) return;
223 if (alayer->ptrLayer->listIndex == 0) return;
225 printf ("call_togl_redraw_layer2d %d\n", ptrLayer->listIndex);
226 printf ("\twindow size %f %f\n",
227 aview->DefWindow.dx, aview->DefWindow.dy);
228 printf ("\tviewport %f %f\n", (float) dispWidth, (float) dispHeight);
232 LightOff(); /*OCC6247*/
236 * On positionne la projection
238 glMatrixMode( GL_MODELVIEW );
242 glMatrixMode (GL_PROJECTION);
246 if (alayer->sizeDependent == 0)
247 glViewport (0, 0, dispWidth, dispHeight);
249 left = alayer->ortho[0],
250 right = alayer->ortho[1],
251 bottom = alayer->ortho[2],
252 top = alayer->ortho[3];
253 attach = alayer->attach;
255 printf ("\tattach %d ortho %f %f %f %f %d\n",
256 attach, left, right, bottom, top);
258 if (alayer->sizeDependent == 0)
259 ratio = (float) dispWidth/dispHeight;
261 ratio = aview->DefWindow.dx/aview->DefWindow.dy;
262 if (ratio >= 1.0) { /* fenetre horizontale */
263 delta = (float )((top - bottom)/2.0);
265 case 0: /* Aspect_TOC_BOTTOM_LEFT */
266 top = bottom + 2*delta/ratio;
268 case 1: /* Aspect_TOC_BOTTOM_RIGHT */
269 top = bottom + 2*delta/ratio;
271 case 2: /* Aspect_TOC_TOP_LEFT */
272 bottom = top - 2*delta/ratio;
274 case 3: /* Aspect_TOC_TOP_RIGHT */
275 bottom = top - 2*delta/ratio;
279 else { /* fenetre verticale */
280 delta = (float )((right - left)/2.0);
282 case 0: /* Aspect_TOC_BOTTOM_LEFT */
283 right = left + 2*delta*ratio;
285 case 1: /* Aspect_TOC_BOTTOM_RIGHT */
286 left = right - 2*delta*ratio;
288 case 2: /* Aspect_TOC_TOP_LEFT */
289 right = left + 2*delta*ratio;
291 case 3: /* Aspect_TOC_TOP_RIGHT */
292 left = right - 2*delta*ratio;
297 printf ("\tratio %f new ortho %f %f %f %f\n",
298 ratio, left, right, bottom, top);
300 glOrtho (left, right, bottom, top, -1.0, 1.0);
303 glGetIntegerv (GL_VIEWPORT, viewport);
304 glGetDoublev (GL_MODELVIEW_MATRIX, modelMatrix);
305 glGetDoublev (GL_PROJECTION_MATRIX, projMatrix);
306 printf ("viewport :\n");
308 for (i = 0; i < 4; i++)
309 printf ("%d ", viewport[i]);
311 printf ("modelMatrix :\n");
312 for (i = 0; i < 4; i++) {
314 for (j = 0; j < 4; j++)
315 printf ("%f ", modelMatrix[i*4+j]);
318 printf ("projMatrix :\n");
319 for (i = 0; i < 4; i++) {
321 for (j = 0; j < 4; j++)
322 printf ("%f ", projMatrix[i*4+j]);
328 * On trace la display-list associee au layer.
331 if (glIsList (alayer->ptrLayer->listIndex))
332 printf ("\t%d is a list\n", alayer->ptrLayer->listIndex);
334 printf ("\t%d is not a list\n", alayer->ptrLayer->listIndex);
337 GL_LIGHTING_BIT | GL_LINE_BIT | GL_POLYGON_BIT |
338 GL_DEPTH_BUFFER_BIT | GL_CURRENT_BIT | GL_TEXTURE_BIT );
339 glDisable (GL_DEPTH_TEST);
340 glCallList (alayer->ptrLayer->listIndex);
343 //calling dynamic render of LayerItems
344 if ( alayer->ptrLayer->layerData ) {
346 Visual3d_Layer* layer = (Visual3d_Layer*)alayer->ptrLayer->layerData;
347 layer->RenderLayerItems();
348 ACLayer.ptrLayer = NULL;
355 * On retire la projection
357 glMatrixMode (GL_PROJECTION);
360 glMatrixMode( GL_MODELVIEW );
364 * Restauration du Viewport en cas de modification
366 if (alayer->sizeDependent == 0)
368 (GLsizei) aview->DefWindow.dx,
369 (GLsizei) aview->DefWindow.dy);
374 LightOn(); /*OCC6247*/
379 /*----------------------------------------------------------------------*/
381 call_togl_begin_layer2d
383 CALL_DEF_LAYER * alayer
386 call_def_ptrLayer ptrLayer;
390 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
391 if (ptrLayer == NULL) return;
392 if (ptrLayer->listIndex == 0) return;
394 printf ("call_togl_begin_layer2d %d\n", ptrLayer->listIndex);
398 glEnable(GL_TEXTURE_2D);
399 GLboolean stat = glIsEnabled( GL_TEXTURE_2D );
401 glNewList (ptrLayer->listIndex, GL_COMPILE);
405 /*----------------------------------------------------------------------*/
407 call_togl_end_layer2d
411 call_def_ptrLayer ptrLayer;
413 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
414 if (ptrLayer == NULL) return;
415 if (ptrLayer->listIndex == 0) return;
417 printf ("call_togl_end_layer2d %d\n", ptrLayer->listIndex);
421 * On ferme la display-list associee au layer.
425 layerOpen = GL_FALSE;
427 ACLayer.ptrLayer = NULL;
430 /*----------------------------------------------------------------------*/
432 call_togl_begin_polyline2d (
435 call_def_ptrLayer ptrLayer;
437 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
438 if (ptrLayer == NULL) return;
439 if (ptrLayer->listIndex == 0) return;
441 printf ("call_togl_begin_polyline2d %d\n", ptrLayer->listIndex);
445 glBegin (GL_LINE_STRIP);
448 /*----------------------------------------------------------------------*/
450 call_togl_end_polyline2d (
453 call_def_ptrLayer ptrLayer;
455 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
456 if (ptrLayer == NULL) return;
457 if (ptrLayer->listIndex == 0) return;
459 printf ("call_togl_end_polyline2d %d\n", ptrLayer->listIndex);
465 /*----------------------------------------------------------------------*/
467 call_togl_begin_polygon2d (
470 call_def_ptrLayer ptrLayer;
472 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
473 if (ptrLayer == NULL) return;
474 if (ptrLayer->listIndex == 0) return;
476 printf ("call_togl_begin_polygon2d %d\n", ptrLayer->listIndex);
480 glBegin (GL_POLYGON);
483 /*----------------------------------------------------------------------*/
485 call_togl_end_polygon2d (
488 call_def_ptrLayer ptrLayer;
490 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
491 if (ptrLayer == NULL) return;
492 if (ptrLayer->listIndex == 0) return;
494 printf ("call_togl_end_polygon2d %d\n", ptrLayer->listIndex);
500 /*----------------------------------------------------------------------*/
507 call_def_ptrLayer ptrLayer;
509 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
510 if (ptrLayer == NULL) return;
511 if (ptrLayer->listIndex == 0) return;
513 printf ("call_togl_edge2d %d\n", ptrLayer->listIndex);
514 printf ("\tcoord %f %f\n", x, y);
518 glVertex3f (x, y, 0.);
521 /*----------------------------------------------------------------------*/
529 call_def_ptrLayer ptrLayer;
531 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
532 if (ptrLayer == NULL) return;
533 if (ptrLayer->listIndex == 0) return;
535 printf ("call_togl_draw2d %d\n", ptrLayer->listIndex);
536 printf ("\tcoord %f %f\n", x, y);
540 glVertex3f (x, y, 0.);
543 /*----------------------------------------------------------------------*/
551 call_def_ptrLayer ptrLayer;
553 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
554 if (ptrLayer == NULL) return;
555 if (ptrLayer->listIndex == 0) return;
557 printf ("call_togl_move2d %d\n", ptrLayer->listIndex);
558 printf ("\tcoord %f %f\n", x, y);
561 if (layerPoints != 0) {
562 call_togl_end_polyline2d ();
563 call_togl_begin_polyline2d ();
567 glVertex3f (x, y, 0.);
570 /*----------------------------------------------------------------------*/
572 call_togl_rectangle2d
580 call_def_ptrLayer ptrLayer;
582 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
583 if (ptrLayer == NULL) return;
584 if (ptrLayer->listIndex == 0) return;
586 printf ("call_togl_rectangle2d %d\n", ptrLayer->listIndex);
587 printf ("\trectangle %f %f %f %f\n", x, y, w, h);
590 glRectf (x, y, x + w, y + h);
593 /*----------------------------------------------------------------------*/
595 call_togl_text2d ( Techar *s,
601 Tint dispWidth, dispHeight;
603 GLdouble objx1, objy1, objz1;
605 call_def_ptrLayer ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
606 if (!ptrLayer) return;
607 if (ptrLayer->listIndex == 0) return;
609 printf ("call_togl_text2d %d\n", ptrLayer->listIndex);
610 printf ("\ttext %s %f %f %f\n", s, x, y, height);
613 OpenGl_TextRender* textRender=OpenGl_TextRender::instance();
615 FTGLLayerFontCurrent = textRender->FindFont( FTGLLayerFontName,
619 FTGLLayerFontYScale );
625 //szv: conversion of Techar to wchar_t
626 wchar_t *s1 = (wchar_t*)s;
627 if (sizeof(Techar) != sizeof(wchar_t))
629 Tint i = 0; while (s[i++]);
631 i = 0; while (s1[i++] = (wchar_t)(*s++));
635 * On traite les differents types d'affichage de texte
637 switch (layerFontType) {
638 case 0 : /* Aspect_TODT_Normal */
640 printf ("---------------------\n");
641 printf ("texte normal %f %f\n", objx1, objy1);
644 textRender->RenderText(s1, fontBase, 1, (float )objx1, (float )objy1, 0.f );
647 case 1 : /* Aspect_TODT_SubTitle */
650 printf ("---------------------\n");
651 printf ("texte subtitle %f %f\n", objx1, objy1);
653 glGetIntegerv (GL_VIEWPORT, viewport);
654 glGetDoublev (GL_MODELVIEW_MATRIX, modelMatrix);
655 glGetDoublev (GL_PROJECTION_MATRIX, projMatrix);
657 printf ("viewport :\n");
659 for (i = 0; i < 4; i++)
660 printf ("%d ", viewport[i]);
662 printf ("modelMatrix :\n");
663 for (i = 0; i < 4; i++) {
665 for (j = 0; j < 4; j++)
666 printf ("%f ", modelMatrix[i*4+j]);
669 printf ("projMatrix :\n");
670 for (i = 0; i < 4; i++) {
672 for (j = 0; j < 4; j++)
673 printf ("%f ", projMatrix[i*4+j]);
678 * dimensionString("Methode cadre", &sWidth, &sAscent, &sDescent);
684 objx2 = objx1; objy2 = objy1; objz2 = objz1;
685 objx3 = objx1; objy3 = objy1; objz3 = objz1;
686 objx4 = objx1; objy4 = objy1; objz4 = objz1;
687 objx5 = objx1; objy5 = objy1; objz5 = objz1;
689 status = gluProject (objx1, objy1, objz1,
690 modelMatrix, projMatrix, viewport,
691 &winx1, &winy1, &winz1);
694 winy2 = winy1-sDescent;
695 winz2 = winz1+0.00001;
696 status = gluUnProject (winx2, winy2, winz2,
697 modelMatrix, projMatrix, viewport,
698 &objx2, &objy2, &objz2);
700 winx2 = winx1 + sWidth;
701 winy2 = winy1-sDescent;
702 winz2 = winz1+0.00001; /* il vaut mieux F+B / 1000000 ? */
703 status = gluUnProject (winx2, winy2, winz2,
704 modelMatrix, projMatrix, viewport,
705 &objx3, &objy3, &objz3);
707 winx2 = winx1 + sWidth;
708 winy2 = winy1 + sAscent;
709 winz2 = winz1+0.00001;
710 status = gluUnProject (winx2, winy2, winz2,
711 modelMatrix, projMatrix, viewport,
712 &objx4, &objy4, &objz4);
715 winy2 = winy1+ sAscent;
716 winz2 = winz1+0.00001;
717 status = gluUnProject (winx2, winy2, winz2,
718 modelMatrix, projMatrix, viewport,
719 &objx5, &objy5, &objz5);
721 glColor3f (layerFontRed, layerFontGreen, layerFontBlue);
723 glVertex3d(objx2, objy2, objz2);
724 glVertex3d(objx3, objy3, objz3);
725 glVertex3d(objx4, objy4, objz4);
726 glVertex3d(objx5, objy5, objz5);
728 glColor3f (layerRed, layerGreen, layerBlue);
731 textRender->RenderText(s1, fontBase, 1, (float )objx1, (float )objy1, 0.f);
734 case 2 : /* Aspect_TODT_Dekale */
737 printf ("---------------------\n");
738 printf ("texte dekale %f %f\n", objx1, objy1);
740 glGetIntegerv (GL_VIEWPORT, viewport);
741 glGetDoublev (GL_MODELVIEW_MATRIX, modelMatrix);
742 glGetDoublev (GL_PROJECTION_MATRIX, projMatrix);
744 printf ("viewport :\n");
746 for (i = 0; i < 4; i++)
747 printf ("%d ", viewport[i]);
749 printf ("modelMatrix :\n");
750 for (i = 0; i < 4; i++) {
752 for (j = 0; j < 4; j++)
753 printf ("%f ", modelMatrix[i*4+j]);
756 printf ("projMatrix :\n");
757 for (i = 0; i < 4; i++) {
759 for (j = 0; j < 4; j++)
760 printf ("%f ", projMatrix[i*4+j]);
764 status = gluProject (objx1, objy1, objz1,
765 modelMatrix, projMatrix, viewport,
766 &winx1, &winy1, &winz1);
768 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
772 winz2 = winz1+0.00001;
773 status = gluUnProject (winx2, winy2, winz2,
774 modelMatrix, projMatrix, viewport,
775 &objx2, &objy2, &objz2);
777 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
779 glColor3f (layerFontRed, layerFontGreen, layerFontBlue);
782 OpenGl_TextRender* textRender=OpenGl_TextRender::instance();
783 textRender->RenderText(s1, fontBase, 1, objx2, objy2, 0.f);
788 winz2 = winz1+0.00001;
789 status = gluUnProject (winx2, winy2, winz2,
790 modelMatrix, projMatrix, viewport,
791 &objx2, &objy2, &objz2);
793 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
796 textRender->RenderText(s1, fontBase, 1, objx2, objy2, 0.f);
801 winz2 = winz1+0.00001;
802 status = gluUnProject (winx2, winy2, winz2,
803 modelMatrix, projMatrix, viewport,
804 &objx2, &objy2, &objz2);
806 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
810 textRender->RenderText(s1, fontBase, 1, objx2, objy2, 0.f);
814 winz2 = winz1+0.00001;
815 status = gluUnProject (winx2, winy2, winz2,
816 modelMatrix, projMatrix, viewport,
817 &objx2, &objy2, &objz2);
819 printf ("status %s\n", (status == GL_FALSE ? "ko" : "ok"));
822 textRender->RenderText(s1, fontBase, 1, objx2, objy2, 0.f);
824 glColor3f (layerRed, layerGreen, layerBlue);
827 textRender->RenderText(s1, fontBase, 1, (float )objx1, (float )objy1, 0.f);
830 printf ("---------------------\n");
833 case 3 : /* Aspect_TODT_Blend */
837 if ( (PFNGLBLENDEQUATIONEXTPROC)glBlendEquationOp == (PFNGLBLENDEQUATIONEXTPROC)INVALID_EXT_FUNCTION_PTR )
839 if(QueryExtension("GL_EXT_blend_logic_op"))
840 glBlendEquationOp = (PFNGLBLENDEQUATIONEXTPROC)glXGetProcAddress((GLubyte*)"glBlendEquationOp");
842 glBlendEquationOp = NULL;
845 if ( glBlendEquationOp )
850 glBlendEquationOp(GL_LOGIC_OP);
852 glBlendEquation(GL_LOGIC_OP);
855 glColor3f (layerRed, layerGreen, layerBlue);
856 glRasterPos2f (objx1, objy1);
857 glDisable (GL_BLEND);
860 glColor3f (layerRed, layerGreen, layerBlue);
862 textRender->RenderText(s1, fontBase, 1, (float )objx1, (float )objy1, 0.f);
869 printf ("---------------------\n");
870 printf ("texte blend %f %f\n", objx1, objy1);
873 textRender->RenderText(s1, fontBase, 1, (float )objx1, (float )objy1, 0.f);
876 printf ("---------------------\n");
881 //szv: delete temporary wide string
882 if (sizeof(Techar) != sizeof(wchar_t))
897 Tint dispWidth, dispHeight;
900 call_def_ptrLayer ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
901 if (!ptrLayer) return;
902 if (ptrLayer->listIndex == 0) return;
904 OpenGl_TextRender* textRender = OpenGl_TextRender::instance();
906 if ( FTGLLayerFontHeight != height || layerFontFlag == IsModified || FTGLLayerFontCurrent == 0 )
908 layerFontFlag = IsNotModified;
909 FTGLLayerFontHeight = height;
910 FTGLLayerFontCurrent = textRender -> FindFont(FTGLLayerFontName, FTGLLayerFontAspect, FTGLLayerFontHeight);
913 //szv: conversion of Techar to wchar_t
914 wchar_t *s1 = (wchar_t*)s, *s2 = 0;
915 if (sizeof(Techar) != sizeof(wchar_t))
917 Tint i = 0; while (s[i++]);
918 s1 = s2 = new wchar_t[i];
919 i = 0; while (s1[i++] = (wchar_t)(*s++));
921 textRender->StringSize(s1, &FTGLLayerFontWidth, &FTGLLayerFontAscent, &FTGLLayerFontDescent);
922 //szv: delete temporary wide string
925 *width = (float) FTGLLayerFontWidth;
926 *ascent = (float) FTGLLayerFontAscent;
927 *descent = (float) FTGLLayerFontDescent;
931 /*----------------------------------------------------------------------*/
940 call_def_ptrLayer ptrLayer;
942 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
943 if (ptrLayer == NULL) return;
944 if (ptrLayer->listIndex == 0) return;
946 printf ("call_togl_set_color %d\n", ptrLayer->listIndex);
947 printf ("\tcolor %f %f %f\n", r, g, b);
956 /*----------------------------------------------------------------------*/
958 call_togl_set_transparency
963 call_def_ptrLayer ptrLayer;
965 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
966 if (ptrLayer == NULL) return;
967 if (ptrLayer->listIndex == 0) return;
969 printf ("call_togl_set_transparency %d\n", ptrLayer->listIndex);
970 printf ("\ttransparency %f\n", a);
974 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
975 glColor4f (layerRed, layerGreen, layerBlue, a);
978 /*----------------------------------------------------------------------*/
980 call_togl_unset_transparency
984 call_def_ptrLayer ptrLayer;
986 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
987 if (ptrLayer == NULL) return;
988 if (ptrLayer->listIndex == 0) return;
990 printf ("call_togl_set_untransparency %d\n", ptrLayer->listIndex);
993 glDisable (GL_BLEND);
996 /*----------------------------------------------------------------------*/
998 call_togl_set_line_attributes
1004 call_def_ptrLayer ptrLayer;
1006 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
1007 if (ptrLayer == NULL) return;
1008 if (ptrLayer->listIndex == 0) return;
1010 printf ("call_togl_set_line_attributes %d\n", ptrLayer->listIndex);
1011 printf ("\ttype, width %d %f\n", type, width);
1013 if (layerType != type) {
1015 if (layerType == 0) { /* TOL_SOLID */
1016 glDisable (GL_LINE_STIPPLE);
1020 glCallList (linestyleBase+layerType);
1021 glEnable (GL_LINE_STIPPLE);
1025 if (layerWidth != width) {
1027 glLineWidth ((GLfloat) layerWidth);
1031 /*----------------------------------------------------------------------*/
1033 call_togl_set_text_attributes
1042 call_def_ptrLayer ptrLayer;
1044 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
1045 if (ptrLayer == NULL) return;
1046 if (ptrLayer->listIndex == 0) return;
1048 printf ("call_togl_set_text_attributes %d\n", ptrLayer->listIndex);
1049 printf ("\tfont %s type %ld\n", font, type);
1050 printf ("\tcolor %f %f %f\n", r, g, b);
1053 if ( strcmp( (char*)FTGLLayerFontName, (char*)font ) != 0 ) {
1054 FTGLLayerFontName[0] = '\0';
1055 strcat( (char*)FTGLLayerFontName, (char*)font );
1056 FTGLLayerFontAspect = OSD_FA_Regular;
1058 OpenGl_TextRender* textRender = OpenGl_TextRender::instance();
1059 FTGLLayerFontCurrent = textRender -> FindFont(FTGLLayerFontName, FTGLLayerFontAspect, FTGLLayerFontHeight);
1061 layerFontType = type;
1065 layerFontFlag = IsModified;
1071 void call_togl_set_text_attributes( Tchar* font,
1073 OSD_FontAspect aspect,
1078 call_def_ptrLayer ptrLayer;
1080 ptrLayer = (call_def_ptrLayer) ACLayer.ptrLayer;
1081 if (ptrLayer == NULL) return;
1082 if (ptrLayer->listIndex == 0) return;
1085 printf ("call_togl_set_text_attributes %d\n", ptrLayer->listIndex);
1086 printf ("\tfont %s type \n", font);
1087 printf ("\tcolor %f %f %f\n", r, g, b);
1090 * On gere le type de font (ASCII !)
1092 if ( strcmp( (char*)FTGLLayerFontName, (char*)font ) != 0 &&
1093 FTGLLayerFontAspect == aspect &&
1094 FTGLLayerFontHeight == height
1097 FTGLLayerFontName[0] = '\0';
1098 strcat( (char*)FTGLLayerFontName, (char*)font );
1099 FTGLLayerFontHeight = height;
1100 FTGLLayerFontAspect = aspect;
1101 layerFontFlag = IsModified;
1102 FTGLLayerFontXScale = FTGLLayerFontYScale = 1.f;
1103 OpenGl_TextRender* textRender = OpenGl_TextRender::instance();
1104 FTGLLayerFontCurrent = textRender -> FindFont(FTGLLayerFontName, FTGLLayerFontAspect, FTGLLayerFontHeight);