From 10f0485464acebd281f37b78f9ab5d02ee4ada9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Breitmeyer?= <bjoern.breitmeyer@kdab.com> Date: Tue, 25 Feb 2014 10:18:06 +0100 Subject: [PATCH] Fixed regression from fd5c629f4336b1f79 Buffer offsets were wrong, and a type in the buffer content. Task-number: QTBUG-36989 Change-Id: I863976420d495b006692c4b614f74c285649cb1a Reviewed-by: Mitch Curtis <mitch.curtis@digia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com> --- .../qsgdefaultdistancefieldglyphcache.cpp | 25 +++++++++++++------ .../qsgdefaultdistancefieldglyphcache_p.h | 2 ++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp index 4a8d908d2f..a625eebd5d 100644 --- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp +++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp @@ -69,7 +69,7 @@ QSGDefaultDistanceFieldGlyphCache::QSGDefaultDistanceFieldGlyphCache(QSGDistance { m_blitBuffer.create(); m_blitBuffer.bind(); - static GLfloat buffer[16] = {1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, + static GLfloat buffer[16] = {-1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f}; m_blitBuffer.allocate(buffer, sizeof(buffer)); m_blitBuffer.release(); @@ -405,13 +405,21 @@ void QSGDefaultDistanceFieldGlyphCache::resizeTexture(TextureInfo *texInfo, int glViewport(0, 0, oldWidth, oldHeight); - m_blitBuffer.bind(); - + const bool vaoInit = m_vao.isCreated(); + if (isCoreProfile()) { + if ( !vaoInit ) + m_vao.create(); + m_vao.bind(); + } m_blitProgram->bind(); - m_blitProgram->enableAttributeArray(int(QT_VERTEX_COORDS_ATTR)); - m_blitProgram->enableAttributeArray(int(QT_TEXTURE_COORDS_ATTR)); - m_blitProgram->setAttributeBuffer(int(QT_VERTEX_COORDS_ATTR), GL_FLOAT, 0, 2); - m_blitProgram->setAttributeBuffer(int(QT_TEXTURE_COORDS_ATTR), GL_FLOAT, 8, 2); + if (!vaoInit || !isCoreProfile()) { + m_blitBuffer.bind(); + + m_blitProgram->enableAttributeArray(int(QT_VERTEX_COORDS_ATTR)); + m_blitProgram->enableAttributeArray(int(QT_TEXTURE_COORDS_ATTR)); + m_blitProgram->setAttributeBuffer(int(QT_VERTEX_COORDS_ATTR), GL_FLOAT, 0, 2); + m_blitProgram->setAttributeBuffer(int(QT_TEXTURE_COORDS_ATTR), GL_FLOAT, 32, 2); + } m_blitProgram->disableAttributeArray(int(QT_OPACITY_ATTR)); m_blitProgram->setUniformValue("imageTexture", GLuint(0)); @@ -447,7 +455,8 @@ void QSGDefaultDistanceFieldGlyphCache::resizeTexture(TextureInfo *texInfo, int m_blitProgram->disableAttributeArray(int(QT_VERTEX_COORDS_ATTR)); m_blitProgram->disableAttributeArray(int(QT_TEXTURE_COORDS_ATTR)); - m_blitBuffer.release(); + if (isCoreProfile()) + m_vao.release(); } bool QSGDefaultDistanceFieldGlyphCache::useTextureResizeWorkaround() const diff --git a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h index b561bc08f7..e1be2105cd 100644 --- a/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h +++ b/src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h @@ -46,6 +46,7 @@ #include <QtGui/qopenglfunctions.h> #include <qopenglshaderprogram.h> #include <qopenglbuffer.h> +#include <qopenglvertexarrayobject.h> #include <QtGui/private/qopenglengineshadersource_p.h> #include <private/qsgareaallocator_p.h> @@ -135,6 +136,7 @@ private: QOpenGLShaderProgram *m_blitProgram; QOpenGLBuffer m_blitBuffer; + QOpenGLVertexArrayObject m_vao; QOpenGLSharedResourceGuard *m_fboGuard; #if !defined(QT_OPENGL_ES_2) -- GitLab