Commit graph

43 commits

Author SHA1 Message Date
Casian Andrei
22569f7eb9 Remove forceAlpha uniform, which is no longer needed
This was originally added by d467fc1bdbcf69bd6ef213bd909633c2edfb6878,
to prevent alpha ending up to be 0 with blending disabled. Apparently,
that was a driver issue that is no longer present.

REVIEW: 107090
2012-11-13 22:23:18 +02:00
Martin Gräßlin
cf5de22586 Introduce a build option KWIN_BUILD_OPENGL_1_COMPOSITING
If the build option is enabled KWIN_HAVE_OPENGL_1 is passed as a compile
flag when build against OpenGL.

This compile flag is meant to replace the KWIN_HAVE_OPENGLES. So far code
has been ifdefed for special behavior of OpenGL ES 2.0 and to remove
fixed functionality calls which are not available in OpenGL ES 2.0.

With this build flag the fixed functionality calls which are only used in
the OpenGL1 Compositor can be removed and keeping the KWIN_HAVE_OPENGLES
for the real differences between OpenGL 2.x and OpenGL ES 2.0.

E.g. a call like glColor4f should be in an
glColor4f(1.0, 1.0, 1.0, 1.0);

while a call like glPolygonMode should be in an
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

Building for OpenGL ES 2.0 of course implies that KWIN_HAVE_OPENGL_1 is
not defined.
2012-10-25 11:34:12 +02:00
Martin Gräßlin
c2a4f81927 Introduce a helper class to automatically push/pop Shaders
The ShaderBinder class can be used for the case that a block of code
should be executed with a given Shader being bound. This is useful for
all the cases where there is a if-block for OpenGL2 execution with a
Shader being pushed in the first line to the ShaderManager and popped in
the last line of the block. With the helper this can be simplified to:

ShaderBinder binder(myCustomShader);

or

ShaderBinder binder(ShaderManager::GenericShader);

The ctor of ShaderBinder pushes the given Shader to the stack and once
the helper goes out of scope it will be popped again from the stack.

In addition the helper can take care of OpenGL 1 compositing, that is it
just does nothing. So it can also be used where there is a shared OpenGL1
and OpenGL2 code path where the Shader should only be pushed in OpenGL2.
This basically removes all the checks for the compositing type before
pushing/popping a Shader to the stack.

REVIEW: 106521
2012-09-29 15:33:57 +02:00
Martin Gräßlin
f9a2ecbf33 Do not use ShaderManager::isValid to check for OpenGL2 compositing
The main usage of ShaderManager::isValid was to have OpenGL2 specific
code pathes. Now we have an actual OpenGL2Compositing type and we know
that the ShaderManager is valid if we have this compositing type and we
know that it is not valid on OpenGL1Compositing. This gives us a much
better check and allows us to use the isValid method just for where we
want to check whether the shaders compiled successfully.

In addition some effects require OpenGL2, so we do not need to check
again that the ShaderManager is valid. Such usages are removed.
2012-09-29 15:33:57 +02:00
Martin Gräßlin
6d2dfe06e7 Introduce dedicated OpenGL1 and OpenGL2 compositing types
The CompositingType enum turns into flags and two new values are
introduced: OpenGL1Compositing and OpenGL2Compositing.

Those new values are or-ed to OpenGLCompositing so that a simple check
for the flag OpenGLCompositing works in case of one of those two new
values. To make the generic check for OpenGL compositing easier a method
in EffectsHandler is introduced to just check for this.

The scenes now return either OpenGL1Compositing or OpenGL2Compositing
depending on which Scene implementation. None returns OpenGLCompositing.
2012-09-29 15:33:57 +02:00
Martin Gräßlin
c7262e8bd3 Getter/setters for opacity, saturation and brightness in WindowPaintData
The public member variables for opacity, saturation and brightness
are removed in favor for getter and setters. The variables are
moved into a private class. Those are now qreal instead of double.

To make usage inside the effects easier a multiply method is added
which multiplies the current value with passed in factor and returns
the new value in a functional programming style.

This commit is the top-most of a patch series to refactor
ScreenPaintData and WindowPaintData. Other related commits are:
* 0811772
* ebdc7ec
* 2c8dd8d
* 7699726
* 68e0201
* 611cb09

REVIEW: 105141
BUG: 303314
FIXED-IN: 4.10
2012-07-19 18:25:48 +02:00
Martin Gräßlin
3125333f76 Fix logout effect including port to OpenGL 2
The logout effect was rather broken. First of all it was
excluded from build if OpenGL ES is present at build time. The
reason for this is that the effect did not work with GLES.

In order to fix that the vignetting is ported over to OpenGL 2
by using a dedicated shader. As well the lod based blur is
added through a dedicated shader and uses framebuffer blit to
get the current rendered buffer before rendering the logout
window into a texture.

Last but not least the isActive method was broken and is fixed
by checking whether the logout window is around.

BUG: 303096
FIXED-IN: 4.9.0
REVIEW: 105459
2012-07-09 21:02:57 +02:00
Martin Gräßlin
1de1204ecd Drop KWIN_HAVE_OPENGL defines in effects
OpenGL is nowadays a build dependency which obsoletes the define.

REVIEW: 105023
2012-05-27 16:37:26 +02:00
Martin Gräßlin
2007a7eab8 Use namespaced parameters in signals
Required to get scripting bindings working.
2012-03-12 21:37:40 +01:00
Philipp Knechtges
ef9aeafe0d kwin: Optimizing Blur Part II
This patch adds an optional texture cache to the blur effect such that damaged windows in
front of the blurred region dont trigger a repaint of the whole blurred region which pretty
often results in a avalanche repaint of nearly the whole screen.

REVIEW: 101977
2011-09-18 02:01:31 +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
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
d0664a9c96 Ensure logout compiles with GLES 2011-07-27 18:34:31 +02:00
Martin Gräßlin
fda841787f Make Logout Effect work again with OpenGL 2 backend
It's more of a hack, but at least it is working again. Still needs
a proper rewrite to also support GLES.
2011-04-29 10:49:06 +02:00
Thomas Lübking
4bf61c556b fix ed70462a07ae650f01002c25ce5b5104f19f2892
ignoredWindows is not limited to the opengl backend
CCMAIL: kde@michael-jansen.biz
2011-04-25 14:38:13 +02:00
Michael Jansen
6630e49d1d Fix (hopefully) compile if KWIN_HAVE_OPENGL_COMPOSITING is not defined. Those members are not
defined in that case so don't maintain them here.

@kwin devs. Feel free to revert, improve or whatever comes to your mind.

CCMAIL: kwin@kde.org
2011-04-25 14:15:45 +02: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
640fdc7b6d PropertyNotify becomes a signal 2011-03-12 19:18:19 +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
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
Thomas Lübking
c513099354 logout effect: remove deleted windows from list
fwd port of 04831d049f73bb38694d7cecc4ea170b2a26a149
2011-02-06 16:54:20 +01:00
Martin Gräßlin
0a7e48f7aa KWin uses kdelibs coding style. 2011-01-31 20:07:03 +01:00
Lucas Murray
51168e97a4 Keep the logout effect active until KWin is killed or the user cancels
the logout by using new information provided by KSMServer; Allow effects
to read and detect root window property notify events.

svn path=/trunk/KDE/kdebase/workspace/; revision=1083335
2010-02-01 07:44:27 +00:00
Lucas Murray
54a4f80a7b Render logout vignetting even if FBOs are not available.
svn path=/trunk/KDE/kdebase/workspace/; revision=1051777
2009-11-20 06:48:05 +00:00
Lucas Murray
1b80aec136 Optimize logout vignetting and increase its resolution.
svn path=/trunk/KDE/kdebase/workspace/; revision=1051774
2009-11-20 06:09:15 +00:00
Lucas Murray
89384118ea Change the logout blur effect and fix a small animation issue when
reverting back.

svn path=/trunk/KDE/kdebase/workspace/; revision=1044210
2009-11-03 09:47:33 +00:00
Lucas Murray
f1460a0429 Fix compile when OpenGL is not available.
svn path=/trunk/KDE/kdebase/workspace/; revision=1032334
2009-10-07 15:10:15 +00:00
Lucas Murray
20f1a79d04 Less warnings please.
svn path=/trunk/KDE/kdebase/workspace/; revision=1031490
2009-10-05 09:47:13 +00:00
Lucas Murray
4d1bdd5a63 Prevent jerkiness of the first two frames of the logout blur effect by
starting the animation after the render target has been created.

svn path=/trunk/KDE/kdebase/workspace/; revision=1030718
2009-10-03 07:06:51 +00:00
Matthew John Dawson
16b1b1e695 Fix compile error in kwin's logout effect when opengl.
svn path=/trunk/KDE/kdebase/workspace/; revision=1009287
2009-08-09 16:04:39 +00:00
Thomas Lübking
51c9a0bf54 BUG: 201445
fix memleak on reconfigure and avoid heap allocation while not being in
action

svn path=/trunk/KDE/kdebase/workspace/; revision=1002976
2009-07-27 12:54:02 +00:00
Martin Gräßlin
59590e2ff5 Move pushRenderTarget() in logout effect into paintScreen(). That ensures that logout effect doesn't pop the render target of another effect.
BUG: 194230

svn path=/trunk/KDE/kdebase/workspace/; revision=973990
2009-05-28 11:37:02 +00:00
Martin Gräßlin
bc37b74c98 Correctly track logout dialog painting when logout animation has finished.
BUG: 194070

svn path=/trunk/KDE/kdebase/workspace/; revision=972884
2009-05-25 22:00:30 +00:00
Martin Gräßlin
d8178fa8c5 Do not alter window painted on top of logout window in logout effect. That is don't change saturation and don't blur.
BUG: 192318

svn path=/trunk/KDE/kdebase/workspace/; revision=966573
2009-05-11 12:14:41 +00:00
Martin Gräßlin
7a06c636b2 Reenable logout blur - we found the reason why it stopped rendering (popRenderTarget in assert statement). If someone still has problems with it, please yell.
svn path=/trunk/KDE/kdebase/workspace/; revision=960509
2009-04-28 15:00:56 +00:00
Lucas Murray
8ba7586d79 Disable logout effect blur by default as some graphics drivers don't
correctly fallback and I have yet to work out a way of accurately
detecting support.

svn path=/trunk/KDE/kdebase/workspace/; revision=935761
2009-03-06 06:10:00 +00:00
Lucas Murray
ccd068897c Don't desaturate the logout window if blur is not supported.
svn path=/trunk/KDE/kdebase/workspace/; revision=926535
2009-02-15 16:12:43 +00:00
Lucas Murray
792c7439f8 Fix OpenGL-less compile and make the effect actually display something
to the user if blur is not supported (Screen appears to freeze).

svn path=/trunk/KDE/kdebase/workspace/; revision=926527
2009-02-15 16:04:29 +00:00
Lucas Murray
f5790fcce1 Prevent the logout effect from crashing KWin on quit if blur is not
supported.

svn path=/trunk/KDE/kdebase/workspace/; revision=926395
2009-02-15 10:34:41 +00:00
Lucas Murray
b11d863033 Cleaned up the logout effect and fixed a whole pile of bugs that I
introduced when adding the blur animation.

svn path=/trunk/KDE/kdebase/workspace/; revision=923329
2009-02-08 16:04:02 +00:00
Lucas Murray
8f8c1d31ba Added blurring during the logout effect. As this is done entirely using
mipmaps the quality isn't the best. Might add a shader later that will
generate the final image so it uses mipmaps for realtime blurring while
using a high quality blur at the end.

svn path=/trunk/KDE/kdebase/workspace/; revision=923246
2009-02-08 14:07:00 +00:00
Lucas Murray
846496d2c1 Cleaned up the effects/ directory by moving each individual effect into
its own directory, cleaned up the effect config macros and renamed
"MakeTransparent" to "Translucency" so that it matches its visible name.

svn path=/trunk/KDE/kdebase/workspace/; revision=921749
2009-02-05 15:35:38 +00:00
Renamed from effects/logout.cpp (Browse further)