diff --git a/effects/CMakeLists.txt b/effects/CMakeLists.txt
index 39f66a6ca1..1fc50ff282 100644
--- a/effects/CMakeLists.txt
+++ b/effects/CMakeLists.txt
@@ -92,6 +92,7 @@ if( KWIN_HAVE_OPENGL_COMPOSITING )
include( coverswitch/CMakeLists.txt )
include( flipswitch/CMakeLists.txt )
include( glide/CMakeLists.txt )
+ include( mousemark/CMakeLists.txt )
include( sheet/CMakeLists.txt )
include( snaphelper/CMakeLists.txt )
include( trackmouse/CMakeLists.txt )
@@ -104,7 +105,6 @@ if( KWIN_HAVE_OPENGL_COMPOSITING AND NOT KWIN_HAVE_OPENGLES_COMPOSITING )
include( invert/CMakeLists.txt )
include( lookingglass/CMakeLists.txt )
include( magnifier/CMakeLists.txt )
- include( mousemark/CMakeLists.txt )
include( screenshot/CMakeLists.txt )
include( sharpen/CMakeLists.txt )
include( snow/CMakeLists.txt )
diff --git a/effects/mousemark/mousemark.cpp b/effects/mousemark/mousemark.cpp
index 8f5e3fcf33..a07d217d69 100644
--- a/effects/mousemark/mousemark.cpp
+++ b/effects/mousemark/mousemark.cpp
@@ -22,6 +22,7 @@ along with this program. If not, see .
#include "mousemark.h"
#include
+#include
#include
#include
@@ -32,10 +33,6 @@ along with this program. If not, see .
#include
-#ifdef KWIN_HAVE_OPENGL_COMPOSITING
-#include
-#endif
-
#include
namespace KWin
@@ -71,6 +68,7 @@ void MouseMarkEffect::reconfigure( ReconfigureFlags )
KConfigGroup conf = EffectsHandler::effectConfig("MouseMark");
width = conf.readEntry( "LineWidth", 3 );
color = conf.readEntry( "Color", QColor( Qt::red ));
+ color.setAlphaF(1.0);
}
void MouseMarkEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
@@ -78,25 +76,46 @@ void MouseMarkEffect::paintScreen( int mask, QRegion region, ScreenPaintData& da
effects->paintScreen( mask, region, data ); // paint normal screen
if( marks.isEmpty() && drawing.isEmpty())
return;
+#ifndef KWIN_HAVE_OPENGLES
glPushAttrib( GL_ENABLE_BIT | GL_CURRENT_BIT | GL_LINE_BIT );
- glColor4f( color.redF(), color.greenF(), color.blueF(), 1 );
glEnable( GL_LINE_SMOOTH );
+#endif
glLineWidth( width );
- foreach( const Mark& mark, marks )
- {
- glBegin( GL_LINE_STRIP );
- foreach( const QPoint& p, mark )
- glVertex2i( p.x(), p.y());
- glEnd();
+ GLVertexBuffer *vbo = GLVertexBuffer::streamingBuffer();
+ vbo->reset();
+ vbo->setUseColor(true);
+ vbo->setColor(color);
+ if (ShaderManager::instance()->isValid()) {
+ ShaderManager::instance()->pushShader(ShaderManager::ColorShader);
+ vbo->setUseShader(true);
+ }
+ QVector verts;
+ foreach (const Mark& mark, marks) {
+ verts.clear();
+ verts.reserve(mark.size()*2);
+ foreach (const QPoint& p, mark) {
+ verts << p.x() << p.y();
}
- if( !drawing.isEmpty())
- {
- glBegin( GL_LINE_STRIP );
- foreach( const QPoint& p, drawing )
- glVertex2i( p.x(), p.y());
- glEnd();
+ vbo->setData(verts.size()/2, 2, verts.data(), NULL);
+ vbo->render(GL_LINE_STRIP);
+ }
+ if (!drawing.isEmpty()) {
+ verts.clear();
+ verts.reserve(drawing.size()*2);
+ foreach (const QPoint& p, drawing) {
+ verts << p.x() << p.y();
}
+ vbo->setData(verts.size()/2, 2, verts.data(), NULL);
+ vbo->render(GL_LINE_STRIP);
+ }
+ if (ShaderManager::instance()->isValid()) {
+ ShaderManager::instance()->popShader();
+ }
+ glLineWidth( 1.0 );
+#ifndef KWIN_HAVE_OPENGLES
+ glDisable( GL_LINE_SMOOTH );
glPopAttrib();
+#endif
}
void MouseMarkEffect::mouseChanged( const QPoint& pos, const QPoint&,