diff options
author | Michael Brasser <michael.brasser@live.com> | 2013-04-16 10:05:25 -0500 |
---|---|---|
committer | Michael Brasser <michael.brasser@live.com> | 2013-04-17 13:30:21 +0200 |
commit | 627b40bc805aa02860024155a2de9c43583ed07c (patch) | |
tree | 25f5be18f1e150e2b8ec63e30bf1ec29317275db | |
parent | cf6ac9189c70e76259bc07b90d8c60839e145700 (diff) |
Create m_clipProgram in correct thread.
Change-Id: I46b542ba64ab74b75bce014acc2a941d84fd95d4
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
-rw-r--r-- | customcontext/context.cpp | 19 | ||||
-rw-r--r-- | customcontext/context.h | 2 |
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 |