diff options
author | Gunnar Sletta <gunnar.sletta@jollamobile.com> | 2014-02-11 21:49:08 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-13 08:52:17 +0100 |
commit | 586ebf6c55ed095c2627185d90153ccfdc51c3d2 (patch) | |
tree | da8eb8e341912724f215a1119744926c6ddb81f3 /src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | |
parent | 0b4e717f17bf98d46e315d9eb072f64b47efe7e6 (diff) |
Enable program binary support through QSGRenderContext API.
Change-Id: I4eecff3c8a2c727d38d394305d248eddeef87e8e
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp')
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp index 42a6c23982..249cdca1da 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp @@ -138,11 +138,6 @@ ShaderManager::Shader *ShaderManager::prepareMaterial(QSGMaterial *material) QSurfaceFormat::OpenGLContextProfile profile = ctx->format().profile(); QOpenGLShaderProgram *p = s->program(); - p->addShaderFromSourceCode(QOpenGLShader::Vertex, - qsgShaderRewriter_insertZAttributes(s->vertexShader(), profile)); - p->addShaderFromSourceCode(QOpenGLShader::Fragment, - s->fragmentShader()); - char const *const *attr = s->attributeNames(); int i; for (i = 0; attr[i]; ++i) { @@ -150,14 +145,10 @@ ShaderManager::Shader *ShaderManager::prepareMaterial(QSGMaterial *material) p->bindAttributeLocation(attr[i], i); } p->bindAttributeLocation("_qt_order", i); - - p->link(); - if (!p->isLinked()) { - qDebug() << "Renderer failed shader compilation:" << endl << p->log(); + context->compile(s, material, qsgShaderRewriter_insertZAttributes(s->vertexShader(), profile), 0); + context->initialize(s); + if (!p->isLinked()) return 0; - } - - s->initialize(); shader = new Shader; shader->program = s; @@ -196,8 +187,8 @@ ShaderManager::Shader *ShaderManager::prepareMaterialNoRewrite(QSGMaterial *mate #endif QSGMaterialShader *s = static_cast<QSGMaterialShader *>(material->createShader()); - s->compile(); - s->initialize(); + context->compile(s, material); + context->initialize(s); shader = new Shader(); shader->program = s; @@ -776,7 +767,7 @@ Renderer::Renderer(QSGRenderContext *ctx) m_shaderManager = ctx->findChild<ShaderManager *>(QStringLiteral("__qt_ShaderManager"), Qt::FindDirectChildrenOnly); if (!m_shaderManager) { - m_shaderManager = new ShaderManager(); + m_shaderManager = new ShaderManager(ctx); m_shaderManager->setObjectName(QStringLiteral("__qt_ShaderManager")); m_shaderManager->setParent(ctx); QObject::connect(ctx, SIGNAL(invalidated()), m_shaderManager, SLOT(invalidated()), Qt::DirectConnection); |