diff options
author | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2016-06-03 11:26:58 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2016-06-03 10:24:32 +0000 |
commit | 446661a199563b13db56aeddb7eeecf7259786d8 (patch) | |
tree | 88007ab9b4e6f9c58f188d6992266998cf98f42c /examples/quick/scenegraph/rendernode/openglrenderer.cpp | |
parent | 0e767eaa29ea0a7edb101ba87fb8367e9f056eed (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.cpp | 16 |
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 |