From b366d0d0166bbb114ccf9a8e8be7d3c6c45e313e Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Wed, 27 Aug 2014 10:11:22 +0200 Subject: Make the EGL platform cursor reset the array buffer Otherwise bad things happen if the application leaves a buffer bound. [ChangeLog] The eglfs mouse cursor properly resets the array buffer to prevent rendering issues. This, just like with vertex attributes and textures, requires applications to be aware of such state changes in swapBuffers(). Change-Id: I8b383cc867d8d0d0572773eacfa650e7b33b9680 Reviewed-by: Gunnar Sletta --- src/platformsupport/eglconvenience/qeglplatformcursor.cpp | 3 +++ src/platformsupport/eglconvenience/qeglplatformcursor_p.h | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src/platformsupport') diff --git a/src/platformsupport/eglconvenience/qeglplatformcursor.cpp b/src/platformsupport/eglconvenience/qeglplatformcursor.cpp index b6293e60ec..7198d7c6fb 100644 --- a/src/platformsupport/eglconvenience/qeglplatformcursor.cpp +++ b/src/platformsupport/eglconvenience/qeglplatformcursor.cpp @@ -343,6 +343,8 @@ void QEGLPlatformCursor::draw(const QRectF &r) { if (!m_program) { // one time initialization + initializeOpenGLFunctions(); + createShaderPrograms(); if (!m_cursorAtlas.texture) { @@ -387,6 +389,7 @@ void QEGLPlatformCursor::draw(const QRectF &r) }; glBindTexture(GL_TEXTURE_2D, m_cursor.texture); + glBindBuffer(GL_ARRAY_BUFFER, 0); m_program->enableAttributeArray(m_vertexCoordEntry); m_program->enableAttributeArray(m_textureCoordEntry); diff --git a/src/platformsupport/eglconvenience/qeglplatformcursor_p.h b/src/platformsupport/eglconvenience/qeglplatformcursor_p.h index 6f4216874a..440bcc40eb 100644 --- a/src/platformsupport/eglconvenience/qeglplatformcursor_p.h +++ b/src/platformsupport/eglconvenience/qeglplatformcursor_p.h @@ -44,6 +44,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -86,7 +87,7 @@ private: bool m_active; }; -class QEGLPlatformCursor : public QPlatformCursor +class QEGLPlatformCursor : public QPlatformCursor, protected QOpenGLFunctions { public: QEGLPlatformCursor(QPlatformScreen *screen); @@ -113,7 +114,7 @@ private: void draw(const QRectF &rect); void update(const QRegion ®ion); void createShaderPrograms(); - static void createCursorTexture(uint *texture, const QImage &image); + void createCursorTexture(uint *texture, const QImage &image); void initCursorAtlas(); // current cursor information -- cgit v1.2.3