90 QOpenGLContext *ctx = QOpenGLContext::currentContext();
92 if (timer && context == ctx)
97 qWarning(
"A current OpenGL context is required to create timer query objects");
101 if (context->isOpenGLES()) {
102 qWarning(
"QOpenGLTimerQuery: Not supported on OpenGL ES");
107 core =
new QOpenGLQueryHelper(context);
110 QSurfaceFormat f = context->format();
111 if (f.version() <= std::pair(3, 2)
112 && !context->hasExtension(QByteArrayLiteral(
"GL_ARB_timer_query"))
113 && context->hasExtension(QByteArrayLiteral(
"GL_EXT_timer_query"))) {
114 ext =
new QExtTimerQueryHelper(context);
115 }
else if (f.version() <= std::pair(3, 2)
116 && !context->hasExtension(QByteArrayLiteral(
"GL_ARB_timer_query"))
117 && !context->hasExtension(QByteArrayLiteral(
"GL_EXT_timer_query"))) {
118 qWarning(
"QOpenGLTimerQuery requires one of:\n"
119 " OpenGL 3.3 or newer,\n"
120 " OpenGL 3.2 and the ARB_timer_query extension\n"
121 " or the EXT_timer query extension");
125 core->glGenQueries(1, &timer);
273QOpenGLTimerQuery::~QOpenGLTimerQuery()
275 QOpenGLContext* ctx = QOpenGLContext::currentContext();
277 Q_D(QOpenGLTimerQuery);
278 QOpenGLContext *oldContext =
nullptr;
279 if (d->context != ctx) {
281 if (d->context->makeCurrent(oldContext->surface())) {
284 qWarning(
"QOpenGLTimerQuery::~QOpenGLTimerQuery() failed to make query objects's context current");
293 if (!oldContext->makeCurrent(oldContext->surface()))
294 qWarning(
"QOpenGLTimerQuery::~QOpenGLTimerQuery() failed to restore current context");
473 if (!timers.isEmpty() && timers.at(0) != 0 && timers.size() == requestedSampleCount)
476 QOpenGLContext *ctx = QOpenGLContext::currentContext();
477 if (context && context != ctx) {
478 qWarning(
"QTimeMonitor: Attempting to use different OpenGL context to recreate timers.\n"
479 "Please call destroy() first or use the same context to previously create");
485 qWarning(
"A current OpenGL context is required to create timer query objects");
490 timers.resize(requestedSampleCount);
491 timeSamples.resize(requestedSampleCount);
494 core =
new QOpenGLQueryHelper(context);
497 QSurfaceFormat f = context->format();
498 if (f.version() <= std::pair(3, 2)
499 && !context->hasExtension(QByteArrayLiteral(
"GL_ARB_timer_query"))
500 && context->hasExtension(QByteArrayLiteral(
"GL_EXT_timer_query"))) {
501 ext =
new QExtTimerQueryHelper(context);
502 }
else if (f.version() <= std::pair(3, 2)
503 && !context->hasExtension(QByteArrayLiteral(
"GL_ARB_timer_query"))
504 && !context->hasExtension(QByteArrayLiteral(
"GL_EXT_timer_query"))) {
505 qWarning(
"QOpenGLTimeMonitor requires one of:\n"
506 " OpenGL 3.3 or newer,\n"
507 " OpenGL 3.2 and the ARB_timer_query extension\n"
508 " or the EXT_timer query extension");
512 core->glGenQueries(requestedSampleCount, timers.data());
513 return (timers.at(0) != 0);
664QOpenGLTimeMonitor::~QOpenGLTimeMonitor()
666 QOpenGLContext* ctx = QOpenGLContext::currentContext();
668 Q_D(QOpenGLTimeMonitor);
669 QOpenGLContext *oldContext =
nullptr;
670 if (d->context != ctx) {
672 if (d->context->makeCurrent(oldContext->surface())) {
675 qWarning(
"QOpenGLTimeMonitor::~QOpenGLTimeMonitor() failed to make time monitor's context current");
684 if (!oldContext->makeCurrent(oldContext->surface()))
685 qWarning(
"QOpenGLTimeMonitor::~QOpenGLTimeMonitor() failed to restore current context");