summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@qt.io>2017-10-19 14:16:39 +0300
committerMika Salmela <mika.salmela@qt.io>2017-10-20 13:05:54 +0000
commitab6f94d6fb186d0003679fb4541c939555fd01c9 (patch)
treef0b06d85c8621a0682a4692cc52910208322a5dd
parentfb4bd5cfec5ca9257b3d756fce0f379085afa0f2 (diff)
Add shaders suitable for CoreProfile on declarative
Adds shaders that work on CoreProfile. Task-number: QTBUG-63807 Change-Id: Ib446521f5f013ca5a6427295b301c9743dabf1ac Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/chartsqml2/declarativeopenglrendernode.cpp29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/chartsqml2/declarativeopenglrendernode.cpp b/src/chartsqml2/declarativeopenglrendernode.cpp
index a0b4ec7f..742a9301 100644
--- a/src/chartsqml2/declarativeopenglrendernode.cpp
+++ b/src/chartsqml2/declarativeopenglrendernode.cpp
@@ -88,6 +88,26 @@ DeclarativeOpenGLRenderNode::~DeclarativeOpenGLRenderNode()
qDeleteAll(m_mouseEvents);
}
+static const char *vertexSourceCore =
+ "#version 150\n"
+ "in vec2 points;\n"
+ "uniform vec2 min;\n"
+ "uniform vec2 delta;\n"
+ "uniform float pointSize;\n"
+ "uniform mat4 matrix;\n"
+ "void main() {\n"
+ " vec2 normalPoint = vec2(-1, -1) + ((points - min) / delta);\n"
+ " gl_Position = matrix * vec4(normalPoint, 0, 1);\n"
+ " gl_PointSize = pointSize;\n"
+ "}";
+static const char *fragmentSourceCore =
+ "#version 150\n"
+ "uniform vec3 color;\n"
+ "out vec4 fragColor;\n"
+ "void main() {\n"
+ " fragColor = vec4(color,1);\n"
+ "}\n";
+
static const char *vertexSource =
"attribute highp vec2 points;\n"
"uniform highp vec2 min;\n"
@@ -111,8 +131,13 @@ void DeclarativeOpenGLRenderNode::initGL()
recreateFBO();
m_program = new QOpenGLShaderProgram;
- m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexSource);
- m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentSource);
+ if (QOpenGLContext::currentContext()->format().profile() == QSurfaceFormat::CoreProfile) {
+ m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexSourceCore);
+ m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentSourceCore);
+ } else {
+ m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexSource);
+ m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentSource);
+ }
m_program->bindAttributeLocation("points", 0);
m_program->link();