From 9f814e1efe11ced6d7b64d1fcc52382631f9cb52 Mon Sep 17 00:00:00 2001 From: Rhys Weatherley Date: Fri, 25 Sep 2009 10:42:58 +1000 Subject: Make QEglContext API a little more flexible Allow higher layers in QtOpenGL and QtOpenVG to set the EGLConfig and EGLContext manually if they have some other way to determine what the values should be (e.g. constructing a special config for a specific platform). Also add a QEglProperties argument to createContext() to allow fine-tuning of the context parameters. Reviewed-by: Sarah Smith --- src/gui/egl/qegl.cpp | 12 +++--------- src/gui/egl/qegl_p.h | 8 +++++--- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp index f06c153..840b9d6 100644 --- a/src/gui/egl/qegl.cpp +++ b/src/gui/egl/qegl.cpp @@ -60,7 +60,6 @@ QEglContext::QEglContext() , ctx(EGL_NO_CONTEXT) , cfg(0) , currentSurface(EGL_NO_SURFACE) - , share(false) , current(false) { } @@ -80,11 +79,6 @@ bool QEglContext::isValid() const return (ctx != EGL_NO_CONTEXT); } -bool QEglContext::isSharing() const -{ - return share; -} - bool QEglContext::isCurrent() const { return current; @@ -159,7 +153,7 @@ bool QEglContext::chooseConfig } // Create the EGLContext. -bool QEglContext::createContext(QEglContext *shareContext) +bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties *properties) { // We need to select the correct API before calling eglCreateContext(). #ifdef EGL_OPENGL_ES_API @@ -173,6 +167,8 @@ bool QEglContext::createContext(QEglContext *shareContext) // Create a new context for the configuration. QEglProperties contextProps; + if (properties) + contextProps = *properties; #if defined(QT_OPENGL_ES_2) if (apiType == QEgl::OpenGL) contextProps.setValue(EGL_CONTEXT_CLIENT_VERSION, 2); @@ -193,7 +189,6 @@ bool QEglContext::createContext(QEglContext *shareContext) return false; } } - share = (shareContext != 0); return true; } @@ -216,7 +211,6 @@ void QEglContext::destroy() dpy = EGL_NO_DISPLAY; ctx = EGL_NO_CONTEXT; cfg = 0; - share = false; } bool QEglContext::makeCurrent(EGLSurface surface) diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h index afec29b..dc399da 100644 --- a/src/gui/egl/qegl_p.h +++ b/src/gui/egl/qegl_p.h @@ -80,7 +80,6 @@ public: ~QEglContext(); bool isValid() const; - bool isSharing() const; bool isCurrent() const; QEgl::API api() const { return apiType; } @@ -88,7 +87,7 @@ public: bool openDisplay(QPaintDevice *device); bool chooseConfig(const QEglProperties& properties, QEgl::PixelFormatMatch match = QEgl::ExactPixelFormat); - bool createContext(QEglContext *shareContext = 0); + bool createContext(QEglContext *shareContext = 0, const QEglProperties *properties = 0); EGLSurface createSurface(QPaintDevice *device, const QEglProperties *properties = 0); void destroySurface(EGLSurface surface); @@ -109,8 +108,12 @@ public: static QString errorString(EGLint code); EGLDisplay display() const { return dpy; } + EGLContext context() const { return ctx; } + void setContext(EGLContext context) { ctx = context; } + EGLConfig config() const { return cfg; } + void setConfig(EGLConfig config) { cfg = config; } QEglProperties configProperties(EGLConfig cfg = 0) const; @@ -127,7 +130,6 @@ private: EGLContext ctx; EGLConfig cfg; EGLSurface currentSurface; - bool share; bool current; static EGLDisplay getDisplay(QPaintDevice *device); -- cgit v0.12