[Interest] Setting current QOpenGLContext with an EGLContext

Agocs Laszlo laszlo.agocs at theqtcompany.com
Tue Sep 29 16:30:43 CEST 2015

Well, there’s no nice solution since QOffscreenSurface is backed by a window, not a pbuffer on Windows. (arguably this should be changed in some future release, for ANGLE at least, but that won’t help you now)

You can make a QOpenGLContext current with a QOffscreenSurface, then call eglMakeCurrent directly with the pbuffer surface and the  EGLContext you dig out from the QOpenGLContext. This way Qt’s tracking will be correct (when it comes to the current QOpenGLContext) too.

This is apparently exactly what you are doing already.

As for the multisample issues, it could be that multisampling is not supported for pbuffers. As a workaround you could render into an FBO with a multisample renderbuffer (assuming that’s supported) and then blit that into the default framebuffer (FBO 0) of the pbuffer surface.

From: interest-bounces+laszlo.agocs=theqtcompany.com at qt-project.org [mailto:interest-bounces+laszlo.agocs=theqtcompany.com at qt-project.org] On Behalf Of Thomas Sevaldrud
Sent: 29. september 2015 15:24
To: Interest at qt-project.org
Subject: Re: [Interest] Setting current QOpenGLContext with an EGLContext

It works if I add a dummy OffscreenSurface and make my context current on this before making the PBuffer current. Not sure if this is the best way of doing it though?

- Thomas

On Tue, Sep 29, 2015 at 11:37 AM, Thomas Sevaldrud <thomas at silentwings.no<mailto:thomas at silentwings.no>> wrote:

I'm still working on the EGL PBuffer/DirectX integration through Qt that I posted about last week :-)

Thanks to good help from this list I now have the PBuffer and DirectX texture set up with the share handle. I also have a QOpenGLContext which I have used to set up the EGL PBuffer. I don't have a QSurface though, since my surface is the EGL PBuffer.

So, the question now is how do I make the QOpenGLContext current. (I need a QOpenGLContext::currentContext() for QOpenGLFunctions and so on).

The code looks something like this:

    glContext_ = new QOpenGLContext;




    QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();

    egl_display_ = static_cast<EGLDisplay>(nativeInterface->nativeResourceForContext("eglDisplay", glContext_));

    egl_context_ = static_cast<EGLContext>(nativeInterface->nativeResourceForContext("eglContext", glContext_));

    EGLConfig egl_config = static_cast<EGLConfig>(nativeInterface->nativeResourceForContext("eglConfig", glContext_));

    EGLint attribs[] = { ...


    egl_pbuffer_ = eglCreatePbufferSurface(egl_display_, egl_config, attribs);

    ... D3D setup stuff...

    // Start rendering to PBuffer:

    eglMakeCurrent(egl_display_, egl_pbuffer_, egl_pbuffer_, egl_context_);

    ... Here I should like to set glContext current somehow...

Any ideas?

- Thomas

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150929/02af8cd7/attachment.html>

More information about the Interest mailing list