summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRhys Weatherley <rhys.weatherley@nokia.com>2009-09-25 00:42:58 (GMT)
committerRhys Weatherley <rhys.weatherley@nokia.com>2009-09-25 00:42:58 (GMT)
commit9f814e1efe11ced6d7b64d1fcc52382631f9cb52 (patch)
tree011c924414ebb7c9bf395b120f94687ccf7c1343
parentf3d15516572394b6bcd44a89dd66516fa4eba56e (diff)
downloadQt-9f814e1efe11ced6d7b64d1fcc52382631f9cb52.zip
Qt-9f814e1efe11ced6d7b64d1fcc52382631f9cb52.tar.gz
Qt-9f814e1efe11ced6d7b64d1fcc52382631f9cb52.tar.bz2
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
-rw-r--r--src/gui/egl/qegl.cpp12
-rw-r--r--src/gui/egl/qegl_p.h8
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);