Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | | - |
21 | | - |
22 | | - |
23 | | - |
24 | | - |
25 | | - |
26 | | - |
27 | | - |
28 | | - |
29 | | - |
30 | | - |
31 | | - |
32 | | - |
33 | | - |
34 | | - |
35 | | - |
36 | | - |
37 | | - |
38 | | - |
39 | | - |
40 | #include <QtCore/private/qobject_p.h> | - |
41 | #include <QtCore/qglobal.h> | - |
42 | #include <QtCore/qvarlengtharray.h> | - |
43 | #include <QtGui/qopengl.h> | - |
44 | #include <QtGui/qopenglfunctions.h> | - |
45 | #include <QtGui/qoffscreensurface.h> | - |
46 | | - |
47 | #include "qopengldebug.h" | - |
48 | | - |
49 | QT_BEGIN_NAMESPACE | - |
50 | | - |
51 | | - |
52 | | - |
53 | | - |
54 | | - |
55 | | - |
56 | | - |
57 | | - |
58 | | - |
59 | | - |
60 | | - |
61 | | - |
62 | | - |
63 | | - |
64 | | - |
65 | | - |
66 | | - |
67 | | - |
68 | | - |
69 | | - |
70 | | - |
71 | | - |
72 | | - |
73 | | - |
74 | | - |
75 | | - |
76 | | - |
77 | | - |
78 | | - |
79 | | - |
80 | | - |
81 | | - |
82 | | - |
83 | | - |
84 | | - |
85 | | - |
86 | | - |
87 | | - |
88 | | - |
89 | | - |
90 | | - |
91 | | - |
92 | | - |
93 | | - |
94 | | - |
95 | | - |
96 | | - |
97 | | - |
98 | | - |
99 | | - |
100 | | - |
101 | | - |
102 | | - |
103 | | - |
104 | | - |
105 | | - |
106 | | - |
107 | | - |
108 | | - |
109 | | - |
110 | | - |
111 | | - |
112 | | - |
113 | | - |
114 | | - |
115 | | - |
116 | | - |
117 | | - |
118 | | - |
119 | | - |
120 | | - |
121 | | - |
122 | | - |
123 | | - |
124 | | - |
125 | | - |
126 | | - |
127 | | - |
128 | | - |
129 | | - |
130 | | - |
131 | | - |
132 | | - |
133 | | - |
134 | | - |
135 | | - |
136 | | - |
137 | | - |
138 | | - |
139 | | - |
140 | | - |
141 | | - |
142 | | - |
143 | | - |
144 | | - |
145 | | - |
146 | | - |
147 | | - |
148 | | - |
149 | | - |
150 | | - |
151 | | - |
152 | | - |
153 | | - |
154 | | - |
155 | | - |
156 | | - |
157 | | - |
158 | | - |
159 | | - |
160 | | - |
161 | | - |
162 | | - |
163 | | - |
164 | | - |
165 | | - |
166 | | - |
167 | | - |
168 | | - |
169 | | - |
170 | | - |
171 | | - |
172 | | - |
173 | | - |
174 | | - |
175 | | - |
176 | | - |
177 | | - |
178 | | - |
179 | | - |
180 | | - |
181 | | - |
182 | | - |
183 | | - |
184 | | - |
185 | | - |
186 | | - |
187 | | - |
188 | | - |
189 | | - |
190 | | - |
191 | | - |
192 | | - |
193 | | - |
194 | | - |
195 | | - |
196 | | - |
197 | | - |
198 | | - |
199 | | - |
200 | | - |
201 | | - |
202 | | - |
203 | | - |
204 | | - |
205 | | - |
206 | | - |
207 | | - |
208 | | - |
209 | | - |
210 | | - |
211 | | - |
212 | | - |
213 | | - |
214 | | - |
215 | | - |
216 | | - |
217 | | - |
218 | | - |
219 | | - |
220 | | - |
221 | | - |
222 | | - |
223 | | - |
224 | | - |
225 | | - |
226 | | - |
227 | | - |
228 | | - |
229 | | - |
230 | | - |
231 | | - |
232 | | - |
233 | | - |
234 | | - |
235 | | - |
236 | | - |
237 | | - |
238 | | - |
239 | | - |
240 | | - |
241 | | - |
242 | | - |
243 | | - |
244 | | - |
245 | | - |
246 | | - |
247 | | - |
248 | | - |
249 | | - |
250 | | - |
251 | | - |
252 | | - |
253 | | - |
254 | | - |
255 | | - |
256 | | - |
257 | | - |
258 | | - |
259 | | - |
260 | | - |
261 | | - |
262 | | - |
263 | | - |
264 | | - |
265 | | - |
266 | | - |
267 | | - |
268 | | - |
269 | | - |
270 | | - |
271 | | - |
272 | | - |
273 | | - |
274 | | - |
275 | | - |
276 | | - |
277 | | - |
278 | | - |
279 | | - |
280 | | - |
281 | | - |
282 | | - |
283 | | - |
284 | | - |
285 | | - |
286 | | - |
287 | | - |
288 | | - |
289 | | - |
290 | | - |
291 | | - |
292 | | - |
293 | | - |
294 | | - |
295 | | - |
296 | | - |
297 | | - |
298 | | - |
299 | | - |
300 | | - |
301 | | - |
302 | | - |
303 | | - |
304 | | - |
305 | | - |
306 | | - |
307 | | - |
308 | | - |
309 | | - |
310 | | - |
311 | | - |
312 | | - |
313 | | - |
314 | | - |
315 | | - |
316 | | - |
317 | | - |
318 | | - |
319 | | - |
320 | | - |
321 | | - |
322 | | - |
323 | | - |
324 | | - |
325 | | - |
326 | | - |
327 | | - |
328 | | - |
329 | | - |
330 | | - |
331 | | - |
332 | | - |
333 | | - |
334 | | - |
335 | | - |
336 | | - |
337 | | - |
338 | | - |
339 | | - |
340 | | - |
341 | | - |
342 | | - |
343 | | - |
344 | | - |
345 | | - |
346 | | - |
347 | | - |
348 | | - |
349 | | - |
350 | | - |
351 | | - |
352 | | - |
353 | | - |
354 | | - |
355 | | - |
356 | | - |
357 | | - |
358 | | - |
359 | | - |
360 | | - |
361 | | - |
362 | | - |
363 | | - |
364 | | - |
365 | | - |
366 | | - |
367 | | - |
368 | | - |
369 | | - |
370 | | - |
371 | | - |
372 | | - |
373 | | - |
374 | | - |
375 | | - |
376 | | - |
377 | | - |
378 | | - |
379 | | - |
380 | | - |
381 | | - |
382 | | - |
383 | | - |
384 | | - |
385 | | - |
386 | | - |
387 | | - |
388 | | - |
389 | | - |
390 | | - |
391 | | - |
392 | | - |
393 | | - |
394 | | - |
395 | | - |
396 | | - |
397 | | - |
398 | | - |
399 | | - |
400 | | - |
401 | | - |
402 | | - |
403 | | - |
404 | | - |
405 | | - |
406 | | - |
407 | | - |
408 | | - |
409 | | - |
410 | | - |
411 | | - |
412 | | - |
413 | | - |
414 | | - |
415 | | - |
416 | | - |
417 | | - |
418 | | - |
419 | | - |
420 | | - |
421 | | - |
422 | | - |
423 | | - |
424 | | - |
425 | | - |
426 | | - |
427 | | - |
428 | | - |
429 | | - |
430 | | - |
431 | | - |
432 | | - |
433 | | - |
434 | | - |
435 | | - |
436 | | - |
437 | | - |
438 | | - |
439 | | - |
440 | | - |
441 | | - |
442 | | - |
443 | | - |
444 | | - |
445 | | - |
446 | | - |
447 | | - |
448 | | - |
449 | | - |
450 | | - |
451 | | - |
452 | | - |
453 | | - |
454 | | - |
455 | | - |
456 | | - |
457 | | - |
458 | | - |
459 | | - |
460 | | - |
461 | | - |
462 | | - |
463 | | - |
464 | | - |
465 | | - |
466 | | - |
467 | | - |
468 | | - |
469 | #if defined(GL_KHR_debug) && defined(GL_DEBUG_SOURCE_API_KHR) | - |
470 | #define USE_MANUAL_DEFS | - |
471 | #endif | - |
472 | | - |
473 | | - |
474 | | - |
475 | | - |
476 | | - |
477 | | - |
478 | #ifndef GL_KHR_debug | - |
479 | #define GL_KHR_debug 1 | - |
480 | #define USE_MANUAL_DEFS | - |
481 | #endif | - |
482 | | - |
483 | #ifdef USE_MANUAL_DEFS | - |
484 | | - |
485 | #ifndef GL_DEBUG_OUTPUT_SYNCHRONOUS | - |
486 | #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 | - |
487 | #endif | - |
488 | #ifndef GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH | - |
489 | #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 | - |
490 | #endif | - |
491 | #ifndef GL_DEBUG_CALLBACK_FUNCTION | - |
492 | #define GL_DEBUG_CALLBACK_FUNCTION 0x8244 | - |
493 | #endif | - |
494 | #ifndef GL_DEBUG_CALLBACK_USER_PARAM | - |
495 | #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 | - |
496 | #endif | - |
497 | #ifndef GL_DEBUG_SOURCE_API | - |
498 | #define GL_DEBUG_SOURCE_API 0x8246 | - |
499 | #endif | - |
500 | #ifndef GL_DEBUG_SOURCE_WINDOW_SYSTEM | - |
501 | #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 | - |
502 | #endif | - |
503 | #ifndef GL_DEBUG_SOURCE_SHADER_COMPILER | - |
504 | #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 | - |
505 | #endif | - |
506 | #ifndef GL_DEBUG_SOURCE_THIRD_PARTY | - |
507 | #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 | - |
508 | #endif | - |
509 | #ifndef GL_DEBUG_SOURCE_APPLICATION | - |
510 | #define GL_DEBUG_SOURCE_APPLICATION 0x824A | - |
511 | #endif | - |
512 | #ifndef GL_DEBUG_SOURCE_OTHER | - |
513 | #define GL_DEBUG_SOURCE_OTHER 0x824B | - |
514 | #endif | - |
515 | #ifndef GL_DEBUG_TYPE_ERROR | - |
516 | #define GL_DEBUG_TYPE_ERROR 0x824C | - |
517 | #endif | - |
518 | #ifndef GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR | - |
519 | #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D | - |
520 | #endif | - |
521 | #ifndef GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR | - |
522 | #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E | - |
523 | #endif | - |
524 | #ifndef GL_DEBUG_TYPE_PORTABILITY | - |
525 | #define GL_DEBUG_TYPE_PORTABILITY 0x824F | - |
526 | #endif | - |
527 | #ifndef GL_DEBUG_TYPE_PERFORMANCE | - |
528 | #define GL_DEBUG_TYPE_PERFORMANCE 0x8250 | - |
529 | #endif | - |
530 | #ifndef GL_DEBUG_TYPE_OTHER | - |
531 | #define GL_DEBUG_TYPE_OTHER 0x8251 | - |
532 | #endif | - |
533 | #ifndef GL_DEBUG_TYPE_MARKER | - |
534 | #define GL_DEBUG_TYPE_MARKER 0x8268 | - |
535 | #endif | - |
536 | #ifndef GL_DEBUG_TYPE_PUSH_GROUP | - |
537 | #define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 | - |
538 | #endif | - |
539 | #ifndef GL_DEBUG_TYPE_POP_GROUP | - |
540 | #define GL_DEBUG_TYPE_POP_GROUP 0x826A | - |
541 | #endif | - |
542 | #ifndef GL_DEBUG_SEVERITY_NOTIFICATION | - |
543 | #define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B | - |
544 | #endif | - |
545 | #ifndef GL_MAX_DEBUG_GROUP_STACK_DEPTH | - |
546 | #define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C | - |
547 | #endif | - |
548 | #ifndef GL_DEBUG_GROUP_STACK_DEPTH | - |
549 | #define GL_DEBUG_GROUP_STACK_DEPTH 0x826D | - |
550 | #endif | - |
551 | #ifndef GL_BUFFER | - |
552 | #define GL_BUFFER 0x82E0 | - |
553 | #endif | - |
554 | #ifndef GL_SHADER | - |
555 | #define GL_SHADER 0x82E1 | - |
556 | #endif | - |
557 | #ifndef GL_PROGRAM | - |
558 | #define GL_PROGRAM 0x82E2 | - |
559 | #endif | - |
560 | #ifndef GL_QUERY | - |
561 | #define GL_QUERY 0x82E3 | - |
562 | #endif | - |
563 | #ifndef GL_PROGRAM_PIPELINE | - |
564 | #define GL_PROGRAM_PIPELINE 0x82E4 | - |
565 | #endif | - |
566 | #ifndef GL_SAMPLER | - |
567 | #define GL_SAMPLER 0x82E6 | - |
568 | #endif | - |
569 | #ifndef GL_DISPLAY_LIST | - |
570 | #define GL_DISPLAY_LIST 0x82E7 | - |
571 | #endif | - |
572 | #ifndef GL_MAX_LABEL_LENGTH | - |
573 | #define GL_MAX_LABEL_LENGTH 0x82E8 | - |
574 | #endif | - |
575 | #ifndef GL_MAX_DEBUG_MESSAGE_LENGTH | - |
576 | #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 | - |
577 | #endif | - |
578 | #ifndef GL_MAX_DEBUG_LOGGED_MESSAGES | - |
579 | #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 | - |
580 | #endif | - |
581 | #ifndef GL_DEBUG_LOGGED_MESSAGES | - |
582 | #define GL_DEBUG_LOGGED_MESSAGES 0x9145 | - |
583 | #endif | - |
584 | #ifndef GL_DEBUG_SEVERITY_HIGH | - |
585 | #define GL_DEBUG_SEVERITY_HIGH 0x9146 | - |
586 | #endif | - |
587 | #ifndef GL_DEBUG_SEVERITY_MEDIUM | - |
588 | #define GL_DEBUG_SEVERITY_MEDIUM 0x9147 | - |
589 | #endif | - |
590 | #ifndef GL_DEBUG_SEVERITY_LOW | - |
591 | #define GL_DEBUG_SEVERITY_LOW 0x9148 | - |
592 | #endif | - |
593 | #ifndef GL_DEBUG_OUTPUT | - |
594 | #define GL_DEBUG_OUTPUT 0x92E0 | - |
595 | #endif | - |
596 | #ifndef GL_CONTEXT_FLAG_DEBUG_BIT | - |
597 | #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 | - |
598 | #endif | - |
599 | #ifndef GL_STACK_OVERFLOW | - |
600 | #define GL_STACK_OVERFLOW 0x0503 | - |
601 | #endif | - |
602 | #ifndef GL_STACK_UNDERFLOW | - |
603 | #define GL_STACK_UNDERFLOW 0x0504 | - |
604 | #endif | - |
605 | | - |
606 | typedef void (QOPENGLF_APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const GLvoid *userParam); | - |
607 | | - |
608 | #endif /* USE_MANUAL_DEFS */ | - |
609 | | - |
610 | | - |
611 | | - |
612 | | - |
613 | | - |
614 | static QOpenGLDebugMessage::Source qt_messageSourceFromGL(GLenum source) | - |
615 | { | - |
616 | switch (source) { | - |
617 | case GL_DEBUG_SOURCE_API: | - |
618 | return QOpenGLDebugMessage::APISource; | - |
619 | case GL_DEBUG_SOURCE_WINDOW_SYSTEM: | - |
620 | return QOpenGLDebugMessage::WindowSystemSource; | - |
621 | case GL_DEBUG_SOURCE_SHADER_COMPILER: | - |
622 | return QOpenGLDebugMessage::ShaderCompilerSource; | - |
623 | case GL_DEBUG_SOURCE_THIRD_PARTY: | - |
624 | return QOpenGLDebugMessage::ThirdPartySource; | - |
625 | case GL_DEBUG_SOURCE_APPLICATION: | - |
626 | return QOpenGLDebugMessage::ApplicationSource; | - |
627 | case GL_DEBUG_SOURCE_OTHER: | - |
628 | return QOpenGLDebugMessage::OtherSource; | - |
629 | } | - |
630 | | - |
631 | Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown message source from GL"); | - |
632 | return QOpenGLDebugMessage::OtherSource; | - |
633 | } | - |
634 | | - |
635 | | - |
636 | | - |
637 | | - |
638 | static GLenum qt_messageSourceToGL(QOpenGLDebugMessage::Source source) | - |
639 | { | - |
640 | switch (source) { | - |
641 | case QOpenGLDebugMessage::InvalidSource: | - |
642 | break; | - |
643 | case QOpenGLDebugMessage::APISource: | - |
644 | return GL_DEBUG_SOURCE_API; | - |
645 | case QOpenGLDebugMessage::WindowSystemSource: | - |
646 | return GL_DEBUG_SOURCE_WINDOW_SYSTEM; | - |
647 | case QOpenGLDebugMessage::ShaderCompilerSource: | - |
648 | return GL_DEBUG_SOURCE_SHADER_COMPILER; | - |
649 | case QOpenGLDebugMessage::ThirdPartySource: | - |
650 | return GL_DEBUG_SOURCE_THIRD_PARTY; | - |
651 | case QOpenGLDebugMessage::ApplicationSource: | - |
652 | return GL_DEBUG_SOURCE_APPLICATION; | - |
653 | case QOpenGLDebugMessage::OtherSource: | - |
654 | return GL_DEBUG_SOURCE_OTHER; | - |
655 | case QOpenGLDebugMessage::AnySource: | - |
656 | break; | - |
657 | } | - |
658 | | - |
659 | Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid message source"); | - |
660 | return GL_DEBUG_SOURCE_OTHER; | - |
661 | } | - |
662 | | - |
663 | | - |
664 | | - |
665 | | - |
666 | static QString qt_messageSourceToString(QOpenGLDebugMessage::Source source) | - |
667 | { | - |
668 | switch (source) { | - |
669 | case QOpenGLDebugMessage::InvalidSource: | - |
670 | return QStringLiteral("InvalidSource"); | - |
671 | case QOpenGLDebugMessage::APISource: | - |
672 | return QStringLiteral("APISource"); | - |
673 | case QOpenGLDebugMessage::WindowSystemSource: | - |
674 | return QStringLiteral("WindowSystemSource"); | - |
675 | case QOpenGLDebugMessage::ShaderCompilerSource: | - |
676 | return QStringLiteral("ShaderCompilerSource"); | - |
677 | case QOpenGLDebugMessage::ThirdPartySource: | - |
678 | return QStringLiteral("ThirdPartySource"); | - |
679 | case QOpenGLDebugMessage::ApplicationSource: | - |
680 | return QStringLiteral("ApplicationSource"); | - |
681 | case QOpenGLDebugMessage::OtherSource: | - |
682 | return QStringLiteral("OtherSource"); | - |
683 | case QOpenGLDebugMessage::AnySource: | - |
684 | return QStringLiteral("AnySource"); | - |
685 | } | - |
686 | | - |
687 | Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown message source"); | - |
688 | return QString(); | - |
689 | } | - |
690 | | - |
691 | | - |
692 | | - |
693 | | - |
694 | static QOpenGLDebugMessage::Type qt_messageTypeFromGL(GLenum type) | - |
695 | { | - |
696 | switch (type) { | - |
697 | case GL_DEBUG_TYPE_ERROR: | - |
698 | return QOpenGLDebugMessage::ErrorType; | - |
699 | case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: | - |
700 | return QOpenGLDebugMessage::DeprecatedBehaviorType; | - |
701 | case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: | - |
702 | return QOpenGLDebugMessage::UndefinedBehaviorType; | - |
703 | case GL_DEBUG_TYPE_PORTABILITY: | - |
704 | return QOpenGLDebugMessage::PortabilityType; | - |
705 | case GL_DEBUG_TYPE_PERFORMANCE: | - |
706 | return QOpenGLDebugMessage::PerformanceType; | - |
707 | case GL_DEBUG_TYPE_OTHER: | - |
708 | return QOpenGLDebugMessage::OtherType; | - |
709 | case GL_DEBUG_TYPE_MARKER: | - |
710 | return QOpenGLDebugMessage::MarkerType; | - |
711 | case GL_DEBUG_TYPE_PUSH_GROUP: | - |
712 | return QOpenGLDebugMessage::GroupPushType; | - |
713 | case GL_DEBUG_TYPE_POP_GROUP: | - |
714 | return QOpenGLDebugMessage::GroupPopType; | - |
715 | } | - |
716 | | - |
717 | Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown message type from GL"); | - |
718 | return QOpenGLDebugMessage::OtherType; | - |
719 | } | - |
720 | | - |
721 | | - |
722 | | - |
723 | | - |
724 | static GLenum qt_messageTypeToGL(QOpenGLDebugMessage::Type type) | - |
725 | { | - |
726 | switch (type) { | - |
727 | case QOpenGLDebugMessage::InvalidType: | - |
728 | break; | - |
729 | case QOpenGLDebugMessage::ErrorType: | - |
730 | return GL_DEBUG_TYPE_ERROR; | - |
731 | case QOpenGLDebugMessage::DeprecatedBehaviorType: | - |
732 | return GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR; | - |
733 | case QOpenGLDebugMessage::UndefinedBehaviorType: | - |
734 | return GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR; | - |
735 | case QOpenGLDebugMessage::PortabilityType: | - |
736 | return GL_DEBUG_TYPE_PORTABILITY; | - |
737 | case QOpenGLDebugMessage::PerformanceType: | - |
738 | return GL_DEBUG_TYPE_PERFORMANCE; | - |
739 | case QOpenGLDebugMessage::OtherType: | - |
740 | return GL_DEBUG_TYPE_OTHER; | - |
741 | case QOpenGLDebugMessage::MarkerType: | - |
742 | return GL_DEBUG_TYPE_MARKER; | - |
743 | case QOpenGLDebugMessage::GroupPushType: | - |
744 | return GL_DEBUG_TYPE_PUSH_GROUP; | - |
745 | case QOpenGLDebugMessage::GroupPopType: | - |
746 | return GL_DEBUG_TYPE_POP_GROUP; | - |
747 | case QOpenGLDebugMessage::AnyType: | - |
748 | break; | - |
749 | } | - |
750 | | - |
751 | Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid message type"); | - |
752 | return GL_DEBUG_TYPE_OTHER; | - |
753 | } | - |
754 | | - |
755 | | - |
756 | | - |
757 | | - |
758 | static QString qt_messageTypeToString(QOpenGLDebugMessage::Type type) | - |
759 | { | - |
760 | switch (type) { | - |
761 | case QOpenGLDebugMessage::InvalidType: | - |
762 | return QStringLiteral("InvalidType"); | - |
763 | case QOpenGLDebugMessage::ErrorType: | - |
764 | return QStringLiteral("ErrorType"); | - |
765 | case QOpenGLDebugMessage::DeprecatedBehaviorType: | - |
766 | return QStringLiteral("DeprecatedBehaviorType"); | - |
767 | case QOpenGLDebugMessage::UndefinedBehaviorType: | - |
768 | return QStringLiteral("UndefinedBehaviorType"); | - |
769 | case QOpenGLDebugMessage::PortabilityType: | - |
770 | return QStringLiteral("PortabilityType"); | - |
771 | case QOpenGLDebugMessage::PerformanceType: | - |
772 | return QStringLiteral("PerformanceType"); | - |
773 | case QOpenGLDebugMessage::OtherType: | - |
774 | return QStringLiteral("OtherType"); | - |
775 | case QOpenGLDebugMessage::MarkerType: | - |
776 | return QStringLiteral("MarkerType"); | - |
777 | case QOpenGLDebugMessage::GroupPushType: | - |
778 | return QStringLiteral("GroupPushType"); | - |
779 | case QOpenGLDebugMessage::GroupPopType: | - |
780 | return QStringLiteral("GroupPopType"); | - |
781 | case QOpenGLDebugMessage::AnyType: | - |
782 | return QStringLiteral("AnyType"); | - |
783 | } | - |
784 | | - |
785 | Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown message type"); | - |
786 | return QString(); | - |
787 | } | - |
788 | | - |
789 | | - |
790 | | - |
791 | | - |
792 | static QOpenGLDebugMessage::Severity qt_messageSeverityFromGL(GLenum severity) | - |
793 | { | - |
794 | switch (severity) { | - |
795 | case GL_DEBUG_SEVERITY_HIGH: | - |
796 | return QOpenGLDebugMessage::HighSeverity; | - |
797 | case GL_DEBUG_SEVERITY_MEDIUM: | - |
798 | return QOpenGLDebugMessage::MediumSeverity; | - |
799 | case GL_DEBUG_SEVERITY_LOW: | - |
800 | return QOpenGLDebugMessage::LowSeverity; | - |
801 | case GL_DEBUG_SEVERITY_NOTIFICATION: | - |
802 | return QOpenGLDebugMessage::NotificationSeverity; | - |
803 | } | - |
804 | | - |
805 | Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown message severity from GL"); | - |
806 | return QOpenGLDebugMessage::NotificationSeverity; | - |
807 | } | - |
808 | | - |
809 | | - |
810 | | - |
811 | | - |
812 | static GLenum qt_messageSeverityToGL(QOpenGLDebugMessage::Severity severity) | - |
813 | { | - |
814 | switch (severity) { | - |
815 | case QOpenGLDebugMessage::InvalidSeverity: | - |
816 | break; | - |
817 | case QOpenGLDebugMessage::HighSeverity: | - |
818 | return GL_DEBUG_SEVERITY_HIGH; | - |
819 | case QOpenGLDebugMessage::MediumSeverity: | - |
820 | return GL_DEBUG_SEVERITY_MEDIUM; | - |
821 | case QOpenGLDebugMessage::LowSeverity: | - |
822 | return GL_DEBUG_SEVERITY_LOW; | - |
823 | case QOpenGLDebugMessage::NotificationSeverity: | - |
824 | return GL_DEBUG_SEVERITY_NOTIFICATION; | - |
825 | case QOpenGLDebugMessage::AnySeverity: | - |
826 | break; | - |
827 | } | - |
828 | | - |
829 | Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid message severity"); | - |
830 | return GL_DEBUG_SEVERITY_NOTIFICATION; | - |
831 | } | - |
832 | | - |
833 | | - |
834 | | - |
835 | | - |
836 | static QString qt_messageSeverityToString(QOpenGLDebugMessage::Severity severity) | - |
837 | { | - |
838 | switch (severity) { | - |
839 | case QOpenGLDebugMessage::InvalidSeverity: | - |
840 | return QStringLiteral("InvalidSeverity"); | - |
841 | case QOpenGLDebugMessage::HighSeverity: | - |
842 | return QStringLiteral("HighSeverity"); | - |
843 | case QOpenGLDebugMessage::MediumSeverity: | - |
844 | return QStringLiteral("MediumSeverity"); | - |
845 | case QOpenGLDebugMessage::LowSeverity: | - |
846 | return QStringLiteral("LowSeverity"); | - |
847 | case QOpenGLDebugMessage::NotificationSeverity: | - |
848 | return QStringLiteral("NotificationSeverity"); | - |
849 | case QOpenGLDebugMessage::AnySeverity: | - |
850 | return QStringLiteral("AnySeverity"); | - |
851 | } | - |
852 | | - |
853 | Q_ASSERT_X(false, Q_FUNC_INFO, "Unknown message severity"); | - |
854 | return QString(); | - |
855 | } | - |
856 | | - |
857 | class QOpenGLDebugMessagePrivate : public QSharedData | - |
858 | { | - |
859 | public: | - |
860 | QOpenGLDebugMessagePrivate(); | - |
861 | | - |
862 | QString message; | - |
863 | GLuint id; | - |
864 | QOpenGLDebugMessage::Source source; | - |
865 | QOpenGLDebugMessage::Type type; | - |
866 | QOpenGLDebugMessage::Severity severity; | - |
867 | }; | - |
868 | | - |
869 | | - |
870 | | - |
871 | | - |
872 | QOpenGLDebugMessagePrivate::QOpenGLDebugMessagePrivate() | - |
873 | : message(), | - |
874 | id(0), | - |
875 | source(QOpenGLDebugMessage::InvalidSource), | - |
876 | type(QOpenGLDebugMessage::InvalidType), | - |
877 | severity(QOpenGLDebugMessage::InvalidSeverity) | - |
878 | { | - |
879 | } | - |
880 | | - |
881 | | - |
882 | | - |
883 | | - |
884 | | - |
885 | | - |
886 | | - |
887 | | - |
888 | | - |
889 | | - |
890 | | - |
891 | | - |
892 | | - |
893 | QOpenGLDebugMessage::QOpenGLDebugMessage() | - |
894 | : d(new QOpenGLDebugMessagePrivate) | - |
895 | { | - |
896 | } | - |
897 | | - |
898 | | - |
899 | | - |
900 | | - |
901 | | - |
902 | | - |
903 | QOpenGLDebugMessage::QOpenGLDebugMessage(const QOpenGLDebugMessage &debugMessage) | - |
904 | : d(debugMessage.d) | - |
905 | { | - |
906 | } | - |
907 | | - |
908 | | - |
909 | | - |
910 | | - |
911 | QOpenGLDebugMessage::~QOpenGLDebugMessage() | - |
912 | { | - |
913 | } | - |
914 | | - |
915 | | - |
916 | | - |
917 | | - |
918 | | - |
919 | QOpenGLDebugMessage &QOpenGLDebugMessage::operator=(const QOpenGLDebugMessage &debugMessage) | - |
920 | { | - |
921 | d = debugMessage.d; | - |
922 | return *this; | - |
923 | } | - |
924 | | - |
925 | | - |
926 | | - |
927 | | - |
928 | | - |
929 | | - |
930 | | - |
931 | | - |
932 | | - |
933 | | - |
934 | | - |
935 | | - |
936 | | - |
937 | | - |
938 | | - |
939 | | - |
940 | | - |
941 | QOpenGLDebugMessage::Source QOpenGLDebugMessage::source() const | - |
942 | { | - |
943 | return d->source; | - |
944 | } | - |
945 | | - |
946 | | - |
947 | | - |
948 | | - |
949 | QOpenGLDebugMessage::Type QOpenGLDebugMessage::type() const | - |
950 | { | - |
951 | return d->type; | - |
952 | } | - |
953 | | - |
954 | | - |
955 | | - |
956 | | - |
957 | QOpenGLDebugMessage::Severity QOpenGLDebugMessage::severity() const | - |
958 | { | - |
959 | return d->severity; | - |
960 | } | - |
961 | | - |
962 | | - |
963 | | - |
964 | | - |
965 | GLuint QOpenGLDebugMessage::id() const | - |
966 | { | - |
967 | return d->id; | - |
968 | } | - |
969 | | - |
970 | | - |
971 | | - |
972 | | - |
973 | QString QOpenGLDebugMessage::message() const | - |
974 | { | - |
975 | return d->message; | - |
976 | } | - |
977 | | - |
978 | | - |
979 | | - |
980 | | - |
981 | | - |
982 | | - |
983 | | - |
984 | | - |
985 | QOpenGLDebugMessage QOpenGLDebugMessage::createApplicationMessage(const QString &text, | - |
986 | GLuint id, | - |
987 | QOpenGLDebugMessage::Severity severity, | - |
988 | QOpenGLDebugMessage::Type type) | - |
989 | { | - |
990 | QOpenGLDebugMessage m; | - |
991 | m.d->message = text; | - |
992 | m.d->id = id; | - |
993 | m.d->severity = severity; | - |
994 | m.d->type = type; | - |
995 | m.d->source = ApplicationSource; | - |
996 | return m; | - |
997 | } | - |
998 | | - |
999 | | - |
1000 | | - |
1001 | | - |
1002 | | - |
1003 | | - |
1004 | | - |
1005 | | - |
1006 | QOpenGLDebugMessage QOpenGLDebugMessage::createThirdPartyMessage(const QString &text, | - |
1007 | GLuint id, | - |
1008 | QOpenGLDebugMessage::Severity severity, | - |
1009 | QOpenGLDebugMessage::Type type) | - |
1010 | { | - |
1011 | QOpenGLDebugMessage m; | - |
1012 | m.d->message = text; | - |
1013 | m.d->id = id; | - |
1014 | m.d->severity = severity; | - |
1015 | m.d->type = type; | - |
1016 | m.d->source = ThirdPartySource; | - |
1017 | return m; | - |
1018 | } | - |
1019 | | - |
1020 | | - |
1021 | | - |
1022 | | - |
1023 | | - |
1024 | | - |
1025 | | - |
1026 | | - |
1027 | bool QOpenGLDebugMessage::operator==(const QOpenGLDebugMessage &debugMessage) const | - |
1028 | { | - |
1029 | return (d == debugMessage.d) | - |
1030 | || (d->id == debugMessage.d->id | - |
1031 | && d->source == debugMessage.d->source | - |
1032 | && d->type == debugMessage.d->type | - |
1033 | && d->severity == debugMessage.d->severity | - |
1034 | && d->message == debugMessage.d->message); | - |
1035 | } | - |
1036 | | - |
1037 | | - |
1038 | | - |
1039 | | - |
1040 | | - |
1041 | | - |
1042 | | - |
1043 | | - |
1044 | | - |
1045 | | - |
1046 | #ifndef QT_NO_DEBUG_STREAM | - |
1047 | | - |
1048 | | - |
1049 | | - |
1050 | | - |
1051 | | - |
1052 | | - |
1053 | QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Source source) | - |
1054 | { | - |
1055 | QDebugStateSaver saver(debug); | - |
1056 | debug.nospace() << "QOpenGLDebugMessage::Source(" | - |
1057 | << qt_messageSourceToString(source) | - |
1058 | << ')'; | - |
1059 | return debug; | - |
1060 | } | - |
1061 | | - |
1062 | | - |
1063 | | - |
1064 | | - |
1065 | | - |
1066 | | - |
1067 | | - |
1068 | QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Type type) | - |
1069 | { | - |
1070 | QDebugStateSaver saver(debug); | - |
1071 | debug.nospace() << "QOpenGLDebugMessage::Type(" | - |
1072 | << qt_messageTypeToString(type) | - |
1073 | << ')'; | - |
1074 | return debug; | - |
1075 | } | - |
1076 | | - |
1077 | | - |
1078 | | - |
1079 | | - |
1080 | | - |
1081 | | - |
1082 | | - |
1083 | QDebug operator<<(QDebug debug, QOpenGLDebugMessage::Severity severity) | - |
1084 | { | - |
1085 | QDebugStateSaver saver(debug); | - |
1086 | debug.nospace() << "QOpenGLDebugMessage::Severity(" | - |
1087 | << qt_messageSeverityToString(severity) | - |
1088 | << ')'; | - |
1089 | return debug; | - |
1090 | } | - |
1091 | | - |
1092 | | - |
1093 | | - |
1094 | | - |
1095 | | - |
1096 | | - |
1097 | | - |
1098 | QDebug operator<<(QDebug debug, const QOpenGLDebugMessage &message) | - |
1099 | { | - |
1100 | QDebugStateSaver saver(debug); | - |
1101 | debug.nospace() << "QOpenGLDebugMessage(" | - |
1102 | << qt_messageSourceToString(message.source()) << ", " | - |
1103 | << message.id() << ", " | - |
1104 | << message.message() << ", " | - |
1105 | << qt_messageSeverityToString(message.severity()) << ", " | - |
1106 | << qt_messageTypeToString(message.type()) << ')'; | - |
1107 | return debug; | - |
1108 | | - |
1109 | } | - |
1110 | #endif // QT_NO_DEBUG_STREAM | - |
1111 | | - |
1112 | typedef void (QOPENGLF_APIENTRYP qt_glDebugMessageControl_t)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); | - |
1113 | typedef void (QOPENGLF_APIENTRYP qt_glDebugMessageInsert_t)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); | - |
1114 | typedef void (QOPENGLF_APIENTRYP qt_glDebugMessageCallback_t)(GLDEBUGPROC callback, const void *userParam); | - |
1115 | typedef GLuint (QOPENGLF_APIENTRYP qt_glGetDebugMessageLog_t)(GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); | - |
1116 | typedef void (QOPENGLF_APIENTRYP qt_glPushDebugGroup_t)(GLenum source, GLuint id, GLsizei length, const GLchar *message); | - |
1117 | typedef void (QOPENGLF_APIENTRYP qt_glPopDebugGroup_t)(); | - |
1118 | typedef void (QOPENGLF_APIENTRYP qt_glGetPointerv_t)(GLenum pname, GLvoid **params); | - |
1119 | | - |
1120 | class QOpenGLDebugLoggerPrivate : public QObjectPrivate | - |
1121 | { | - |
1122 | Q_DECLARE_PUBLIC(QOpenGLDebugLogger) | - |
1123 | public: | - |
1124 | QOpenGLDebugLoggerPrivate(); | - |
1125 | | - |
1126 | void handleMessage(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *rawMessage); | - |
1127 | void controlDebugMessages(QOpenGLDebugMessage::Sources sources, | - |
1128 | QOpenGLDebugMessage::Types types, | - |
1129 | QOpenGLDebugMessage::Severities severities, | - |
1130 | const QVector<GLuint> &ids, | - |
1131 | const QByteArray &callerName, | - |
1132 | bool enable); | - |
1133 | void _q_contextAboutToBeDestroyed(); | - |
1134 | | - |
1135 | qt_glDebugMessageControl_t glDebugMessageControl; | - |
1136 | qt_glDebugMessageInsert_t glDebugMessageInsert; | - |
1137 | qt_glDebugMessageCallback_t glDebugMessageCallback; | - |
1138 | qt_glGetDebugMessageLog_t glGetDebugMessageLog; | - |
1139 | qt_glPushDebugGroup_t glPushDebugGroup; | - |
1140 | qt_glPopDebugGroup_t glPopDebugGroup; | - |
1141 | qt_glGetPointerv_t glGetPointerv; | - |
1142 | | - |
1143 | GLDEBUGPROC oldDebugCallbackFunction; | - |
1144 | void *oldDebugCallbackParameter; | - |
1145 | QOpenGLContext *context; | - |
1146 | GLint maxMessageLength; | - |
1147 | QOpenGLDebugLogger::LoggingMode loggingMode; | - |
1148 | bool initialized : 1; | - |
1149 | bool isLogging : 1; | - |
1150 | bool debugWasEnabled : 1; | - |
1151 | bool syncDebugWasEnabled : 1; | - |
1152 | }; | - |
1153 | | - |
1154 | | - |
1155 | | - |
1156 | | - |
1157 | QOpenGLDebugLoggerPrivate::QOpenGLDebugLoggerPrivate() | - |
1158 | : glDebugMessageControl(0), | - |
1159 | glDebugMessageInsert(0), | - |
1160 | glDebugMessageCallback(0), | - |
1161 | glGetDebugMessageLog(0), | - |
1162 | glPushDebugGroup(0), | - |
1163 | glPopDebugGroup(0), | - |
1164 | oldDebugCallbackFunction(0), | - |
1165 | context(0), | - |
1166 | maxMessageLength(0), | - |
1167 | loggingMode(QOpenGLDebugLogger::AsynchronousLogging), | - |
1168 | initialized(false), | - |
1169 | isLogging(false), | - |
1170 | debugWasEnabled(false), | - |
1171 | syncDebugWasEnabled(false) | - |
1172 | { | - |
1173 | } | - |
1174 | | - |
1175 | | - |
1176 | | - |
1177 | | - |
1178 | void QOpenGLDebugLoggerPrivate::handleMessage(GLenum source, | - |
1179 | GLenum type, | - |
1180 | GLuint id, | - |
1181 | GLenum severity, | - |
1182 | GLsizei length, | - |
1183 | const GLchar *rawMessage) | - |
1184 | { | - |
1185 | if (oldDebugCallbackFunction) | - |
1186 | oldDebugCallbackFunction(source, type, id, severity, length, rawMessage, oldDebugCallbackParameter); | - |
1187 | | - |
1188 | QOpenGLDebugMessage message; | - |
1189 | | - |
1190 | QOpenGLDebugMessagePrivate *messagePrivate = message.d.data(); | - |
1191 | messagePrivate->source = qt_messageSourceFromGL(source); | - |
1192 | messagePrivate->type = qt_messageTypeFromGL(type); | - |
1193 | messagePrivate->id = id; | - |
1194 | messagePrivate->severity = qt_messageSeverityFromGL(severity); | - |
1195 | | - |
1196 | | - |
1197 | messagePrivate->message = QString::fromUtf8(rawMessage); | - |
1198 | | - |
1199 | Q_Q(QOpenGLDebugLogger); | - |
1200 | emit q->messageLogged(message); | - |
1201 | } | - |
1202 | | - |
1203 | | - |
1204 | | - |
1205 | | - |
1206 | void QOpenGLDebugLoggerPrivate::controlDebugMessages(QOpenGLDebugMessage::Sources sources, | - |
1207 | QOpenGLDebugMessage::Types types, | - |
1208 | QOpenGLDebugMessage::Severities severities, | - |
1209 | const QVector<GLuint> &ids, | - |
1210 | const QByteArray &callerName, | - |
1211 | bool enable) | - |
1212 | { | - |
1213 | if (!initialized) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1214 | qWarning("QOpenGLDebugLogger::%s(): object must be initialized before enabling/disabling messages", callerName.constData()); | - |
1215 | return; never executed: return; | 0 |
1216 | } | - |
1217 | if (sources == QOpenGLDebugMessage::InvalidSource) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1218 | qWarning("QOpenGLDebugLogger::%s(): invalid source specified", callerName.constData()); | - |
1219 | return; never executed: return; | 0 |
1220 | } | - |
1221 | if (types == QOpenGLDebugMessage::InvalidType) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1222 | qWarning("QOpenGLDebugLogger::%s(): invalid type specified", callerName.constData()); | - |
1223 | return; never executed: return; | 0 |
1224 | } | - |
1225 | if (severities == QOpenGLDebugMessage::InvalidSeverity) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1226 | qWarning("QOpenGLDebugLogger::%s(): invalid severity specified", callerName.constData()); | - |
1227 | return; never executed: return; | 0 |
1228 | } | - |
1229 | | - |
1230 | QVarLengthArray<GLenum, 8> glSources; | - |
1231 | QVarLengthArray<GLenum, 8> glTypes; | - |
1232 | QVarLengthArray<GLenum, 8> glSeverities; | - |
1233 | | - |
1234 | if (ids.count() > 0) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1235 | Q_ASSERT(severities == QOpenGLDebugMessage::AnySeverity); | - |
1236 | | - |
1237 | | - |
1238 | | - |
1239 | | - |
1240 | | - |
1241 | | - |
1242 | | - |
1243 | | - |
1244 | | - |
1245 | | - |
1246 | | - |
1247 | | - |
1248 | if (sources == QOpenGLDebugMessage::AnySource) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1249 | sources = QOpenGLDebugMessage::InvalidSource; | - |
1250 | for (uint i = 1; i <= QOpenGLDebugMessage::LastSource; i = i << 1)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1251 | sources |= QOpenGLDebugMessage::Source(i); never executed: sources |= QOpenGLDebugMessage::Source(i); | 0 |
1252 | } never executed: end of block | 0 |
1253 | | - |
1254 | if (types == QOpenGLDebugMessage::AnyType) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1255 | types = QOpenGLDebugMessage::InvalidType; | - |
1256 | for (uint i = 1; i <= QOpenGLDebugMessage::LastType; i = i << 1)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1257 | types |= QOpenGLDebugMessage::Type(i); never executed: types |= QOpenGLDebugMessage::Type(i); | 0 |
1258 | } never executed: end of block | 0 |
1259 | } never executed: end of block | 0 |
1260 | | - |
1261 | #define CONVERT_TO_GL_DEBUG_MESSAGE_CONTROL_PARAMETERS(type, source, target) \ | - |
1262 | if (source == QOpenGLDebugMessage::Any ## type) { \ | - |
1263 | target << GL_DONT_CARE; \ | - |
1264 | } else { \ | - |
1265 | for (uint i = 1; i <= QOpenGLDebugMessage::Last ## type; i = i << 1) \ | - |
1266 | if (source.testFlag(QOpenGLDebugMessage:: type (i))) \ | - |
1267 | target << qt_message ## type ## ToGL (QOpenGLDebugMessage:: type (i)); \ | - |
1268 | } | - |
1269 | | - |
1270 | CONVERT_TO_GL_DEBUG_MESSAGE_CONTROL_PARAMETERS(Source, sources, glSources) never executed: end of block never executed: glSources << qt_messageSourceToGL (QOpenGLDebugMessage:: Source (i)); never executed: end of block TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1271 | CONVERT_TO_GL_DEBUG_MESSAGE_CONTROL_PARAMETERS(Type, types, glTypes) never executed: end of block never executed: glTypes << qt_messageTypeToGL (QOpenGLDebugMessage:: Type (i)); never executed: end of block TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1272 | CONVERT_TO_GL_DEBUG_MESSAGE_CONTROL_PARAMETERS(Severity, severities, glSeverities) never executed: end of block never executed: glSeverities << qt_messageSeverityToGL (QOpenGLDebugMessage:: Severity (i)); never executed: end of block TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1273 | #undef CONVERT_TO_GL_DEBUG_MESSAGE_CONTROL_PARAMETERS | - |
1274 | | - |
1275 | const GLsizei idCount = ids.count(); | - |
1276 | | - |
1277 | | - |
1278 | const GLuint * const idPtr = idCount ? ids.constData() : 0;TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1279 | | - |
1280 | foreachfor (GLenum source ,: glSources) | - |
1281 | foreachfor (GLenum type ,: glTypes) | - |
1282 | foreachfor (GLenum severity ,: glSeverities) | - |
1283 | glDebugMessageControl(source, type, severity, idCount, idPtr, GLboolean(enable)); never executed: glDebugMessageControl(source, type, severity, idCount, idPtr, GLboolean(enable)); | 0 |
1284 | } never executed: end of block | 0 |
1285 | | - |
1286 | | - |
1287 | | - |
1288 | | - |
1289 | void QOpenGLDebugLoggerPrivate::_q_contextAboutToBeDestroyed() | - |
1290 | { | - |
1291 | Q_ASSERT(context); | - |
1292 | | - |
1293 | | - |
1294 | | - |
1295 | | - |
1296 | QOpenGLContext *currentContext = QOpenGLContext::currentContext(); | - |
1297 | QSurface *currentSurface = 0; | - |
1298 | | - |
1299 | QScopedPointer<QOffscreenSurface> offscreenSurface; | - |
1300 | | - |
1301 | if (context != currentContext) { | - |
1302 | | - |
1303 | if (currentContext) | - |
1304 | currentSurface = currentContext->surface(); | - |
1305 | | - |
1306 | offscreenSurface.reset(new QOffscreenSurface); | - |
1307 | offscreenSurface->setFormat(context->format()); | - |
1308 | offscreenSurface->create(); | - |
1309 | if (!context->makeCurrent(offscreenSurface.data())) | - |
1310 | qWarning("QOpenGLDebugLoggerPrivate::_q_contextAboutToBeDestroyed(): could not make the owning GL context current for cleanup"); | - |
1311 | } | - |
1312 | | - |
1313 | Q_Q(QOpenGLDebugLogger); | - |
1314 | q->stopLogging(); | - |
1315 | | - |
1316 | if (offscreenSurface) { | - |
1317 | | - |
1318 | if (currentContext) | - |
1319 | currentContext->makeCurrent(currentSurface); | - |
1320 | else | - |
1321 | context->doneCurrent(); | - |
1322 | } | - |
1323 | | - |
1324 | QObject::disconnect(context, SIGNAL(aboutToBeDestroyed()), q, SLOT(_q_contextAboutToBeDestroyed())); | - |
1325 | context = 0; | - |
1326 | initialized = false; | - |
1327 | } | - |
1328 | | - |
1329 | extern "C" { | - |
1330 | static void QOPENGLF_APIENTRY qt_opengl_debug_callback(GLenum source, | - |
1331 | GLenum type, | - |
1332 | GLuint id, | - |
1333 | GLenum severity, | - |
1334 | GLsizei length, | - |
1335 | const GLchar *rawMessage, | - |
1336 | const GLvoid *userParam) | - |
1337 | { | - |
1338 | QOpenGLDebugLoggerPrivate *loggerPrivate = static_cast<QOpenGLDebugLoggerPrivate *>(const_cast<GLvoid *>(userParam)); | - |
1339 | loggerPrivate->handleMessage(source, type, id, severity, length, rawMessage); | - |
1340 | } | - |
1341 | } | - |
1342 | | - |
1343 | | - |
1344 | | - |
1345 | | - |
1346 | | - |
1347 | | - |
1348 | | - |
1349 | | - |
1350 | QOpenGLDebugLogger::QOpenGLDebugLogger(QObject *parent) | - |
1351 | : QObject(*new QOpenGLDebugLoggerPrivate, parent) | - |
1352 | { | - |
1353 | | - |
1354 | | - |
1355 | | - |
1356 | qRegisterMetaType<QOpenGLDebugMessage>(); | - |
1357 | } | - |
1358 | | - |
1359 | | - |
1360 | | - |
1361 | | - |
1362 | QOpenGLDebugLogger::~QOpenGLDebugLogger() | - |
1363 | { | - |
1364 | stopLogging(); | - |
1365 | } | - |
1366 | | - |
1367 | | - |
1368 | | - |
1369 | | - |
1370 | | - |
1371 | | - |
1372 | | - |
1373 | | - |
1374 | | - |
1375 | | - |
1376 | | - |
1377 | | - |
1378 | | - |
1379 | | - |
1380 | | - |
1381 | | - |
1382 | bool QOpenGLDebugLogger::initialize() | - |
1383 | { | - |
1384 | QOpenGLContext *context = QOpenGLContext::currentContext(); | - |
1385 | if (!context) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1386 | qWarning("QOpenGLDebugLogger::initialize(): no current OpenGL context found."); | - |
1387 | return false; never executed: return false; | 0 |
1388 | } | - |
1389 | | - |
1390 | Q_D(QOpenGLDebugLogger); | - |
1391 | if (d->context == context) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1392 | | - |
1393 | Q_ASSERT(d->initialized); | - |
1394 | return true; never executed: return true; | 0 |
1395 | } | - |
1396 | | - |
1397 | if (d->isLogging) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1398 | qWarning("QOpenGLDebugLogger::initialize(): cannot initialize the object while logging. Please stop the logging first."); | - |
1399 | return false; never executed: return false; | 0 |
1400 | } | - |
1401 | | - |
1402 | if (d->context)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1403 | disconnect(d->context, SIGNAL(aboutToBeDestroyed()), this, SLOT(_q_contextAboutToBeDestroyed())); never executed: disconnect(d->context, qFlagLocation("2""aboutToBeDestroyed()" "\0" __FILE__ ":" "1403"), this, qFlagLocation("1""_q_contextAboutToBeDestroyed()" "\0" __FILE__ ":" "1403")); | 0 |
1404 | | - |
1405 | d->initialized = false; | - |
1406 | d->context = 0; | - |
1407 | | - |
1408 | if (!context->hasExtension(QByteArrayLiteral("GL_KHR_debug")))TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1409 | return false; never executed: return false; | 0 |
1410 | | - |
1411 | d->context = context; | - |
1412 | connect(d->context, SIGNAL(aboutToBeDestroyed()), this, SLOT(_q_contextAboutToBeDestroyed())); | - |
1413 | | - |
1414 | #define GET_DEBUG_PROC_ADDRESS(procName) \ | - |
1415 | d->procName = reinterpret_cast< qt_ ## procName ## _t >( \ | - |
1416 | d->context->getProcAddress(QByteArrayLiteral(#procName))) \ | - |
1417 | ); | - |
1418 | | - |
1419 | GET_DEBUG_PROC_ADDRESS(glDebugMessageControl); | - |
1420 | GET_DEBUG_PROC_ADDRESS(glDebugMessageInsert); | - |
1421 | GET_DEBUG_PROC_ADDRESS(glDebugMessageCallback); | - |
1422 | GET_DEBUG_PROC_ADDRESS(glGetDebugMessageLog); | - |
1423 | GET_DEBUG_PROC_ADDRESS(glPushDebugGroup); | - |
1424 | GET_DEBUG_PROC_ADDRESS(glPopDebugGroup); | - |
| | |
| #if defined(Q_OS_WIN) && !defined(QT_OPENGL_ES_2) | |
| { | |
| HMODULE handle = static_cast<HMODULE>(QOpenGLContext::openGLModuleHandle()); | |
| if (!handle) | |
| handle = GetModuleHandleA("opengl32.dll"); | |
1425 | d->glGetPointerv = reinterpret_cast<qt_glGetPointerv_t>(GetProcAddress(handle, QByteArrayLiteral("glGetPointerv"))); | - |
| } | |
| #elseGET_DEBUG_PROC_ADDRESS(glGetPointerv)#endif | |
1426 | | - |
1427 | #undef GET_DEBUG_PROC_ADDRESS | - |
1428 | | - |
1429 | QOpenGLContext::currentContext()->functions()->glGetIntegerv(GL_MAX_DEBUG_MESSAGE_LENGTH, &d->maxMessageLength); | - |
1430 | | - |
1431 | #ifndef QT_NO_DEBUG | - |
1432 | if (!d->context->format().testOption(QSurfaceFormat::DebugContext)) {TRUE | never evaluated | FALSE | never evaluated |
| 0 |
1433 | qWarning("QOpenGLDebugLogger::initialize(): the current context is not a debug context:\n" | - |
1434 | " this means that the GL may not generate any debug output at all.\n" | - |
1435 | " To avoid this warning, try creating the context with the\n" | - |
1436 | " QSurfaceFormat::DebugContext surface format option."); | - |
1437 | } never executed: end of block | 0 |
1438 | #endif // QT_NO_DEBUG | - |
1439 | | - |
1440 | d->initialized = true; | - |
1441 | return true; never executed: return true; | 0 |
1442 | } | - |
1443 | | - |
1444 | | - |
1445 | | - |
1446 | | - |
1447 | | - |
1448 | | - |
1449 | bool QOpenGLDebugLogger::isLogging() const | - |
1450 | { | - |
1451 | Q_D(const QOpenGLDebugLogger); | - |
1452 | return d->isLogging; | - |
1453 | } | - |
1454 | | - |
1455 | | - |
1456 | | - |
1457 | | - |
1458 | | - |
1459 | | - |
1460 | | - |
1461 | | - |
1462 | | - |
1463 | | - |
1464 | | - |
1465 | | - |
1466 | | - |
1467 | | - |
1468 | | - |
1469 | | - |
1470 | | - |
1471 | | - |
1472 | | - |
1473 | | - |
1474 | | - |
1475 | | - |
1476 | | - |
1477 | void QOpenGLDebugLogger::startLogging(QOpenGLDebugLogger::LoggingMode loggingMode) | - |
1478 | { | - |
1479 | Q_D(QOpenGLDebugLogger); | - |
1480 | if (!d->initialized) { | - |
1481 | qWarning("QOpenGLDebugLogger::startLogging(): object must be initialized before logging can start"); | - |
1482 | return; | - |
1483 | } | - |
1484 | if (d->isLogging) { | - |
1485 | qWarning("QOpenGLDebugLogger::startLogging(): this object is already logging"); | - |
1486 | return; | - |
1487 | } | - |
1488 | | - |
1489 | d->isLogging = true; | - |
1490 | d->loggingMode = loggingMode; | - |
1491 | | - |
1492 | d->glGetPointerv(GL_DEBUG_CALLBACK_FUNCTION, reinterpret_cast<void **>(&d->oldDebugCallbackFunction)); | - |
1493 | d->glGetPointerv(GL_DEBUG_CALLBACK_USER_PARAM, &d->oldDebugCallbackParameter); | - |
1494 | | - |
1495 | d->glDebugMessageCallback(&qt_opengl_debug_callback, d); | - |
1496 | | - |
1497 | QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions(); | - |
1498 | d->debugWasEnabled = funcs->glIsEnabled(GL_DEBUG_OUTPUT); | - |
1499 | d->syncDebugWasEnabled = funcs->glIsEnabled(GL_DEBUG_OUTPUT_SYNCHRONOUS); | - |
1500 | | - |
1501 | if (d->loggingMode == SynchronousLogging) | - |
1502 | funcs->glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); | - |
1503 | else | - |
1504 | funcs->glDisable(GL_DEBUG_OUTPUT_SYNCHRONOUS); | - |
1505 | | - |
1506 | funcs->glEnable(GL_DEBUG_OUTPUT); | - |
1507 | } | - |
1508 | | - |
1509 | | - |
1510 | | - |
1511 | | - |
1512 | | - |
1513 | | - |
1514 | QOpenGLDebugLogger::LoggingMode QOpenGLDebugLogger::loggingMode() const | - |
1515 | { | - |
1516 | Q_D(const QOpenGLDebugLogger); | - |
1517 | return d->loggingMode; | - |
1518 | } | - |
1519 | | - |
1520 | | - |
1521 | | - |
1522 | | - |
1523 | | - |
1524 | | - |
1525 | void QOpenGLDebugLogger::stopLogging() | - |
1526 | { | - |
1527 | Q_D(QOpenGLDebugLogger); | - |
1528 | if (!d->isLogging) | - |
1529 | return; | - |
1530 | | - |
1531 | QOpenGLContext *currentContext = QOpenGLContext::currentContext(); | - |
1532 | if (!currentContext || currentContext != d->context) { | - |
1533 | qWarning("QOpenGLDebugLogger::stopLogging(): attempting to stop logging with the wrong OpenGL context current"); | - |
1534 | return; | - |
1535 | } | - |
1536 | | - |
1537 | d->isLogging = false; | - |
1538 | | - |
1539 | d->glDebugMessageCallback(d->oldDebugCallbackFunction, d->oldDebugCallbackParameter); | - |
1540 | | - |
1541 | QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions(); | - |
1542 | if (!d->debugWasEnabled) | - |
1543 | funcs->glDisable(GL_DEBUG_OUTPUT); | - |
1544 | | - |
1545 | if (d->syncDebugWasEnabled) | - |
1546 | funcs->glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); | - |
1547 | else | - |
1548 | funcs->glDisable(GL_DEBUG_OUTPUT_SYNCHRONOUS); | - |
1549 | } | - |
1550 | | - |
1551 | | - |
1552 | | - |
1553 | | - |
1554 | | - |
1555 | | - |
1556 | | - |
1557 | | - |
1558 | | - |
1559 | | - |
1560 | | - |
1561 | | - |
1562 | | - |
1563 | | - |
1564 | void QOpenGLDebugLogger::logMessage(const QOpenGLDebugMessage &debugMessage) | - |
1565 | { | - |
1566 | Q_D(QOpenGLDebugLogger); | - |
1567 | if (!d->initialized) { | - |
1568 | qWarning("QOpenGLDebugLogger::logMessage(): object must be initialized before logging messages"); | - |
1569 | return; | - |
1570 | } | - |
1571 | if (debugMessage.source() != QOpenGLDebugMessage::ApplicationSource | - |
1572 | && debugMessage.source() != QOpenGLDebugMessage::ThirdPartySource) { | - |
1573 | qWarning("QOpenGLDebugLogger::logMessage(): using a message source different from ApplicationSource\n" | - |
1574 | " or ThirdPartySource is not supported by GL_KHR_debug. The message will not be logged."); | - |
1575 | return; | - |
1576 | } | - |
1577 | if (debugMessage.type() == QOpenGLDebugMessage::InvalidType | - |
1578 | || debugMessage.type() == QOpenGLDebugMessage::AnyType | - |
1579 | || debugMessage.severity() == QOpenGLDebugMessage::InvalidSeverity | - |
1580 | || debugMessage.severity() == QOpenGLDebugMessage::AnySeverity) { | - |
1581 | qWarning("QOpenGLDebugLogger::logMessage(): the message has a non-valid type and/or severity. The message will not be logged."); | - |
1582 | return; | - |
1583 | } | - |
1584 | | - |
1585 | const GLenum source = qt_messageSourceToGL(debugMessage.source()); | - |
1586 | const GLenum type = qt_messageTypeToGL(debugMessage.type()); | - |
1587 | const GLenum severity = qt_messageSeverityToGL(debugMessage.severity()); | - |
1588 | QByteArray rawMessage = debugMessage.message().toUtf8(); | - |
1589 | rawMessage.append('\0'); | - |
1590 | | - |
1591 | if (rawMessage.length() > d->maxMessageLength) { | - |
1592 | qWarning("QOpenGLDebugLogger::logMessage(): message too long, truncating it\n" | - |
1593 | " (%d bytes long, but the GL accepts up to %d bytes)", rawMessage.length(), d->maxMessageLength); | - |
1594 | rawMessage.resize(d->maxMessageLength - 1); | - |
1595 | rawMessage.append('\0'); | - |
1596 | } | - |
1597 | | - |
1598 | | - |
1599 | | - |
1600 | | - |
1601 | d->glDebugMessageInsert(source, | - |
1602 | type, | - |
1603 | debugMessage.id(), | - |
1604 | severity, | - |
1605 | -1, | - |
1606 | rawMessage.constData()); | - |
1607 | } | - |
1608 | | - |
1609 | | - |
1610 | | - |
1611 | | - |
1612 | | - |
1613 | | - |
1614 | | - |
1615 | | - |
1616 | | - |
1617 | | - |
1618 | | - |
1619 | | - |
1620 | | - |
1621 | | - |
1622 | | - |
1623 | | - |
1624 | | - |
1625 | | - |
1626 | | - |
1627 | void QOpenGLDebugLogger::pushGroup(const QString &name, GLuint id, QOpenGLDebugMessage::Source source) | - |
1628 | { | - |
1629 | Q_D(QOpenGLDebugLogger); | - |
1630 | if (!d->initialized) { | - |
1631 | qWarning("QOpenGLDebugLogger::pushGroup(): object must be initialized before pushing a debug group"); | - |
1632 | return; | - |
1633 | } | - |
1634 | if (source != QOpenGLDebugMessage::ApplicationSource | - |
1635 | && source != QOpenGLDebugMessage::ThirdPartySource) { | - |
1636 | qWarning("QOpenGLDebugLogger::pushGroup(): using a source different from ApplicationSource\n" | - |
1637 | " or ThirdPartySource is not supported by GL_KHR_debug. The group will not be pushed."); | - |
1638 | return; | - |
1639 | } | - |
1640 | | - |
1641 | QByteArray rawName = name.toUtf8(); | - |
1642 | rawName.append('\0'); | - |
1643 | if (rawName.length() > d->maxMessageLength) { | - |
1644 | qWarning("QOpenGLDebugLogger::pushGroup(): group name too long, truncating it\n" | - |
1645 | " (%d bytes long, but the GL accepts up to %d bytes)", rawName.length(), d->maxMessageLength); | - |
1646 | rawName.resize(d->maxMessageLength - 1); | - |
1647 | rawName.append('\0'); | - |
1648 | } | - |
1649 | | - |
1650 | | - |
1651 | | - |
1652 | | - |
1653 | d->glPushDebugGroup(qt_messageSourceToGL(source), id, -1, rawName.constData()); | - |
1654 | } | - |
1655 | | - |
1656 | | - |
1657 | | - |
1658 | | - |
1659 | | - |
1660 | | - |
1661 | | - |
1662 | | - |
1663 | | - |
1664 | | - |
1665 | | - |
1666 | | - |
1667 | | - |
1668 | | - |
1669 | | - |
1670 | void QOpenGLDebugLogger::popGroup() | - |
1671 | { | - |
1672 | Q_D(QOpenGLDebugLogger); | - |
1673 | if (!d->initialized) { | - |
1674 | qWarning("QOpenGLDebugLogger::pushGroup(): object must be initialized before popping a debug group"); | - |
1675 | return; | - |
1676 | } | - |
1677 | | - |
1678 | d->glPopDebugGroup(); | - |
1679 | } | - |
1680 | | - |
1681 | | - |
1682 | | - |
1683 | | - |
1684 | | - |
1685 | | - |
1686 | | - |
1687 | | - |
1688 | | - |
1689 | void QOpenGLDebugLogger::enableMessages(QOpenGLDebugMessage::Sources sources, | - |
1690 | QOpenGLDebugMessage::Types types, | - |
1691 | QOpenGLDebugMessage::Severities severities) | - |
1692 | { | - |
1693 | Q_D(QOpenGLDebugLogger); | - |
1694 | d->controlDebugMessages(sources, | - |
1695 | types, | - |
1696 | severities, | - |
1697 | QVector<GLuint>(), | - |
1698 | QByteArrayLiteral("enableMessages"), | - |
1699 | true); | - |
1700 | } | - |
1701 | | - |
1702 | | - |
1703 | | - |
1704 | | - |
1705 | | - |
1706 | | - |
1707 | | - |
1708 | | - |
1709 | | - |
1710 | void QOpenGLDebugLogger::enableMessages(const QVector<GLuint> &ids, | - |
1711 | QOpenGLDebugMessage::Sources sources, | - |
1712 | QOpenGLDebugMessage::Types types) | - |
1713 | { | - |
1714 | Q_D(QOpenGLDebugLogger); | - |
1715 | d->controlDebugMessages(sources, | - |
1716 | types, | - |
1717 | QOpenGLDebugMessage::AnySeverity, | - |
1718 | ids, | - |
1719 | QByteArrayLiteral("enableMessages"), | - |
1720 | true); | - |
1721 | } | - |
1722 | | - |
1723 | | - |
1724 | | - |
1725 | | - |
1726 | | - |
1727 | | - |
1728 | | - |
1729 | | - |
1730 | | - |
1731 | void QOpenGLDebugLogger::disableMessages(QOpenGLDebugMessage::Sources sources, | - |
1732 | QOpenGLDebugMessage::Types types, | - |
1733 | QOpenGLDebugMessage::Severities severities) | - |
1734 | { | - |
1735 | Q_D(QOpenGLDebugLogger); | - |
1736 | d->controlDebugMessages(sources, | - |
1737 | types, | - |
1738 | severities, | - |
1739 | QVector<GLuint>(), | - |
1740 | QByteArrayLiteral("disableMessages"), | - |
1741 | false); | - |
1742 | } | - |
1743 | | - |
1744 | | - |
1745 | | - |
1746 | | - |
1747 | | - |
1748 | | - |
1749 | | - |
1750 | | - |
1751 | | - |
1752 | void QOpenGLDebugLogger::disableMessages(const QVector<GLuint> &ids, | - |
1753 | QOpenGLDebugMessage::Sources sources, | - |
1754 | QOpenGLDebugMessage::Types types) | - |
1755 | { | - |
1756 | Q_D(QOpenGLDebugLogger); | - |
1757 | d->controlDebugMessages(sources, | - |
1758 | types, | - |
1759 | QOpenGLDebugMessage::AnySeverity, | - |
1760 | ids, | - |
1761 | QByteArrayLiteral("disableMessages"), | - |
1762 | false); | - |
1763 | } | - |
1764 | | - |
1765 | | - |
1766 | | - |
1767 | | - |
1768 | | - |
1769 | | - |
1770 | | - |
1771 | | - |
1772 | | - |
1773 | QList<QOpenGLDebugMessage> QOpenGLDebugLogger::loggedMessages() const | - |
1774 | { | - |
1775 | Q_D(const QOpenGLDebugLogger); | - |
1776 | if (!d->initialized) { | - |
1777 | qWarning("QOpenGLDebugLogger::loggedMessages(): object must be initialized before reading logged messages"); | - |
1778 | return QList<QOpenGLDebugMessage>(); | - |
1779 | } | - |
1780 | | - |
1781 | static const GLuint maxMessageCount = 128; | - |
1782 | GLuint messagesRead; | - |
1783 | GLenum messageSources[maxMessageCount]; | - |
1784 | GLenum messageTypes[maxMessageCount]; | - |
1785 | GLuint messageIds[maxMessageCount]; | - |
1786 | GLenum messageSeverities[maxMessageCount]; | - |
1787 | GLsizei messageLengths[maxMessageCount]; | - |
1788 | | - |
1789 | QByteArray messagesBuffer; | - |
1790 | messagesBuffer.resize(maxMessageCount * d->maxMessageLength); | - |
1791 | | - |
1792 | QList<QOpenGLDebugMessage> messages; | - |
1793 | do { | - |
1794 | messagesRead = d->glGetDebugMessageLog(maxMessageCount, | - |
1795 | GLsizei(messagesBuffer.size()), | - |
1796 | messageSources, | - |
1797 | messageTypes, | - |
1798 | messageIds, | - |
1799 | messageSeverities, | - |
1800 | messageLengths, | - |
1801 | messagesBuffer.data()); | - |
1802 | | - |
1803 | const char *messagesBufferPtr = messagesBuffer.constData(); | - |
1804 | for (GLuint i = 0; i < messagesRead; ++i) { | - |
1805 | QOpenGLDebugMessage message; | - |
1806 | | - |
1807 | QOpenGLDebugMessagePrivate *messagePrivate = message.d.data(); | - |
1808 | messagePrivate->source = qt_messageSourceFromGL(messageSources[i]); | - |
1809 | messagePrivate->type = qt_messageTypeFromGL(messageTypes[i]); | - |
1810 | messagePrivate->id = messageIds[i]; | - |
1811 | messagePrivate->severity = qt_messageSeverityFromGL(messageSeverities[i]); | - |
1812 | messagePrivate->message = QString::fromUtf8(messagesBufferPtr, messageLengths[i] - 1); | - |
1813 | | - |
1814 | messagesBufferPtr += messageLengths[i]; | - |
1815 | messages << message; | - |
1816 | } | - |
1817 | } while (messagesRead == maxMessageCount); | - |
1818 | | - |
1819 | return messages; | - |
1820 | } | - |
1821 | | - |
1822 | | - |
1823 | | - |
1824 | | - |
1825 | | - |
1826 | | - |
1827 | | - |
1828 | | - |
1829 | | - |
1830 | | - |
1831 | | - |
1832 | | - |
1833 | | - |
1834 | | - |
1835 | | - |
1836 | | - |
1837 | | - |
1838 | | - |
1839 | | - |
1840 | | - |
1841 | | - |
1842 | | - |
1843 | | - |
1844 | | - |
1845 | | - |
1846 | | - |
1847 | | - |
1848 | | - |
1849 | | - |
1850 | | - |
1851 | | - |
1852 | | - |
1853 | | - |
1854 | | - |
1855 | | - |
1856 | | - |
1857 | | - |
1858 | | - |
1859 | | - |
1860 | qint64 QOpenGLDebugLogger::maximumMessageLength() const | - |
1861 | { | - |
1862 | Q_D(const QOpenGLDebugLogger); | - |
1863 | if (!d->initialized) { | - |
1864 | qWarning("QOpenGLDebugLogger::maximumMessageLength(): object must be initialized before reading the maximum message length"); | - |
1865 | return -1; | - |
1866 | } | - |
1867 | return d->maxMessageLength; | - |
1868 | } | - |
1869 | | - |
1870 | | - |
1871 | QT_END_NAMESPACE | - |
1872 | | - |
1873 | #include "moc_qopengldebug.cpp" | - |
| | |