Important: Please read the Qt Code of Conduct -

Share QML OpenGL context and Java in Android

  • I have a Java library which I am using to render OpenGL. In order to use this library I need to pass it a EGLContext object. I am communicating from my QML app via QAndroidJniObject and would like to create a EGLContext object from JNI and pass it to my Java library. I have tried a number of things but I can't see a way of getting a native handle for the current OpenGL context. I have this code but nativeHandle() always returns an invlaid QVariant. Is this the right way to go or is there an easier way to do this?

    QQuickWindow * window;  // This is my app window from QQuick
    QOpenGLContext * context = window->openglContext();
                if (context != nullptr)
                    QVariant nativeHandle = context->nativeHandle();
                    if (!nativeHandle.isNull() && nativeHandle.canConvert<QEGLNativeContext>())
                        QEGLNativeContext nativeContext = nativeHandle.value<QEGLNativeContext>();
                        EGLContext eglContext = nativeContext.context();
                        QAndroidJniObject egl("android/opengl/EGLContext", "(J)V", (jlong)*(int*)eglContext);
                        glContext = egl.object<jobject>();

  • For anyone else stumbling upon this issue. This is marked as fixed for release in 5.9: