aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/scenegraph/qsgdefaultdistancefieldglyphcache.cpp25
-rw-r--r--src/quick/scenegraph/qsgdefaultdistancefieldglyphcache_p.h2
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)