summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@live.com>2013-04-16 10:05:25 -0500
committerMichael Brasser <michael.brasser@live.com>2013-04-17 13:30:21 +0200
commit627b40bc805aa02860024155a2de9c43583ed07c (patch)
tree25f5be18f1e150e2b8ec63e30bf1ec29317275db
parentcf6ac9189c70e76259bc07b90d8c60839e145700 (diff)
Create m_clipProgram in correct thread.
Change-Id: I46b542ba64ab74b75bce014acc2a941d84fd95d4 Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
-rw-r--r--customcontext/context.cpp19
-rw-r--r--customcontext/context.h2
2 files changed, 14 insertions, 7 deletions
diff --git a/customcontext/context.cpp b/customcontext/context.cpp
index 41de804..2769f28 100644
--- a/customcontext/context.cpp
+++ b/customcontext/context.cpp
@@ -102,6 +102,7 @@ Context::Context(QObject *parent)
#ifdef CUSTOMCONTEXT_OVERLAPRENDERER
m_overlapRenderer = qgetenv("CUSTOMCONTEXT_NO_OVERLAPRENDERER").isEmpty();
+ m_clipProgram = 0;
#endif
#ifdef CUSTOMCONTEXT_ANIMATIONDRIVER
@@ -233,19 +234,20 @@ void Context::initialize(QOpenGLContext *context)
#ifdef CUSTOMCONTEXT_OVERLAPRENDERER
if (m_overlapRenderer) {
- m_clipProgram.addShaderFromSourceCode(QOpenGLShader::Vertex,
+ m_clipProgram = new QOpenGLShaderProgram();
+ m_clipProgram->addShaderFromSourceCode(QOpenGLShader::Vertex,
"attribute highp vec4 vCoord; \n"
"uniform highp mat4 matrix; \n"
"void main() { \n"
" gl_Position = matrix * vCoord; \n"
"}");
- m_clipProgram.addShaderFromSourceCode(QOpenGLShader::Fragment,
+ m_clipProgram->addShaderFromSourceCode(QOpenGLShader::Fragment,
"void main() { \n"
" gl_FragColor = vec4(0.81, 0.83, 0.12, 1.0); \n" // Trolltech green ftw!
"}");
- m_clipProgram.bindAttributeLocation("vCoord", 0);
- m_clipProgram.link();
- m_clipMatrixID = m_clipProgram.uniformLocation("matrix");
+ m_clipProgram->bindAttributeLocation("vCoord", 0);
+ m_clipProgram->link();
+ m_clipMatrixID = m_clipProgram->uniformLocation("matrix");
}
#endif
@@ -278,6 +280,11 @@ void Context::invalidate()
m_ditherProgram = 0;
#endif
+#ifdef CUSTOMCONTEXT_OVERLAPRENDERER
+ delete m_clipProgram;
+ m_clipProgram = 0;
+#endif
+
#ifdef CUSTOMCONTEXT_ATLASTEXTURE
m_atlasManager.invalidate();
#endif
@@ -324,7 +331,7 @@ QSGRenderer *Context::createRenderer()
if (m_overlapRenderer) {
OverlapRenderer::Renderer *renderer =
new OverlapRenderer::Renderer(this);
- renderer->setClipProgram(&m_clipProgram, m_clipMatrixID);
+ renderer->setClipProgram(m_clipProgram, m_clipMatrixID);
return renderer;
}
#endif
diff --git a/customcontext/context.h b/customcontext/context.h
index 72f2b87..493adf6 100644
--- a/customcontext/context.h
+++ b/customcontext/context.h
@@ -97,7 +97,7 @@ private:
#ifdef CUSTOMCONTEXT_OVERLAPRENDERER
bool m_overlapRenderer;
- QOpenGLShaderProgram m_clipProgram;
+ QOpenGLShaderProgram *m_clipProgram;
int m_clipMatrixID;
#endif