Commit graph

189 commits

Author SHA1 Message Date
Martin Gräßlin
31386d2f25 Drop unused variables
SVN_SILENT
2011-08-31 17:55:04 +02:00
Martin Gräßlin
fe4329a252 Only call active effects in the effect chain
Each effect is able to declare itself as currently being active,
that is transforming windows or painting or screen or doing anything
during the current rendered frame.

This change eliminates the hottest path inside KWin identified by
callgrind.

REVIEW: 102449
2011-08-29 07:06:58 +02:00
Martin Gräßlin
5b0d1739c2 Constify methods in MotionManager 2011-08-29 07:06:57 +02:00
Andre Woebbeking
88a33c67c4 -pedantic 2011-08-27 09:31:38 +02:00
Martin Gräßlin
225c362a04 Add support for framebuffer blit extension
Resolving of blit function and method in GLRenderTarget to blit
from the framebuffer to the RenderTarget.

REVIEW: 102354
2011-08-20 10:58:27 +02:00
Martin Gräßlin
b016b618b5 Ignore driver checks for GLSL and limited GLSL on GLES
Makes KWin support OpenGL ES on the ExoPC.
2011-08-19 21:32:33 +02:00
Philipp Knechtges
4f50a8df3c kwin: Implement "use by value" and implicit sharing for GLTexture.
Additionally:
- hide the GLTexture implementation using dpointers
- drop the unused function SceneOpenGL::Texture::optimizeBindDamage()
- Texture::load now loads a new texture and does not update the existing one

REVIEW: 101999
2011-08-14 17:08:54 +02:00
Martin Gräßlin
9c2d6f8fdc Drop hacks for gcc-3.3.3
According to Thiago minimum supported gcc is 4.2.
2011-08-14 08:59:51 +02:00
Martin Gräßlin
b17edd2d05 Cleanup libkwineffects/CmakeLists.txt
* we always have OpenGL(ES) - no need to check for it
* we always have the X extensions used by kwineffects
2011-08-13 16:46:44 +02:00
Martin Gräßlin
f5a187d224 Remove KWIN_HAVE_OPENGL from kwingl(es)utils
Yes building an OpenGL support library requires OpenGL...
2011-08-13 16:46:43 +02:00
Martin Gräßlin
0c47ca5e97 Remove defines for X extensions
The following dependencies have become mandatory build deps:
* XRandR
* XRender
* XFixes
* XDamage
* XComposite
2011-08-13 16:46:43 +02:00
Martin Gräßlin
987bc837d9 Remove define KWIN_HAVE_OPENGL_COMPOSITING
Due to changes in build system we have always either OpenGL or OpenGL ES.
This allows to remove the KWIN_HAVE_OPENGL_COMPOSITING define. In the
effects the define is kept as KWIN_HAVE_OPENGL which can be used in
future to build also an XRender only effect system.
2011-08-13 16:46:43 +02:00
Martin Gräßlin
b7d2b16b8d Remove define KWIN_HAVE_COMPOSITING
Building the workspaces requires to have all the build dependencies
which were required for KWIN_HAVE_COMPOSITING to be set. This allows
us to remove all the ifdefs for this and gives us a cleaner code.
2011-08-13 16:46:43 +02:00
Thomas Lübking
a2d9ff72aa fix close button side for present windows effect
BUG: 262543

pint desktop as background when including desktop in switcher
BUG: 262137

zoom windows as hover/selection indicaton (1/8 of the screen or 105%)
BUG: 215348
CCBUG: 175521

no closer on "show desktop" desktop
show closer immediately but have it disabled for a short time to allow the user realize it

REVIEW: 101318
2011-08-09 22:57:54 +02:00
Allen Winter
8584104bf0 Improve Find OpenGLES.cmake a bit by only setting the FOUND varaible
if both the GLES and EGL libs and headers are found.
Fold all the includes and libraries into 1 varaible each and use those.

in other words, you need to have both OpenGLES and EGL to do a successful build.
2011-08-06 09:29:20 -04:00
Martin Gräßlin
9f78276dc7 Detect Driver "Software Rasterizer"
Fixes a major regression which allowed OpenGL
compositing to be used with software rasterizer, which
either did not work or crashed directly.

Cherry-picked from cf2f572 in branch KDE/4.7.
2011-08-03 20:02:15 +02:00
Jaime Torres
664aaa1b60 ++ prefix for non-trivial data-types
change suffix ++ to prefix ++ to speed up a little bit not-trivial
data-types. discovered by cppcheck

REVIEW: 102057
2011-08-02 17:21:56 +02:00
Martin Gräßlin
c807e97e0a Split glutils out of kwineffects
All OpenGL related files are build as a kwinglutils library for OpenGL
and as a kwinglesutils library for OpenGL ES. The appropriate defines
are set using target_properties and removed from kwinconfig.h.cmake.
2011-07-27 18:34:31 +02:00
Martin Gräßlin
c3cf4482a3 Move GLX detection from kwinglobals to CompositingPrefs
Removes the Extension::glxAvailable() from kwinglobals and
implements the functionality in CompositingPrefs, where it
is only needed. There used to be one additional check in
scene_opengl_glx.cpp which is moved into composite.cpp
before the OpenGL Scene is created.

REVIEW: 102002
2011-07-27 18:34:31 +02:00
Martin Gräßlin
787b2bf8cc Fix regression introduced with 909b4efa
I still don't understand how I actually tested my patch
before committing. It was working, sigh. That were
several hours of annoyance including a git bisect presenting
my own commit I assumed to be correct. Sigh.
2011-07-23 21:32:12 +02:00
Martin Gräßlin
2fc1ed25a5 Add a define KWIN_SHADER_DEBUG to all shaders
If the environment variable KWIN_GL_DEBUG is set to 1
the define KWIN_SHADER_DEBUG is added to the glsl
source code allowing to add some custom ifdefed
visual debug handling.

As an example it's added to scene-fragment.glsl to
paint everything in a greenish way.
2011-07-23 18:57:50 +02:00
Fredrik Höglund
8c430e22b6 kwin: Add the Sumo and Cayman chipsets 2011-07-15 18:56:15 +02:00
Fredrik Höglund
31ea6ff0b8 kwin: Reorder the Evergreen chipsets to match the order in r600g 2011-07-15 18:51:54 +02:00
Fredrik Höglund
7f4709b4ea kwin: Whitespace fixes 2011-07-15 18:47:52 +02:00
Martin Gräßlin
eae91e189c Remove include to kwinglutils.h from kwineffects
No more OpenGL is used in the effects library itself.
2011-07-05 20:40:27 +02:00
Martin Gräßlin
3524e70fe2 Drop EffectsHandler::saturationSupported
Not used by any effect or anywhere in core.
2011-07-05 20:35:32 +02:00
Martin Gräßlin
9b9f4619b0 Remove scissoring code from PaintClipper
Not used any more and means we don't have OpenGL code in kwineffects.
2011-07-05 20:18:19 +02:00
Martin Gräßlin
cd82616ece Remove PaintClipper from OpenGL Scene rendering
Construct window quads which will end on the screen instead of
rendering the windows several times and using scissoring to
restrict to the area which will end on screen.

REVIEW: 101765
2011-07-05 20:17:29 +02:00
Philipp Knechtges
ec1df109d9 kwin: cleaning up KWin::GLTexture::convertToGLFormat
Now convertToGLFormat does no longer mirror the texture, so that we can
avoid a deep copy in case we render a GL_BGRA texture on a little endian system.

REVIEW: 101739
2011-07-04 18:06:45 +02:00
Martin Gräßlin
08b2aebd30 Merge branch 'KDE/4.7'
Conflicts:
	kwin/libkwineffects/kwinglutils.cpp
	kwin/libkwineffects/kwinglutils.h
2011-07-03 09:30:38 +02:00
Martin Gräßlin
b837a3fca1 Render Shadow with only one GL texture
Copies the shadow parts into one image and creates a GLTexture
from the image, so that we can render the complete shadow with
just one texture and one painting pass.

Should remove most of the overhead involved when rendering the new Shadows.

As a side effect this should fix missing shadows with non-NPOT GPUs and
a rendering glitch reported with NVIDIA.

REVIEW: 101742
2011-07-03 09:24:28 +02:00
Martin Gräßlin
c8daeef43c Remove (en|dis)able(Un)NormalizedTexCoords from GLTexture
Those are not used anymore as makeArrays only renders normalized
texCoords and also honors the y-Inverted case.
2011-06-26 09:15:31 +02:00
Arthur Arlt
25654f25b8 Removing TopMenu
Since the funtionality of TopMenu did no longer work in KDE4 this feature was
removed from Workspace. Every reference to it was removed as well as commentaries
and documentation.

REVIEW: 101485
2011-06-24 12:27:56 +02:00
Philipp Knechtges
116e024d12 kwin: moving KWin::GLTexture to a separate file 2011-06-22 13:03:36 +02:00
Michael Zanetti
e1bf590a1c - fixes calculation of WindowMotionManager in case a new destination is set when the window is not at its original position and provide a function to check if windows
are currently moving (by Thomas Lübking)
- make use of new function and bugfix in SlideBack effect
2011-06-20 21:56:56 +02:00
Martin Gräßlin
a05ad98896 Remove textureWidth/textureHeight from all Shaders
The uniforms textureWidth and textureHeight were only needed for
normal windows. For everything else it was just 1.0/1.0, that is
normalized.

The makeArrays method is changed to produce normalized texcoords
obsoleting the need for these uniforms. So two uniforms less, one
calculation in vertex shaders less and many many lines of code
removed.

At the same time makeArrays is also adjusted to take care of
yInverted of the texture, which is needed as we no longer can use
the enableUnnormalizedTexCoords which did the yInverted transformation.

REVIEW: 101646
2011-06-19 20:54:13 +02:00
Thomas Lübking
3af7395ab8 avoid calling QPixmap::paintEngine() in scene rendering
by checking the graphicssystem at startup
also avoid pixmap and memory leaking on the xrender backend, validate some pointers
on deletion in SceneOpnGL and avoid attempts to render ::isNull pixmaps
2011-06-11 15:23:03 +02:00
Martin Gräßlin
ae40bce25d Disable Shader Scene for LimitedGLSL GPUs
This was causing problems with R300G. The GPU supports only limited
GLSL and seems not to be up to rendering the scene appropriate. So
let's better disable the OpenGL 2 branch for such GPUs. If the user
really wants to use it, there is the GLES backend which does not
check for limited GLSL.
BUG: 274457
CCBUG: 274607
FIXED-IN: 4.7.0
2011-06-01 18:25:45 +02:00
Martin Gräßlin
234ec644d2 KWin supports graphicssystem Raster
With raster a QPixmap is no longer a XPixmap which fails all code
which assumes that an QPixmap is an XPixmap. Depending on were in
the codebase we either convert such pixmaps to images (OpenGL) or
create a XPixmap and use QPixmap::fromX11Pixmap to get a "real"
pixmap.

It is possible that there are more code pathes were we would need
a XPixmap. Currently tested is basic functionality of no-compositing,
XRender compositing, OpenGl/GLX and OpenGL ES/EGL compositing.

For OpenGL compositing raster might result in performance improvements,
for XRender it is possible that there are regressions when using raster.
By default KWin uses whatever is the default of the system, so we just
no longer enforce native.

Of course it is a bad idea to use graphicssystem OpenGL. As that
is broken anyways in Qt, we do not check for it.

Many thanks to Philipp Knechtges for bringing up the issue, convincing
me that we need it and providing most of the patch.

REVIEW: 101132
CCMAIL: Philipp.Knechtges@rwth-aachen.de
2011-05-12 18:52:38 +02:00
Martin Gräßlin
1dd614ee4b Improved detection of OpenGL software emulation
Adding a new method to retrieve whether the OpenGL implementation
uses any kind of software emulation and no software emulation can
provide GLSL support, even if it claims so.

Thanks to Maurel for testing again and again proposed patches.

BUG: 271166
2011-05-06 18:16:38 +02:00
Fredrik Höglund
e5ea420e96 kwin: Add an enabledByDefault() function to the effects interface
This makes it possible to decide at runtime if an effect should
be enabled by default.
2011-05-02 02:06:17 +02:00
Martin Gräßlin
5290e78106 Adding an option GLLegacy to force OpenGL 1
Setting option "GLLegacy" to true in config group "Compositing"
will disable all GLSL shaders and kwin uses the legacy OpenGL 1
code pathes. Obviously the option is ignored with GLES.

As my Qt Designer is refusing to work, there is no GUI option yet.
2011-04-29 16:44:48 +02:00
Thomas Lübking
676d180e4f remove comments from commit 7da7090bc802a8b9d1ee0a969ea794921a74b86b 2011-04-28 21:43:13 +02:00
Thomas Lübking
48d8864090 remove QHash::operator[] from the motionmanager and sharpen the ::finish condiion
CCBUG: 252986
2011-04-28 14:34:45 +02:00
Martin Gräßlin
98cc15cfac Allow effects to render the outline 2011-04-28 13:49:22 +02:00
Martin Gräßlin
022d7a32a0 Remove binding of selection to styled EffectFrame
This allows to just set the selection on a None EffectFrame so
that only the selection is rendered without blurring the background
and so on.
2011-04-28 13:49:22 +02:00
Martin Gräßlin
77a7bedac8 Delete ShaderManger before destroying GL Context 2011-04-27 14:52:04 +02:00
Martin Gräßlin
d647950ff0 Do not blur behind EffectFrames with no style 2011-04-27 14:52:04 +02:00
Jan Gerrit Marker
2407b0fbc4 Make present windows effect not preserve space for windows from other activities
REVIEW:101180
CCBUG:242555
2011-04-24 14:26:46 +02:00
Martin Gräßlin
12220a0d59 Initial implementation of new Shadows in KWin
For a complete documentation of new functionality refer to:
http://community.kde.org/KWin/Shadow

The current implementation includes a new Shadow class and Toplevel
holds a pointer to an instance of this class. The Shadow class reads
the data from the X11 Property. There is one extended class located
in SceneOpenGL to render the shadow.

Compositor is adjusted to include the shadow region into the painting
passes.

Implementation for XRender still missing and Shadow needs to respond
to size changes of the Toplevel to update cached shadow region and
WindowQuads.
2011-03-27 12:33:07 +02:00
Martin Gräßlin
b52975a57e Merge branch 'libkwineffects'
The branch contains the first step in reworking the kwineffects
library. This includes:
* replacing virtuals by signals and slots
* dropping some unused methods
* remove KWin::TimeLine

More to come.

Conflicts:
	kwin/workspace.cpp
2011-03-16 19:46:59 +01:00
Martin Gräßlin
ff4297a799 Update copyright
I really should start to add myself to the copyright when I commit
large chunks to the files...
2011-03-16 19:39:10 +01:00
Martin Gräßlin
6e7e1c530b Remove transformWindowDamage effects hook
It is not used by any effect, so we save one complete go through
all effects pass on each window damage.

The functionality which could be provided by this hook can also be
implemented using the window damaged signal.
2011-03-15 20:38:37 +01:00
Martin Gräßlin
82b8f8d2fc Drop the driver blacklist
Let's face it: it was a bad idea and the blacklist never got updated.
2011-03-15 20:11:11 +01:00
Martin Gräßlin
f213b7da70 Drop KWin::TimeLine from kwineffects
The KWin::TimeLine class was only a small wrapper around QTimeLine
without adding anything to QTimeLine what is not present in QTimeLine.
The initial idea was to make it possible to provide more curve shapes.
This is now obsoleted by Qt shipping more useful curves with QTimeLine.

So let's clean up a little bit and use QTimeLine directly instead of
the small wrapper.

All effects are adjusted to use QTimeLine directly.
2011-03-14 22:50:05 +01:00
Martin Gräßlin
6a8b57d40a Adjust documentation for Effect after removing the virtuals 2011-03-13 17:03:00 +01:00
Martin Gräßlin
2cf51238a8 kwineffects doesn't use kdecorations 2011-03-13 16:56:25 +01:00
Martin Gräßlin
ca36f3e876 Remove unused forward declaration in kwineffects 2011-03-13 16:16:59 +01:00
Martin Gräßlin
e5e5c4a020 Move push/popRenderTarget to kwingluitls
(De)Activating a FBO is OpenGL specific and does not belong into EffectsHandler.
2011-03-13 14:34:30 +01:00
Martin Gräßlin
16a025d907 Remove dynamic desktop layout
This has never been implemented properly. There is only the boolean
indicating that the desktop layout is dynamic but it is nowhere set
or used. So better remove it.
2011-03-13 14:04:02 +01:00
Martin Gräßlin
9199619969 Remove not implemented add/delete desktop
It is unlikely that anyone will implement it and it is not compatible
to EWMH anyway. So better remove it.
2011-03-13 13:58:00 +01:00
Martin Gräßlin
32c903b05b Rework signals for move/resize windows
First a signal is emitted when the user starts a move/resize operation.
During the move/resize operation each geometry change emits an update signal.
Last but not least a finish signal is emitted.

This eliminates the specific method for geometry updates in drawbound resize
mode.
2011-03-13 12:41:30 +01:00
Martin Gräßlin
909a678e13 New signal for maximize state changed
The signal includes the state for horizontal and vertical maximize state.
It would be better to use the enum fro, KDecorationDefines but we don't want
to depend on decorations library.

Wobbly windows is adjusted to use this new signal - it is the only effect
interested in maximize state change.
2011-03-13 11:00:10 +01:00
Martin Gräßlin
640fdc7b6d PropertyNotify becomes a signal 2011-03-12 19:18:19 +01:00
Martin Gräßlin
88d50727ee WindowDamaged becomes a signal 2011-03-12 15:04:22 +01:00
Martin Gräßlin
39ab2cf29e MouseChanged becomes a signal 2011-03-12 14:37:30 +01:00
Martin Gräßlin
911098ee76 WindowGeometryShapeChanged becomes a signal 2011-03-12 12:34:59 +01:00
Thomas Lübking
0b1599680d stage one, call martin 2011-03-08 22:05:09 +01:00
Martin Gräßlin
dcebc7481b ClientGroupItem* become signals
This needs to be improved in core. Currently ClientGroup does not yet
emit signals, as it would be difficult to connect them. Nevertheless
the effects dependency should be removed.
2011-03-06 21:15:09 +01:00
Martin Gräßlin
747afb4225 NumberDesktopsChanged becomes a signal
TODO: connect DesktopChangeOSD also to the signal
2011-03-06 20:10:11 +01:00
Martin Gräßlin
15757e953a TabBox uses signals to notify the effects
EffectsHandlerImpl just forwards the signals from TabBox. In order
to have a valid pointer to the TabBox, the TabBox is now initialized
before compositing in Workspace.
2011-03-06 12:15:16 +01:00
Martin Gräßlin
a404ec4259 WindowUnminimized becomes a signal 2011-03-06 11:08:19 +01:00
Martin Gräßlin
012222037e WindowMinimized becomes a signal 2011-03-06 10:55:27 +01:00
Martin Gräßlin
edd0950f96 WindowOpacityChanged becomes a signal 2011-03-06 10:30:23 +01:00
Martin Gräßlin
a728823fbe Fix passing matrixes to the shaders
QMatrix4x4 accepts data in row-major order, but returns them in
column-major order, which is not documented and because of that
I expected them to be in row-major order.
This commit fixes it and rewrites the shaders to apply the matrix
multiplications in the right order.
REVIEW: 100759
2011-03-06 09:13:31 +01:00
Martin Gräßlin
eeb10c69d5 Signal for windowUserMovedResize
In core a new signal is added for maximizedState change of client.
Other function calls remain as direct calls for the moment.
2011-02-28 21:03:13 +01:00
Martin Gräßlin
e355700e6e EffectsHandler emits windowDeleted signal
Workspace emits a deletedRemoved signal which the EffectsHandlerImpl translates
into a windowDeleted signal.
2011-02-27 10:47:42 +01:00
Martin Gräßlin
0795ae89ac EffectsHandler emits signal on windowActivated
EffectsHandlerImpl connects to the Workspace signal clientActivated.
The emitting of the signal is slightly moved from before the activation logic
to after the activation logic. This might change behavior in the scripting
component, but the previous code looked wrong.
2011-02-27 10:05:04 +01:00
Martin Gräßlin
0b85768ec5 EffectsHandler emits windowClosed signal
Client and Unmanaged use a signal to notify that they are about to be closed.
The EffectsHandlerImpl is connected to those signals and emits the appropriate
windowClosed signal to which the effects are connected.
2011-02-27 09:25:45 +01:00
Martin Gräßlin
ab6f2ba1fd EffectsHandler emits windowAdded signal
All previously existing windowAdded methods are renamed to slotWindowAdded.
EffectsHandlerImpl is connected to Workspace's clientAdded signal, which is
emitted a little bit earlier than the previous direct method call. This might
change behavior.
Another signal is added to Workspace to signal that an unmanaged is added.
2011-02-25 22:06:02 +01:00
Martin Gräßlin
c3a076b6a5 EffectsHandler emits desktopChanged signal
The first signal used between EffectsHandler and Effects.
The signal is actually emitted by the EffectsHandlerImpl and only
the interested effects connect to this signal.
EffectsHandlerImpl itself is also notified by a signal from Workspace,
allowing to remove one of the many if (effects) checks.
2011-02-25 20:41:10 +01:00
Martin Gräßlin
b3a5639967 EffectsHandler and Effect become QObjects
This is in preparation for allowing to connect effects with signals and slots.
2011-02-25 20:25:21 +01:00
Jammy Zhou
d9d97a471b Integrate patch for gles and glsl-es version detection
Integrate Martin Gräßlin's commit b578d in http://gitweb.kde.org/scratch/graesslin/kwin-gles.git
to support GLES and GLSL-ES version detection.
2011-02-24 09:42:03 +08:00
Martin Gräßlin
b57e343500 Improve message extraction
Messages from kdecorations library are extracted to libkdecorations.pot.
Messages from kwineffects library are extracted to libkwineffects.pot.
Currently there are no messages yet in kwineffects, so it's for future use.
2011-02-20 16:02:33 +01:00
Martin Gräßlin
aee7dab1a6 Forward declaration++ 2011-02-20 14:19:51 +01:00
Jammy Zhou
f970eab391 return correct GLSL version 2011-02-19 21:03:04 +08:00
Martin Gräßlin
0827c2903b Use GLPlatform to decide whether shaders are supported
Dropping the static methods from GLShader and use supports()
where it was used before.
2011-02-19 11:08:43 +01:00
Martin Gräßlin
2920715d4d Remove unneeded HACK for NVIDIA
This hack was already removed with da3d880b8af35c97c5a46f9ed253b5885eb9a462

I do not understand what readded it
2011-02-19 10:32:11 +01:00
Martin Gräßlin
57d11c134a Move kwineffects library into own directory
Second part of cleaning up the lib directory: the effects library
now lives in libkwineffects/ directory.

For existing effects nothing changes as the install path is unchanged.
The change obsoletes the lib/ directory.

As glplatform.h has not yet been exported I dared to export it and
adjust the places where it is used.
CCMAIL: kwin@kde.org
2011-02-19 10:01:31 +01:00