0024131: TKOpenGL redesign GPU memory management for markers presentation
[occt.git] / src / OpenGl / OpenGl_Display_2.cxx
CommitLineData
b311480e 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
2166f0fa 20
5f8b738e 21#include <OpenGl_GlCore11.hxx>
22
2166f0fa
SK
23#include <OpenGl_Display.hxx>
24
498ce577 25#ifdef HAVE_CONFIG_H
26# include <config.h>
27#endif
28
2166f0fa 29#ifdef HAVE_GL2PS
5f8b738e 30 #include <gl2ps.h>
2166f0fa
SK
31#endif
32
2166f0fa
SK
33#define DOT_LS 0xCCCC
34#define DASH_DOT_LS 0xFF18
35#define DASH_LS 0xFFC0
36#define DASH_DDOT_LS 0xFF24
37
38static 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
2166f0fa
SK
497/*----------------------------------------------------------------------*/
498
499//TsmInitAttributes
500void 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);
2166f0fa
SK
540}
541
542/*----------------------------------------------------------------------*/
543
544void 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
565void 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/*----------------------------------------------------------------------*/