0024171: Eliminate CLang compiler warning -Wreorder
[occt.git] / src / OpenGl / OpenGl_Display_2.cxx
1 // Created on: 2011-10-25
2 // Created by: Sergey ZERCHANINOV
3 // Copyright (c) 2011-2012 OPEN CASCADE SAS
4 //
5 // The content of this file is subject to the Open CASCADE Technology Public
6 // License Version 6.5 (the "License"). You may not use the content of this file
7 // except in compliance with the License. Please obtain a copy of the License
8 // at http://www.opencascade.org and read it completely before using this file.
9 //
10 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
12 //
13 // The Original Code and all software distributed under the License is
14 // distributed on an "AS IS" basis, without warranty of any kind, and the
15 // Initial Developer hereby disclaims all such warranties, including without
16 // limitation, any warranties of merchantability, fitness for a particular
17 // purpose or non-infringement. Please see the License for the specific terms
18 // and conditions governing the rights and limitations under the License.
19
20
21 #include <OpenGl_GlCore11.hxx>
22
23 #include <OpenGl_Display.hxx>
24
25 #ifdef HAVE_CONFIG_H
26 # include <config.h>
27 #endif
28
29 #ifdef HAVE_GL2PS
30   #include <gl2ps.h>
31 #endif
32
33 #define  DOT_LS            0xCCCC
34 #define  DASH_DOT_LS       0xFF18
35 #define  DASH_LS           0xFFC0
36 #define  DASH_DDOT_LS      0xFF24
37
38 static const unsigned int myInteriors[TEL_HS_USER_DEF_START][32] =
39 {
40   //TEL_HS_SOLID
41   {
42     0xFFFFFFFF,
43     0xFFFFFFFF,
44     0xFFFFFFFF,
45     0xFFFFFFFF,
46     0xFFFFFFFF,
47     0xFFFFFFFF,
48     0xFFFFFFFF,
49     0xFFFFFFFF,
50     0xFFFFFFFF,
51     0xFFFFFFFF,
52     0xFFFFFFFF,
53     0xFFFFFFFF,
54     0xFFFFFFFF,
55     0xFFFFFFFF,
56     0xFFFFFFFF,
57     0xFFFFFFFF,
58     0xFFFFFFFF,
59     0xFFFFFFFF,
60     0xFFFFFFFF,
61     0xFFFFFFFF,
62     0xFFFFFFFF,
63     0xFFFFFFFF,
64     0xFFFFFFFF,
65     0xFFFFFFFF,
66     0xFFFFFFFF,
67     0xFFFFFFFF,
68     0xFFFFFFFF,
69     0xFFFFFFFF,
70     0xFFFFFFFF,
71     0xFFFFFFFF,
72     0xFFFFFFFF,
73     0xFFFFFFFF
74   },
75   //TEL_HS_CROSS
76   {
77     0xFFFFFFFF,
78     0xBBBBBBBB,
79     0xEEEEEEEE,
80     0xBBBBBBBB,
81     0xEEEEEEEE,
82     0xBBBBBBBB,
83     0xEEEEEEEE,
84     0xBBBBBBBB,
85     0xEEEEEEEE,
86     0xBBBBBBBB,
87     0xEEEEEEEE,
88     0xBBBBBBBB,
89     0xEEEEEEEE,
90     0xBBBBBBBB,
91     0xEEEEEEEE,
92     0xBBBBBBBB,
93     0xEEEEEEEE,
94     0xBBBBBBBB,
95     0xEEEEEEEE,
96     0xBBBBBBBB,
97     0xEEEEEEEE,
98     0xBBBBBBBB,
99     0xEEEEEEEE,
100     0xBBBBBBBB,
101     0xEEEEEEEE,
102     0xBBBBBBBB,
103     0xEEEEEEEE,
104     0xBBBBBBBB,
105     0xEEEEEEEE,
106     0xBBBBBBBB,
107     0xEEEEEEEE,
108     0xBBBBBBBB
109   },
110   //TEL_HS_CROSS_SPARSE
111   {
112     0x81818181,
113     0x24242424,
114     0x18181818,
115     0x42424242,
116     0x81818181,
117     0x24242424,
118     0x18181818,
119     0x42424242,
120     0x81818181,
121     0x24242424,
122     0x18181818,
123     0x42424242,
124     0x81818181,
125     0x24242424,
126     0x18181818,
127     0x42424242,
128     0x81818181,
129     0x24242424,
130     0x18181818,
131     0x42424242,
132     0x81818181,
133     0x24242424,
134     0x18181818,
135     0x42424242,
136     0x81818181,
137     0x24242424,
138     0x18181818,
139     0x42424242,
140     0x81818181,
141     0x24242424,
142     0x18181818,
143     0x42424242
144   },
145   //TEL_HS_GRID
146   {
147     0xFFFFFFFF,
148     0x88888888,
149     0xFFFFFFFF,
150     0x88888888,
151     0xFFFFFFFF,
152     0x88888888,
153     0xFFFFFFFF,
154     0x88888888,
155     0xFFFFFFFF,
156     0x88888888,
157     0xFFFFFFFF,
158     0x88888888,
159     0xFFFFFFFF,
160     0x88888888,
161     0xFFFFFFFF,
162     0x88888888,
163     0xFFFFFFFF,
164     0x88888888,
165     0xFFFFFFFF,
166     0x88888888,
167     0xFFFFFFFF,
168     0x88888888,
169     0xFFFFFFFF,
170     0x88888888,
171     0xFFFFFFFF,
172     0x88888888,
173     0xFFFFFFFF,
174     0x88888888,
175     0xFFFFFFFF,
176     0x88888888,
177     0xFFFFFFFF,
178     0x88888888
179   },
180   //TEL_HS_GRID_SPARSE
181   {
182     0xFFFFFFFF,
183     0x80808080,
184     0x80808080,
185     0x80808080,
186     0xFFFFFFFF,
187     0x80808080,
188     0x80808080,
189     0x80808080,
190     0xFFFFFFFF,
191     0x80808080,
192     0x80808080,
193     0x80808080,
194     0xFFFFFFFF,
195     0x80808080,
196     0x80808080,
197     0x80808080,
198     0xFFFFFFFF,
199     0x80808080,
200     0x80808080,
201     0x80808080,
202     0xFFFFFFFF,
203     0x80808080,
204     0x80808080,
205     0x80808080,
206     0xFFFFFFFF,
207     0x80808080,
208     0x80808080,
209     0x80808080,
210     0xFFFFFFFF,
211     0x80808080,
212     0x80808080,
213     0x80808080
214   },
215   //TEL_HS_DIAG_45
216   {
217     0x88888888,
218     0x22222222,
219     0x88888888,
220     0x22222222,
221     0x88888888,
222     0x22222222,
223     0x88888888,
224     0x22222222,
225     0x88888888,
226     0x22222222,
227     0x88888888,
228     0x22222222,
229     0x88888888,
230     0x22222222,
231     0x88888888,
232     0x22222222,
233     0x88888888,
234     0x22222222,
235     0x88888888,
236     0x22222222,
237     0x88888888,
238     0x22222222,
239     0x88888888,
240     0x22222222,
241     0x88888888,
242     0x22222222,
243     0x88888888,
244     0x22222222,
245     0x88888888,
246     0x22222222,
247     0x88888888,
248     0x22222222
249   },
250   //TEL_HS_DIAG_135
251   {
252     0x11111111,
253     0x44444444,
254     0x11111111,
255     0x44444444,
256     0x11111111,
257     0x44444444,
258     0x11111111,
259     0x44444444,
260     0x11111111,
261     0x44444444,
262     0x11111111,
263     0x44444444,
264     0x11111111,
265     0x44444444,
266     0x11111111,
267     0x44444444,
268     0x11111111,
269     0x44444444,
270     0x11111111,
271     0x44444444,
272     0x11111111,
273     0x44444444,
274     0x11111111,
275     0x44444444,
276     0x11111111,
277     0x44444444,
278     0x11111111,
279     0x44444444,
280     0x11111111,
281     0x44444444,
282     0x11111111,
283     0x44444444
284   },
285   //TEL_HS_HORIZONTAL
286   {
287     0xFFFFFFFF,
288     0x00000000,
289     0xFFFFFFFF,
290     0x00000000,
291     0xFFFFFFFF,
292     0x00000000,
293     0xFFFFFFFF,
294     0x00000000,
295     0xFFFFFFFF,
296     0x00000000,
297     0xFFFFFFFF,
298     0x00000000,
299     0xFFFFFFFF,
300     0x00000000,
301     0xFFFFFFFF,
302     0x00000000,
303     0xFFFFFFFF,
304     0x00000000,
305     0xFFFFFFFF,
306     0x00000000,
307     0xFFFFFFFF,
308     0x00000000,
309     0xFFFFFFFF,
310     0x00000000,
311     0xFFFFFFFF,
312     0x00000000,
313     0xFFFFFFFF,
314     0x00000000,
315     0xFFFFFFFF,
316     0x00000000,
317     0xFFFFFFFF,
318     0x00000000
319   },
320   //TEL_HS_VERTICAL
321   {
322     0x11111111,
323     0x11111111,
324     0x11111111,
325     0x11111111,
326     0x11111111,
327     0x11111111,
328     0x11111111,
329     0x11111111,
330     0x11111111,
331     0x11111111,
332     0x11111111,
333     0x11111111,
334     0x11111111,
335     0x11111111,
336     0x11111111,
337     0x11111111,
338     0x11111111,
339     0x11111111,
340     0x11111111,
341     0x11111111,
342     0x11111111,
343     0x11111111,
344     0x11111111,
345     0x11111111,
346     0x11111111,
347     0x11111111,
348     0x11111111,
349     0x11111111,
350     0x11111111,
351     0x11111111,
352     0x11111111,
353     0x11111111
354   },
355   //TEL_HS_DIAG_45_SPARSE
356   {
357     0x80808080,
358     0x20202020,
359     0x08080808,
360     0x02020202,
361     0x80808080,
362     0x20202020,
363     0x08080808,
364     0x02020202,
365     0x80808080,
366     0x20202020,
367     0x08080808,
368     0x02020202,
369     0x80808080,
370     0x20202020,
371     0x08080808,
372     0x02020202,
373     0x80808080,
374     0x20202020,
375     0x08080808,
376     0x02020202,
377     0x80808080,
378     0x20202020,
379     0x08080808,
380     0x02020202,
381     0x80808080,
382     0x20202020,
383     0x08080808,
384     0x02020202,
385     0x80808080,
386     0x20202020,
387     0x08080808,
388     0x02020202
389   },
390   //TEL_HS_DIAG_135_SPARSE
391   {
392     0x01010101,
393     0x04040404,
394     0x10101010,
395     0x40404040,
396     0x01010101,
397     0x04040404,
398     0x10101010,
399     0x40404040,
400     0x01010101,
401     0x04040404,
402     0x10101010,
403     0x40404040,
404     0x01010101,
405     0x04040404,
406     0x10101010,
407     0x40404040,
408     0x01010101,
409     0x04040404,
410     0x10101010,
411     0x40404040,
412     0x01010101,
413     0x04040404,
414     0x10101010,
415     0x40404040,
416     0x01010101,
417     0x04040404,
418     0x10101010,
419     0x40404040,
420     0x01010101,
421     0x04040404,
422     0x10101010,
423     0x40404040
424   },
425   //TEL_HS_HORIZONTAL_SPARSE
426   {
427     0xFFFFFFFF,
428     0x00000000,
429     0x00000000,
430     0x00000000,
431     0xFFFFFFFF,
432     0x00000000,
433     0x00000000,
434     0x00000000,
435     0xFFFFFFFF,
436     0x00000000,
437     0x00000000,
438     0x00000000,
439     0xFFFFFFFF,
440     0x00000000,
441     0x00000000,
442     0x00000000,
443     0xFFFFFFFF,
444     0x00000000,
445     0x00000000,
446     0x00000000,
447     0xFFFFFFFF,
448     0x00000000,
449     0x00000000,
450     0x00000000,
451     0xFFFFFFFF,
452     0x00000000,
453     0x00000000,
454     0x00000000,
455     0xFFFFFFFF,
456     0x00000000,
457     0x00000000,
458     0x00000000
459   },
460   //TEL_HS_VERTICAL_SPARSE
461   {
462     0x10101010,
463     0x10101010,
464     0x10101010,
465     0x10101010,
466     0x10101010,
467     0x10101010,
468     0x10101010,
469     0x10101010,
470     0x10101010,
471     0x10101010,
472     0x10101010,
473     0x10101010,
474     0x10101010,
475     0x10101010,
476     0x10101010,
477     0x10101010,
478     0x10101010,
479     0x10101010,
480     0x10101010,
481     0x10101010,
482     0x10101010,
483     0x10101010,
484     0x10101010,
485     0x10101010,
486     0x10101010,
487     0x10101010,
488     0x10101010,
489     0x10101010,
490     0x10101010,
491     0x10101010,
492     0x10101010,
493     0x10101010
494   }
495 };
496
497 /*----------------------------------------------------------------------*/
498
499 //TsmInitAttributes
500 void OpenGl_Display::InitAttributes ()
501 {
502   // Return if already initialized
503   if (myLinestyleBase) return;
504
505   myLinestyleBase = glGenLists(5);
506
507   /* Line */
508
509   glNewList( (GLuint)myLinestyleBase+(GLuint)Aspect_TOL_DASH, GL_COMPILE );
510   glLineStipple(1,  DASH_LS );
511   glEndList();
512
513   glNewList( (GLuint)myLinestyleBase+(GLuint)Aspect_TOL_DOT, GL_COMPILE );
514   glLineStipple(1,  DOT_LS );
515   glEndList();
516
517   glNewList( (GLuint)myLinestyleBase+(GLuint)Aspect_TOL_DOTDASH, GL_COMPILE );
518   glLineStipple(1,  DASH_DOT_LS );
519   glEndList();
520
521   glNewList( (GLuint)myLinestyleBase+(GLuint)Aspect_TOL_USERDEFINED, GL_COMPILE );
522   glLineStipple(1,  DASH_DDOT_LS );
523   glEndList();
524
525   /* FSXXX
526   * GL_POLYGON_STIPPLE
527   * need 32x32 stipple patterns
528   */
529   const int nbi = sizeof(myInteriors)/(32*sizeof(unsigned int));
530   myPatternBase = glGenLists(TEL_HS_USER_DEF_START);
531   int i;
532   for( i = 1; i < TEL_HS_USER_DEF_START; i++ )
533   {
534     glNewList( (GLuint)myPatternBase + i, GL_COMPILE );
535         glPolygonStipple((const GLubyte *) (myInteriors[i<nbi? i : 0]));
536     glEndList();
537   }
538
539   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
540 }
541
542 /*----------------------------------------------------------------------*/
543
544 void OpenGl_Display::SetTypeOfLine (const Aspect_TypeOfLine AType) const
545 {
546   if (AType != Aspect_TOL_SOLID)
547   {
548     glCallList((GLuint)myLinestyleBase+(GLuint)AType);
549     glEnable( GL_LINE_STIPPLE );
550 #ifdef HAVE_GL2PS
551     gl2psEnable( GL2PS_LINE_STIPPLE );
552 #endif
553   }
554   else
555   {
556     glDisable( GL_LINE_STIPPLE );
557 #ifdef HAVE_GL2PS
558     gl2psDisable( GL2PS_LINE_STIPPLE );
559 #endif
560   }
561 }
562
563 /*----------------------------------------------------------------------*/
564
565 void OpenGl_Display::SetTypeOfHatch (const int AType) const
566 {
567   if (AType)
568   {
569     glCallList((GLuint)myPatternBase+(GLuint)AType);
570     glEnable( GL_POLYGON_STIPPLE );
571   }
572   else
573     glDisable( GL_POLYGON_STIPPLE );
574 }
575
576 /*----------------------------------------------------------------------*/