aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/scenegraph/rendernode/openglrenderer.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@theqtcompany.com>2016-06-03 11:26:58 +0200
committerLaszlo Agocs <laszlo.agocs@theqtcompany.com>2016-06-03 10:24:32 +0000
commit446661a199563b13db56aeddb7eeecf7259786d8 (patch)
tree88007ab9b4e6f9c58f188d6992266998cf98f42c /examples/quick/scenegraph/rendernode/openglrenderer.cpp
parent0e767eaa29ea0a7edb101ba87fb8367e9f056eed (diff)
Enhance rendernode example with opacity support
The opacity is already animated in the QML scene but enabling blending and using inheritedOpacity() was not done. Until now. Change-Id: Iaaf50c20302e29db85c5dfaeaab4d069cb18714e Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'examples/quick/scenegraph/rendernode/openglrenderer.cpp')
-rw-r--r--examples/quick/scenegraph/rendernode/openglrenderer.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/examples/quick/scenegraph/rendernode/openglrenderer.cpp b/examples/quick/scenegraph/rendernode/openglrenderer.cpp
index 27712e13b2..3eff70cb42 100644
--- a/examples/quick/scenegraph/rendernode/openglrenderer.cpp
+++ b/examples/quick/scenegraph/rendernode/openglrenderer.cpp
@@ -57,9 +57,6 @@ OpenGLRenderNode::~OpenGLRenderNode()
releaseResources();
}
-// No need to reimplement changedStates() since our rendering is so simple,
-// without involving any state changes.
-
void OpenGLRenderNode::releaseResources()
{
delete m_program;
@@ -84,8 +81,9 @@ void OpenGLRenderNode::init()
static const char *fragmentShaderSource =
"varying lowp vec4 col;\n"
+ "uniform lowp float opacity;\n"
"void main() {\n"
- " gl_FragColor = col;\n"
+ " gl_FragColor = col * opacity;\n"
"}\n";
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
@@ -95,6 +93,7 @@ void OpenGLRenderNode::init()
m_program->link();
m_matrixUniform = m_program->uniformLocation("matrix");
+ m_opacityUniform = m_program->uniformLocation("opacity");
const int VERTEX_SIZE = 6 * sizeof(GLfloat);
@@ -123,6 +122,7 @@ void OpenGLRenderNode::render(const RenderState *state)
m_program->bind();
m_program->setUniformValue(m_matrixUniform, *state->projectionMatrix() * *matrix());
+ m_program->setUniformValue(m_opacityUniform, float(inheritedOpacity()));
m_vbo->bind();
@@ -140,7 +140,15 @@ void OpenGLRenderNode::render(const RenderState *state)
m_program->enableAttributeArray(0);
m_program->enableAttributeArray(1);
+ f->glEnable(GL_BLEND);
+ f->glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+
f->glDrawArrays(GL_TRIANGLES, 0, 3);
}
+QSGRenderNode::StateFlags OpenGLRenderNode::changedStates() const
+{
+ return BlendState;
+}
+
#endif // QT_NO_OPENGL