Commit graph

543 commits

Author SHA1 Message Date
Martin Gräßlin
a401558a43 Provide OpenGL over Egl
The Egl backend is decoupled from the OpenGL ES build option which makes
it possible to use it as a replacement for glx.

To make this possible a new build flag is added when egl is available at
compile time and any egl specific code is now ifdefed with this flag
instead of the gles flag. In addition at runtime a windowing system enum
value is passed to the various detect methods to have egl/glx specific
detection for e.g. function pointer resolving.

By default egl is used if compiled with OpenGL ES, otherwise glx is used.
But in the non-gles case the windowing system can be selected through the
new environment variable KWIN_OPENGL_INTERFACE. Setting this variable to
"egl" the EglOnXBackend is used.

REVIEW: 106632
2012-10-04 17:17:01 +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
Casian Andrei
e26cc0a4cf CC: Remove a couple of extraneous empty lines 2012-09-23 15:36:23 +03:00
Casian Andrei
f219c108bb CC: Remove unnecessary init/uninit CC methods 2012-09-23 15:32:58 +03:00
Casian Andrei
b17071555d CC: Fix blend function, it's different for cc enabled 2012-09-23 15:32:24 +03:00
Casian Andrei
8341d4406b Merge remote-tracking branch 'origin/master' into color2
Results in cleaner changes.
Put all the color correction stuff from SceneOpenGL in SceneOpenGL2.

Conflicts:
	kwin/eglonxbackend.cpp
	kwin/glxbackend.cpp
	kwin/scene.h
	kwin/scene_opengl.cpp
	kwin/scene_opengl.h
2012-09-23 11:57:38 +03:00
Martin Gräßlin
5a6d9400b2 Split SceneOpenGL into a concrete SceneOpenGL1 and SceneOpenGL2
SceneOpenGL turns into an abstract class with two concrete subclasses:
* SceneOpenGL1
* SceneOpenGL2

It provides a factory method which first creates either the GLX or EGL
backend which is passed to a static supported() method in the concrete
sub classes. These method can test whether the backend is sufficient to
be used for the OpenGL version in question. E.g. the OpenGL 2 scene
checks whether the context is direct.

The actual rendering is moved into the subclasses with specific OpenGL 1
and OpenGL 2 code. This should make the code more readable and requires
less checks whether a Shader is bound. This is now known through the
Scene: the OpenGL1 scene will never have a shader bound, the OpenGL2 scene
will always have a shader bound.

To make this more reliable the ShaderManager is extended by a disable
method used by SceneOpenGL1 to ensure that the ShaderManager will never
be used. This also obsoletes the need to read the KWin configuration
whether legacy GL is enabled. The check is moved into the supported
method of the OpenGL2 scene.

REVIEW: 106357
2012-09-16 21:28:11 +02:00
Martin Gräßlin
db9368fc26 Merge the code to render Client's and Deleted's decoration in SceneOpenGL
The code was basically copy'n'pasted to handle both Client and Deleted
requiring to cast the Toplevel to both Client and Deleted to test whether
it is one of those.

This is now changed from runtime to compile time polymorphism. A
templated method is used to start the rendering process for the decos.
This on the one hand simplifies the code and on the other does not
require any dynamic casts any more as we use the available check on
Toplevel whether it is a Client or Deleted.
2012-09-16 21:28:06 +02:00
Martin Gräßlin
fe440377bb Split SceneOpenGL::Window into specific classes for OpenGL 1 and 2
The Window implementation performed many checks whether the rendering
uses the OpenGL 1 or OpenGL 2 code path and there were quite a few
cludges around to make this work.

So instead of many if-else blocks the specific code has now been moved
into a specific sub class and calls to pure virtual method in the base
class are used to trigger this behavior. Although that adds some overhead
in a rather hot code path it should be better than the many chained
method calls used before to handle OpenGL 1 and 2.

It also makes the code a little bit more readable as all the complete
OpenGL 1 implementation is now in one block ifdefed for OpenGL ES.
2012-09-16 21:28:06 +02:00
Martin Gräßlin
6152cc4fa5 Split out the windowing system related part of SceneOpenGL
The handling for creating and managing the OpenGL context is
split out of the SceneOpenGL into the abstract OpenGLBackend
and it's two subclasses GlxBackend and EglOnXBackend.

The backends take care of creating the OpenGL context on the
windowing system, e.g. on glx an OpenGL context on the overlay
window is created and in the egl case an EGL context is created.
This means that the SceneOpenGL itself does not have to care
about the specific underlying infrastructure.

Furthermore the backend provides the Textures for the specific
texture from pixmap operations. For that in each of the backend
files an additional subclass of the TexturePrivate is defined.
These subclasses hold the EglImage and GLXPixmap respectively.

The backend is able to create such a private texture and for
that the ctor of the Texture is changed to take the backend as
a parameter and the Scene provides a factory method for
creating Textures. To make this work inside Window the Textures
are now hold as pointers which seems a better choice anyway as
to the member functions pointers are passed.
2012-09-16 21:28:05 +02:00
Casian Andrei
ba4cd78419 CC: Redo init and uninit, try to avoid fatal IO errors
Additional checks for GL errors.
Attempt to fix transparency issues again.
2012-09-16 16:30:35 +03:00
Casian Andrei
8bec3fda71 CC: Fix color correction init signal connections 2012-09-16 14:29:06 +03:00
Casian Andrei
59d2fa7a10 Merge branch 'master' into color2
Conflicts:
	kwin/scene_opengl.cpp
	kwin/workspace.cpp
2012-09-04 21:55:21 +03:00
Casian Andrei
005ab28ad6 CC: No singleton for ColorCorrection 2012-08-27 17:24:30 +03:00
Casian Andrei
1fbb413daf CC: Tweak lanczos filter member 2012-08-27 15:53:40 +03:00
Casian Andrei
23f3b2a571 CC: Rename performPaint to performPaintWindow and make it non-virtual 2012-08-27 15:41:46 +03:00
Casian Andrei
7d331ea7ff CC: Rename "glColorCorrection" property to "colorCorrected" 2012-08-27 15:29:59 +03:00
Martin Gräßlin
2d954a6bf3 Make the Scene owned by the Compositor
The Scene has always been created and destroyed inside what is
now the split out compositor. Which means it is actually owned
by the Compositor. The static pointer has never been needed
inside KWin core. Access to the Scene is not required for the
Window Manager. The only real usage is in the EffectsHandlerImpl
and in utils.h to provide a convenient way to figure out whether
compositing is currently active (scene != NULL).

The EffectsHandlerImpl gets also created by the Compositor after
the Scene is created and gets deleted just before the Scene gets
deleted. This allows to inject the Scene into the EffectsHandlerImpl
to resolve the static access in this class.

The convenient way to access the compositing() in utils.h had
to go. To provide the same feature the Compositor provides a
hasScene() access which has the same behavior as the old method.
In order to keep the code changes small in Workspace and Toplevel
a new method compositing() is defined which properly resolves
the state. A disadvantage is that this can no longer be inlined
and consists of several method calls and pointer checks.
2012-08-26 20:43:57 +02:00
Casian Andrei
a417888b0e Implement color correction support
The implementation consists of a class in libkwineffects.

There are some slight modifications in the compositor. Regions for
different outputs are drawn at different times.

Currently only per output color correction is implemented. However, the
grounds are prepared for implementing per window color correction
easily.

The ColorCorrection class needs to communicate via D-Bus with a KDED
module, KolorServer, which is a part of KolorManager.

The only visible part for the user consists of a check box in the
advanced tab for the compositing KCM.

The actual correction is done by injecting a piece of code in the
fragment shader, code that does a 3D lookup into a special color lookup
texture. The data for these textures is obtained from KolorServer. All
D-Bus calls are async.
2012-08-20 20:37:25 +03: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
f723f132ca Drop support for explicit contents opacity from WindowPaintData
No effect has ever made use of contents opacity. Which means it
is not needed. Removing means faster effects as we used to
multiply the value (always 1.0) with the opacity in each frame
for each window.
2012-07-19 18:25:03 +02:00
Martin Gräßlin
dd067b075b Split out common part of ScreenPaintData and WindowPaintData
New common d-pointered class PaintData is added which cannot
be instantiated.
2012-07-19 18:25:03 +02:00
Martin Gräßlin
a2b0d42916 Replace translation by QVector3D in Screen/Window PaintData 2012-07-19 18:25:03 +02:00
Martin Gräßlin
0eff12eb92 Use QGraphicsScale for scale information in ScreenPaintData 2012-07-19 18:25:03 +02:00
Martin Gräßlin
966047ccd2 Replace custom RotationData with QGraphicsRotation 2012-07-19 18:25:03 +02:00
Thomas Lübking
fc665106c9 Swap vsync order, trade in 1frame lag
REVIEW: 103058
2012-05-17 11:41:26 +02:00
Philipp Knechtges
05a8777edf kwin: adding proper clipping for transformed windows
This patch kind of reintroduces the old PaintClipper functionality.

REVIEW: 104397
2012-05-01 23:19:04 +02:00
Philipp Knechtges
93b2674313 kwin: dropping several gl(Push|Pop)(Attrib|Matrix) calls
This makes kwin in OpenGL2 mode more coherent with kwin_gles.
Despite some fullscreen effects they should now make the same
(pure) OpenGL calls.

REVIEW: 103804
2012-04-19 21:01:46 +02:00
Martin Gräßlin
212908ee88 Refactoring of KWin::Options: getter methods instead of public variables 2012-02-27 19:31:58 +01:00
Thomas Lübking
ac4a29ceea Merge branch 'KDE/4.8' 2012-02-12 17:29:07 +01:00
Thomas Lübking
d39c190c40 fix NPOT + raster decoration
BUG: 282882
2012-02-12 16:33:23 +01:00
Thomas Lübking
7d8ab4c593 fix NPOT shadows
a) fixes the texture offset calculation
b) arranges he shadow pixmaps as border in the texture to avoid interpolation issues.

BUG: 280116
BUG: 282882
CCBUG: 291161
BUG: 293325
REVIEW: 103888
2012-02-09 19:07:35 +01:00
Thomas Lübking
a227847efc fix NPOT shadows
a) fixes the texture offset calculation
b) arranges he shadow pixmaps as border in the texture to avoid interpolation issues.

BUG: 280116
BUG: 282882
CCBUG: 291161
BUG: 293325
REVIEW: 103888
2012-02-09 18:11:03 +01:00
Philipp Knechtges
ca8484eff7 kwin: avoid unnecessary texture binds
In cases where we do neither update nor render textures
we don't have to bind them.
2012-01-31 23:10:57 +01:00
Philipp Knechtges
050d991cb1 kwin: simplifying paintSimpleScreen
This patch reduces the number of QRegion and WindowQuadList operations
by drawing the opaque and translucent parts of the window within the
same bottom to top pass.

REVIEW: 103671
2012-01-11 18:04:28 +01:00
Martin Gräßlin
6e445fb75c Less unused parameter/variable warnings in kwin
SVN_SILENT
2011-12-31 15:08:54 +01:00
Philipp Knechtges
9e2b6edf02 kwin: bugfix nouveau GLES + loose texture bindings in kwin_gles
There seems to be a problem with nouveau GLES if you want to create an
EGLImageKHR more than once in a frame for the same pixmap. This patch
circumvents the problem in the way that it implements tfp the same way
as the mesa example in
mesa/demos/src/egl/opengles1/texture_from_pixmap.c does it. A nice
side effect of this is that it also avoids the overhead of recreating
the texture for every damaged window.

REVIEW: 103303
2011-12-01 22:38:20 +01:00
Thomas Lübking
eedba353d6 simplify opengl shadow building code
REVIEW: 103236
(cherry picked from commit 9ff807b192313c01d2e4d77a2db791bd7b53b680)
2011-11-27 15:03:52 +01:00
Philipp Knechtges
e81c68fee8 kwin: fix graphical glitches for the nvidia blob
This is a perliminary fix. Should be fixed properly once we have a real statemachine.
2011-08-25 10:29:23 +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
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
f72f465c13 Fix Typos
Krazy--
SVN_SILENT
2011-08-03 08:25:10 +02:00
Martin Gräßlin
3232c2cb2a Remove duplicate includes
Krazy--
SVN_SILENT
2011-08-03 08:25:10 +02:00
Arthur Arlt
d8072be54d Move OverlayWindow from Workspace to its own class
All the functionality of Overlay Window is moved to its own class
OverlayWindow. It is created and owned by class Scene, since almost
all function calls are called from this class.

REVIEW: 101866
2011-07-09 19:08:48 +02:00
Philipp Knechtges
8a9725a68b kwin: update the decoration texture although we dont paint the decoration
We have to update the texture because the next time client->decorationPixmapRequiresRepaint()
might return false.
2011-07-06 17:24:07 +02:00
Martin Gräßlin
c4cd4e8c96 Replace getYInverted by the new isYInverted of parent class 2011-07-05 20:42:45 +02:00
Martin Gräßlin
a360d59f7e Remove intersection of region with visible rect
No longer needed as the splitting into quads will perform the
intersection.
2011-07-05 20:18:21 +02:00
Martin Gräßlin
55c1f3ae96 Include transformed windows in quad transition
Only transformed quads may not be changed, so we skip those.
2011-07-05 20:18:20 +02:00
Martin Gräßlin
76eb3c3391 Remove clipping against the bounding rect of paint region 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
Martin Gräßlin
bb8b92f93d Don't render shadows if there are no quads 2011-07-05 20:15:11 +02:00
Arthur Arlt
02e08be5bd Merge signals clientClosed() and unmanagedClosed() to windowClosed()
This commit merges the two signals clientClosed() and unmanagedClosed() to windowClosed() which
is now provided by Toplevel.
The approriate slots in effects.h and effects.cpp were merges as well, since they did the
same.
The direct method calls of the method windowClosed() in SceneOpenGL and SceneXRender were
removed and are now connected to the appropriate signal in windowAdded().
2011-07-05 11:46:13 +02:00
Arthur Arlt
859dacb8b5 Make Scene::windowClosed() a Q_SLOT
This commit just makes the declaration of windowClosed() in Class Scene be a Q_SLOT.
The inheriting classes SceneOpenGL and SceneXRender are updated as well.
2011-07-05 11:46:13 +02:00
Arthur Arlt
b63c9c1af8 Make mothod windowGeometryShapeChanged() a slot
The method windowGeometryShapeChanged() from the class Scene is now a slot. It is now connected to the signal geometryShapeChanged() which is sent from Toplevel instances Client and Unmanaged.
All direct method calls were deleted.
2011-07-05 11:34:12 +02:00
Arthur Arlt
59a8aac752 Make windowOpacityChanged() a slot
The method windowOpacityChanged is now a protected slot in class Scene. The implementations in the subclasses SceneOpenGL and SceneXRender are the same. The slots are connected to the singal opacityChanged() from Toplevel. The connection is done in the method windowAdded() in both SceneOpenGL and SceneXRender.
2011-07-05 11:34:12 +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
f978d7b97d Fix decoration rendering with GL_TEXTURE_RECTANGLE_ARB
When using graphicssystem native the texture may be using
GL_TEXTURE_RECTANGLE_ARB instead of GL_TEXTURE_2D. This
needs to be honoured in order to make KWin work reliable
with e.g. R300 chipsets.

BUG: 274607
CCBUG: 276622
FIXED-IN: 4.7.0
2011-07-01 18:04:15 +02:00
Martin Gräßlin
b470ef52a9 Fix major window rendering regression with NPOT textures
The adjusted code for generating texture coordinates did not
take care of GL_TEXTURE_RECTANGLE_ARB textures causing the
generation of wrong texcoords.

BUG: 276622
FIXED-IN: 4.7.0
2011-06-30 17:47:06 +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
Philipp Knechtges
5577cc769b kwin: bug fix for crash when using the raster backend
It seems to be possible to generate a QPixmap that is not null,
but doesnt have a paintEngine.
2011-05-19 21:41:30 +02:00
Philipp Knechtges
da82739301 kwin: Make SceneOpenGL::makeDecorationArrays aware of Texture::y_inverted 2011-05-18 21:09:59 +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
264fcfa49f Remove selfcheck code from OpenGL
Execution was ifdefed, if we want it again we have a VCS.
2011-05-12 17:59:57 +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
001b9da6d8 Perform glFlush before deleting the EffectFrame's pixmaps
On NVIDIA it is possible that the actual rendering gets delayed to
after the deletion of the pixmap during the end of fullscreen effects.
This was causing freezes. By using glFlush before deleting the pixmaps
we can ensure that the pixmap is not needed anymore after the pixmaps
are deleted.

BUG: 261323
FIXED-IN: 4.6.3
2011-04-24 20:24:04 +02:00
Martin Gräßlin
38e9ab9a4e Move ownership on Shadow from Toplevel to Scene::Window
The Shadow is clearly an aspect of the compositor. Therefore the
Shadow has to be owned and controlled by the Scene::Window.
Nevertheless Toplevel needs to know about the Shadow cause of reading
the property.
2011-04-03 11:31:33 +02:00
Martin Gräßlin
ea17b3562c Add debug rendering for shadow code 2011-03-30 20:33:08 +02:00
Martin Gräßlin
0667076fab Shadow texcoords are normalized
Set texture width/height to 1.0, so that we see the shadow.
2011-03-30 20:33:08 +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
Jammy Zhou
9a8d5c88ae Fix GL error when do texture from pixmap
This problem happens on Freescale imx51 ARM platform

CCMAIL: patches@linaro.org
2011-03-11 09:04:01 +08: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
Fredrik Höglund
d2078d4b9b kwin: Refactor the screen transformation code
Move the code that computes the transformation matrix to its
own method, and rewrite it to improve readability.
2011-02-17 19:19:40 +01:00
Fredrik Höglund
90f6cbfa5e kwin: Fix the clip intersection code
The code that intersected the clip region with the window region
appears to have been accidentally lost in 5ce3c6b8.
2011-02-16 00:08:47 +01:00
Fredrik Höglund
5d29307f58 kwin: Refactor the window transformation code
Move the code that computes the transformation matrix into its own
method, and rewrite it to improve readability.
2011-02-15 23:02:21 +01:00
Fredrik Höglund
423cd29afa kwin: Simplify the code for updating the texture filter 2011-02-15 23:02:21 +01:00
Fredrik Höglund
73be6657ea kwin: Replace brightness and opacity with a modulation constant
This makes it possible to adjust both brightness and opacity
at the same time with one multiplication in the fragment shader.
2011-02-12 01:45:38 +01:00
Fredrik Höglund
2fa966e0f9 kwin: Use the new setUniform() overloads in kwin core 2011-02-10 19:37:51 +01:00
Fredrik Höglund
6a72efea96 kwin: Fix a typo in a setUniform() call 2011-02-10 18:47:52 +01:00
Fredrik Höglund
2a6a4e9667 kwin: Fix the glBlendFunc() in the shader case.
The RGB values were being multiplied by the alpha value twice.
2011-02-04 21:44:50 +01:00
Martin Gräßlin
0a7e48f7aa KWin uses kdelibs coding style. 2011-01-31 20:07:03 +01:00
Fredrik Höglund
8bc99e68c0 Don't specify the texture target explicitly with r300g.
This is reported to cause a performance regression.

FIXED-IN: 4.6.0
BUG: 256654

svn path=/branches/KDE/4.6/kdebase/workspace/; revision=1215519
2011-01-30 15:24:31 +01:00
Martin Gräßlin
2f56415a21 Removing SHM and Fallback OpenGL Compositing modes.
Our primary target is Texture From Pixmap and it is supported
by all important drivers nowadays. If a driver is not able to
support TFP using OpenGL at all is probably no good idea and
XRender is more suited.
2011-01-30 14:24:48 +01:00
Martin Gräßlin
f78d838fc7 Better support custom shaders. 2011-01-30 14:12:05 +01:00
Martin Gräßlin
d683ce560c Adding new uniform to enforce that alpha becomes 1.0
When rendering opaque (RGB-only) windows the alpha ends up to be 0
with blending disabled. This breaks subsequent rendering steps which
require blenden (e.g. Lanczos). Therefore a uniform is used to ensure
that the alpha channel is set to 1.
2011-01-30 14:12:04 +01:00
Martin Gräßlin
4c8c3060bf Merge together paintBackground and paintGenericScreen 2011-01-30 14:12:04 +01:00
Martin Gräßlin
e5eed55c51 PerformPaint uses QMatrix4x4 for legacy GL.
And another piece of code get's merged between desktop GL and ES.
2011-01-30 14:12:04 +01:00
Martin Gräßlin
7adc29efd7 Remove warnings when building with GLES 2011-01-30 14:12:03 +01:00
Martin Gräßlin
2d40f73530 Fix unstyled effect frames 2011-01-30 14:12:02 +01:00
Martin Gräßlin
990001c5d7 Drop GLVertexBuffer::useShader.
The vertex buffer implementation uses the shader manager to decide
whether core painting should be used or not. Shader manager is only
used by shaders using vertex attributes instead of gl_Vertex etc.
2011-01-30 14:12:02 +01:00
Martin Gräßlin
9cfdeb1e2d Set always window transformaton to generic shader 2011-01-30 14:12:01 +01:00
Martin Gräßlin
cab9154723 Simple vertex shaders use projection matrix and offset 2011-01-30 14:12:01 +01:00
Martin Gräßlin
e4b26daef5 And use shared VBO for windows 2011-01-30 14:12:00 +01:00
Martin Gräßlin
d2cfeef8ae Scene uses ShaderManager 2011-01-30 14:12:00 +01:00
Martin Gräßlin
d12c4e58fd Support new translate for textures 2011-01-30 14:11:58 +01:00
Martin Gräßlin
ae95ab0c43 Adding color to VBO.
A color can be specified to render the geometry of the VBO.
For legacy painting glColor is used, for shader a uniform is set.
In order to allow rendering without texcoords, it is possible to pass
a null pointer as texcoords.
Shader added to scene which just renders a colored geometry without texturing.
2011-01-30 14:11:58 +01:00
Martin Gräßlin
f925352e73 Don't crash if scene shader is not available 2011-01-30 14:11:58 +01:00
Martin Gräßlin
eb7d06d22f Adding a generic scene shader able to handle transformation
Currently only window transformations are supported.
2011-01-30 14:11:57 +01:00
Martin Gräßlin
ea12f95b27 Support setting y_inverted for Texture.
At least needed for the pixmaps loaded by EGL.
Should be save on GLX as well, if not it needs fixing
2011-01-30 14:11:57 +01:00
Martin Gräßlin
5804417acc And here comes the working OpenGL ES backend 2011-01-30 14:11:57 +01:00
Martin Gräßlin
537b06a9ee Move glx and egl code into own files 2011-01-30 14:11:57 +01:00
Martin Gräßlin
b8d068088b Fix linker errors in scene 2011-01-30 14:11:56 +01:00
Martin Gräßlin
5fae85f2a5 Scene OpenGL compiles with ES
It's mostly just ifdef away everything that cannot work.
Needs to be split into a scene_xgl and scene_egl.
2011-01-30 14:11:56 +01:00
Martin Gräßlin
6cc19ebc7d OpenGL rendering debug
Renders same geometry with polygon mode lines and the shader colorizes the fragments.
Enabled with environment variable KWIN_GL_DEBUG=1
2011-01-30 14:11:55 +01:00
Martin Gräßlin
56ce39def8 Core profile compatible basic scene rendering.
Adds a shader to render an untransformed scene. renderGLGeometry is not used any more and replaced by generated triangles stored in a GLVertexBuffer.
The GLVertexBuffer has a new attribute to decide whether a core profile compatible rendering has to be performed.
Currently windows and EffectFrames can make use of the new shader.
The shader contains a debug mode which colours all rendered fragments in green. It is currently enabled in scene_opengl.
Rendering transformed geometries (without shader) is currently broken.
2011-01-30 14:11:55 +01:00
Thomas Lübking
337e1eac18 revert vsync strategy, fix timeouts
differecens to patch atteched to 258971:
- removed debug statements
- fixed indention...
- NON vsync strategy does not rely on the estimation, but on the time passed since the last repaint trigger, allowing a precise framerate

CCBUG: 258971


svn path=/trunk/KDE/kdebase/workspace/; revision=1210445
2010-12-31 13:14:11 +00:00
Thomas Lübking
e2dcfff601 commiting http://svn.reviewboard.kde.org/r/6120/#review9304
this should improve v'syncing, maybe v'synced "smoothness"
remaining and exposed issue are "dirty textures" w/o damage events (see the requst description)
can be diminished by increasing MaxFPS above the fastest update (or shadowed below the slowest one)
CCBUG: 258971

svn path=/trunk/KDE/kdebase/workspace/; revision=1207577
2010-12-18 16:51:43 +00:00
Martin Gräßlin
bcabc01ecc Fix blend func for shaders
svn path=/trunk/KDE/kdebase/workspace/; revision=1203714
2010-12-05 10:02:47 +00:00
Fredrik Höglund
4a170df503 Revert to always calling glXBindTexImageEXT() before rendering.
The GLX implementation in the X server appears to have a hardcoded limit
to how many pixmaps can be bound to textures simultaneously when using
indirect rendering, which we can end up exceeding with the changes
introduced in r1182198.

BUG: 256359
FIXED-IN: 4.5.5

svn path=/trunk/KDE/kdebase/workspace/; revision=1203578
2010-12-04 16:55:43 +00:00
Thomas Lübking
48447a3d26 avoid recreating effectframes/textures on setPosition; correct position after setAlignment
svn path=/trunk/KDE/kdebase/workspace/; revision=1203489
2010-12-04 10:01:57 +00:00
Thomas Lübking
029f93127f kick trilinear filtering if favor of the lanczos filter (now default, unless blacklisted)
make the scale method configurable and align the UI for GL and Xrender

CCBUG: 243181


svn path=/trunk/KDE/kdebase/workspace/; revision=1195698
2010-11-11 19:53:19 +00:00
Martin Gräßlin
ef605d6475 Forward port rev 1195271:
Deactivate OpenGL compositing self-check.
See http://svn.reviewboard.kde.org/r/5774/
CCBUG: 253357

svn path=/trunk/KDE/kdebase/workspace/; revision=1195272
2010-11-10 18:23:04 +00:00
Martin Gräßlin
f31d32250f Make EffectFrames work with Nouveau driver.
This worksaround a problem with the nouveau driver causing
the text frames to be incorrectly rendered. We need to keep
the QPixmap around as long as we have a texture created from
that texture.
This applies for the text and the unstyled effect frame. For
the frames generated from Plasma's FrameSvgs it is not required.
Addresses freedesktop.org bug 30286

svn path=/trunk/KDE/kdebase/workspace/; revision=1184458
2010-10-10 11:26:00 +00:00
Fredrik Höglund
3ea508cd8a Specify the texture target explicitly when creating a GLXPixmap.
Prefer the GL_TEXTURE_2D target if the framebuffer configuration indicates
that it's supported.

This fixes a performance problem with the r600g driver.
freedesktop bug 30483.

svn path=/trunk/KDE/kdebase/workspace/; revision=1183978
2010-10-08 22:18:57 +00:00
Fredrik Höglund
15033a9a8e Only call glXBindTexImageEXT() when the contents of the pixmap has changed.
We don't need to do this every time we bind the texture to a GL context,
even with strict binding.

svn path=/trunk/KDE/kdebase/workspace/; revision=1182198
2010-10-03 18:49:36 +00:00
Martin Gräßlin
fa78332a3c Fallback to XRender compositing in case of Software Rasterizer.
For Software Rasterizer we never ever want to have OpenGL compositing.
No matter how many config options the user sets it has to be disabled.
Though falling back to XRender makes sense in the case of software
rasterization.

svn path=/trunk/KDE/kdebase/workspace/; revision=1176787
2010-09-18 17:41:07 +00:00
Martin Gräßlin
256a1a79c3 Use pixmaps and TFP for the text and unstyled effect frame.
This solves also some video garbage problems with direct rendering and fglrx.

svn path=/trunk/KDE/kdebase/workspace/; revision=1174408
2010-09-12 10:09:12 +00:00
Luboš Luňák
d467d26530 Do not introduce such generic indentifiers like None or Styled
into KWin's global namespace. Morever None already kind of clashes with X's None.
CCMAIL: kde@martin-graesslin.com


svn path=/trunk/KDE/kdebase/workspace/; revision=1170588
2010-09-01 14:15:06 +00:00
Martin Gräßlin
eabad32cfb Add cross fade support for text and icon to EffectFrame.
This allows an effect to fade between old and new text/icon. As an example it's added to CoverSwitch.
Currently only supported in OpenGL. XRender might be added, but I'm missing an idea for an effect to add it.
Most effects using EffectFrame require OpenGL anyway.

svn path=/trunk/KDE/kdebase/workspace/; revision=1160252
2010-08-07 14:08:34 +00:00
Martin Gräßlin
276e63a134 Really disable the fallback to XRender.
I missed this line in my previous change to disable the fallback which made the fallback happen nevertheless.

svn path=/trunk/KDE/kdebase/workspace/; revision=1157978
2010-08-01 19:23:05 +00:00
Martin Gräßlin
84e8fa4634 Use Texture From Pixmap for the styled EffectFrame
svn path=/trunk/KDE/kdebase/workspace/; revision=1155056
2010-07-26 20:16:54 +00:00
Martin Gräßlin
ef79d4c443 Use the normal Plasma selection to highlight the selected window in boxswitch.
So it is more consistent (in KDE newspeak "elegant") with other selections and as a plus we get rid of all the custom rendering code in boxswitch.

svn path=/trunk/KDE/kdebase/workspace/; revision=1155051
2010-07-26 20:00:04 +00:00
Martin Gräßlin
89c0ea0c8d Pass EffectFrame through all effects, so that they can do something with the frame.
E.g. set a shader to invert it.
CCBUG: 241389

svn path=/trunk/KDE/kdebase/workspace/; revision=1154071
2010-07-24 16:29:16 +00:00
Martin Gräßlin
20b711e2e8 Use a VBO for rendering an unstyled effect frame.
svn path=/trunk/KDE/kdebase/workspace/; revision=1153932
2010-07-24 08:04:17 +00:00
Martin Gräßlin
fa832b7aa7 Cache the icon texture/picture in EffectFrame and use texture from pixmap to load the data in OpenGL mode. Yeah for less pixmap to image to gltexture conversations.
Some effects (boxswitch and flipswitch) still need to be changed to not set the icon in each frame.

svn path=/trunk/KDE/kdebase/workspace/; revision=1152367
2010-07-20 21:11:03 +00:00
Martin Gräßlin
e2eebb6503 Refactoring of EffectFrame: EffectFrame becomes an interface just like EffectsHandler and EffectWindow and a concrete EffectFrameImpl in core.
Rendering of the EffectFrame is moved into the scene as Scene::EffectFrame with a concrete implementation in SceneXrender and SceneOpenGL.
A factory method for an EffectFrame is added to the EffectsHandler, which is used by the effects.
Next step: pass the EffectFrame through all effects, so that effects can transform, blur, invert whatever it.

svn path=/trunk/KDE/kdebase/workspace/; revision=1151271
2010-07-18 16:32:37 +00:00
Martin Gräßlin
12918d3ee8 Disabling the fallback to XRender. It's causing more trouble than the benefits.
With Intel drivers currently the self check at KWin startup fails (no idea why) and KWin falls back to XRender. This is probably an explanation for all the complaints about slow kwin in 4.5 and the missing effects. So let's fail and make it possible to restart compositing via systemsettings and alt+shift+f12.
Nevertheless it would be nice to fix the the failing selfcheck...

svn path=/trunk/KDE/kdebase/workspace/; revision=1148315
2010-07-10 08:44:40 +00:00
Martin Gräßlin
cfce13e615 Make the new taskbar thumbnail shader work with NVIDIA driver. Therefore the alpha channel has to be added to oqaque windows in scene_opengl.
svn path=/trunk/KDE/kdebase/workspace/; revision=1130622
2010-05-25 20:28:23 +00:00
Lucas Murray
fd47ff5332 Revert r1082246 as it needs to be done in CompositingPrefs::detect()
to work correctly but as doing it there defeats the purpose of moving
the code to begin with there's no point in moving it.
BUG: 226049

svn path=/trunk/KDE/kdebase/workspace/; revision=1088054
2010-02-10 02:53:33 +00:00
Lucas Murray
2a34e440f5 Change the location where LIBGL_ALWAYS_INDIRECT is set and add some
useful documentation about when it is used and why it is required.

svn path=/trunk/KDE/kdebase/workspace/; revision=1082246
2010-01-30 08:27:24 +00:00
Lucas Murray
8960c552d2 Remove OpenGL driver whitelist; Add protection against crashy glXQuery
functions and share the value with the KCM; Fallback to XRender
compositing if OpenGL fails to work correctly; Rearrange setting order
in options.h slightly and fix variable names

svn path=/trunk/KDE/kdebase/workspace/; revision=1079919
2010-01-25 10:02:08 +00:00
Martin Gräßlin
82093ae630 Only load the decoration texture if the decoration pixmap is not null.
This resulted in a crash with Qt 4.6 when accessing the pixmap handle.
BUG: 213507

svn path=/trunk/KDE/kdebase/workspace/; revision=1068519
2010-01-01 11:57:06 +00:00
Jacopo De Simoi
abe42cf21f Recreate effectframe textures when compositing is disabled/enabled to avoid corruption
svn path=/trunk/KDE/kdebase/workspace/; revision=1062238
2009-12-14 09:49:06 +00:00
Fredrik Höglund
0b992748be Switch the order, so the decoration is drawn before the client window.
svn path=/trunk/KDE/kdebase/workspace/; revision=1054380
2009-11-25 23:08:19 +00:00
Lucas Murray
8a8428e41c Less Krazy warnings please.
svn path=/trunk/KDE/kdebase/workspace/; revision=1042572
2009-10-30 06:51:59 +00:00
Andreas Kling
0204c2127c Fixed some uses of uninitialized data (SceneOpenGL::selfCheckDone and TimeLine::m_CurveShape)
svn path=/trunk/KDE/kdebase/workspace/; revision=1022613
2009-09-12 09:38:12 +00:00
Robin Harold Burchell
f585e4e1d9 A number of small warning fixes (bracketing, etc) to help pick up real problems when working.
svn path=/trunk/KDE/kdebase/workspace/; revision=1022531
2009-09-11 23:44:29 +00:00
Martin Gräßlin
ba27d2ebb0 Copy decoration pixmaps to Deleted. By that we see the decoration also when having a fade out animation.
As this is a bigger commit I will wait with backporting to 4.3 for something about two or three weeks and will only backport if nobody yells.
BUG: 201780

svn path=/trunk/KDE/kdebase/workspace/; revision=1004096
2009-07-29 11:07:28 +00:00
Luboš Luňák
60f8d8a84f glx1.3, section 3.4.2: "GLXPixmaps created by calls other
than glXCreateGLXPixmap should not be passed to glXDestroyGLXPixmap."


svn path=/trunk/KDE/kdebase/workspace/; revision=983660
2009-06-18 18:54:15 +00:00
Lucas Murray
d2e10a529f Set OpenGL decoration texture wrap mode to GL_CLAMP_TO_EDGE. Removes
halo effect during window scaling.

svn path=/trunk/KDE/kdebase/workspace/; revision=980162
2009-06-11 10:35:49 +00:00
Martin Gräßlin
c561207946 Do not release the bound pixmap every time the decoration get's updated. That is the reason why effects were slow when active client changed. Additional do a XSync when the decoration pixmap is painted. That ensures that the pixmap is painted before the texture from pixmap is done.
BUG: 191694

svn path=/trunk/KDE/kdebase/workspace/; revision=969647
2009-05-18 16:42:23 +00:00
Martin Gräßlin
55af335968 Scene OpenGL paints window content only when mask does not contain PAINT_DECORATION_ONLY like XRender backend.
This could be the solution to the performance regression when starting effects at activation change.
CCBUG: 191694

svn path=/trunk/KDE/kdebase/workspace/; revision=969215
2009-05-17 17:14:01 +00:00
Fredrik Höglund
8bba7aed7d Make it possible for the decorations to paint outside the window frame
when compositing is enabled, by letting them add additional padding
to the sides of the frame.

svn path=/trunk/KDE/kdebase/workspace/; revision=963586
2009-05-04 22:35:33 +00:00
Martin Gräßlin
d7665af4f0 Texture width and height is stored in GLShader and the uniform value is set during prepareShaderRenderStates in scene_opengl. So the effects do not have to set the uniform manually. This is useful as other effects can still set this uniform if something different is rendered with a different texture width/height (e.g. shadows or thumbnails). When the window is finally rendered the original value set by the effect is definatelly used.
First effect to use this new way to set texture width and height is invert effect.

svn path=/trunk/KDE/kdebase/workspace/; revision=959835
2009-04-27 11:07:15 +00:00
Martin Gräßlin
dabc9f0353 OpenGL part of ARGB decorations. See revision 957680 for more information.
svn path=/trunk/KDE/kdebase/workspace/; revision=957681
2009-04-22 17:30:49 +00:00
Luboš Luňák
7249ca2cfb Do self-check immediatelly during compositing setup only when it's not KWin startup
at the same time (in other words, only when activating compositing using the kcm).
Currently selfcheck causes bad flicker (due to X mapping the overlay window
for too long?) which looks bad during KDE startup. With this patch, KDE startup
is without any flicker.


svn path=/trunk/KDE/kdebase/workspace/; revision=923842
2009-02-09 14:51:11 +00:00
Luboš Luňák
6fef8fe8bd Use 3x2 sized pixmap for the self-check rather than 5x1, to also
check for Y inversion (bnc#450801, although I have no idea what
the real problem there is).


svn path=/trunk/KDE/kdebase/workspace/; revision=904309
2009-01-01 21:17:27 +00:00
Lucas Murray
6d41a1320e Moved all debug, warning and error messages into the KWin 1212 area.
Replaced deprecated kdDebug() with kDebug().
Removed empty debug messages.

svn path=/trunk/KDE/kdebase/workspace/; revision=885620
2008-11-17 15:04:52 +00:00
Luboš Luňák
83ddb8f249 Make sure the GLX context is destroyed before the window it's been
made current with. Even though it should be allowed to do it afterwards
it seems this can crash AIGLX.
http://lists.freedesktop.org/archives/xorg/2008-November/040168.html
BUG: 174782


svn path=/trunk/KDE/kdebase/workspace/; revision=882880
2008-11-11 15:06:45 +00:00
Lucas Murray
8f3433bac3 HACK: Temporarily disable opaque-/translucent-only painting until the cause of the glitching is found. Due to a logic error this code has never actually been executed.
CCMAIL: kwin@kde.org

svn path=/trunk/KDE/kdebase/workspace/; revision=867857
2008-10-04 17:36:26 +00:00
Lucas Murray
24816cb67b Fixed "fixed" logic. There's really no other way to do this that's readable so if the "suspicious code" checker still picks this up just ignore it.
BUG: 171709

svn path=/trunk/KDE/kdebase/workspace/; revision=865220
2008-09-27 06:23:33 +00:00
Luboš Luňák
b9bf9831b0 Fix wrong logic.
svn path=/trunk/KDE/kdebase/workspace/; revision=864621
2008-09-25 09:13:00 +00:00
Luboš Luňák
6796c1225f Self-check also for XRender.
svn path=/trunk/KDE/kdebase/workspace/; revision=862312
2008-09-18 15:27:13 +00:00
Luboš Luňák
08571b2f52 Do not use 'assert( false )', with NDEBUG that is a no-op and
results in warnings about missing return.


svn path=/trunk/KDE/kdebase/workspace/; revision=861879
2008-09-17 11:44:51 +00:00
Luboš Luňák
23724e35b2 Add an advanced option to override kwin's compositing checks
(i.e. currently it allows to enable compositing even if self-check fails).
Not recommended of course, and it's be still nice to get self-check work
reliably.
CCBUG: 170085


svn path=/trunk/KDE/kdebase/workspace/; revision=860196
2008-09-12 10:26:19 +00:00
Luboš Luňák
8eedfa3456 Another attempt at self-check, this time done directly during setup
(so that it can fail immediately).


svn path=/trunk/KDE/kdebase/workspace/; revision=859960
2008-09-11 16:37:26 +00:00
Luboš Luňák
6fd9d4e4b3 Create a new window for each tested pixmap with selfcheck, otherwise
second test fails for some reason with BadAlloc in glXCreatePixmap().
Maybe nvidia bug, but could be also some hidden KWin bug (according
to GLX docs, glXCreatePixmap() can give BadAlloc only when it can't
allocate, which is nonsense here, but glXCreateWindow() says that
BadAlloc may mean calling it twice on the same window, so maybe
here it's twice with the same pixmap - I don't see where the bug
could be though).


svn path=/trunk/KDE/kdebase/workspace/; revision=857141
2008-09-04 19:48:52 +00:00
Luboš Luňák
9a0124fc96 Check every screen, topleft and bottomright corners, should catch more problems.
Also remove the unnecessary XSync().


svn path=/trunk/KDE/kdebase/workspace/; revision=854556
2008-08-29 19:23:16 +00:00
Luboš Luňák
fd2e9b54cb Funny how awesome ideas are often so awfully simple. Test whether compositing
really works by simply trying to do it and test the result - create a small
testing window with known content, do the same with it like with normal
windows, grab the screen contents, compare with the original, doesn't match? -> fail.
It still would be nice to have something similar for performance.


svn path=/trunk/KDE/kdebase/workspace/; revision=854549
2008-08-29 19:02:36 +00:00
Luboš Luňák
a42ccaa4ba Virtuals don't work normally in dtors, call in overriden dtor too.
svn path=/trunk/KDE/kdebase/workspace/; revision=853290
2008-08-27 13:21:20 +00:00
Lucas Murray
9a52d3c709 Added feature to only invert the colours of selected windows
Fixed shader alpha blending
CCMAIL: kwin@kde.org

svn path=/trunk/KDE/kdebase/workspace/; revision=853224
2008-08-27 12:20:34 +00:00
Martin Gräßlin
cb4ed769aa Change from orthographic projection to a perspective projection. This allows to change z-values and rotations.
Therefore zScale, zTranslate and new RotationData are added to ScreenPaintData and WindowPaintData. So it is possible to define zTranslation and rotations without using OpenGL directly. The change only affects OpenGL compositing. XRender is not changed.

svn path=/trunk/KDE/kdebase/workspace/; revision=842018
2008-08-04 14:07:45 +00:00
Lucas Murray
c60c12572e X ARGB windows are stored with alpha premultiplied. Adjusted OpenGL rendering to accomodate that and therefore fixed incorrect rendering of windows with transparencies such as the Plasma panel.
BUG: 163054

svn path=/trunk/KDE/kdebase/workspace/; revision=841974
2008-08-04 11:34:40 +00:00
Luboš Luňák
80dae9910e Fix last commit.
svn path=/trunk/KDE/kdebase/workspace/; revision=807454
2008-05-13 21:27:56 +00:00
Luboš Luňák
e5b1dd90bc Restore color settings after painting background. Fixes splashscreen
being fully black during KDE startup, not that I understand why.


svn path=/trunk/KDE/kdebase/workspace/; revision=807447
2008-05-13 21:15:15 +00:00
Luboš Luňák
9bd87cb271 Redo timing of next painting with vsync used, try harder not to miss
every other sync just by a small time.


svn path=/trunk/KDE/kdebase/workspace/; revision=806443
2008-05-11 12:03:42 +00:00
Luboš Luňák
53cc35b649 Show the composite overlay window only before the first painting pass
actually needs to flush the output to the screen. Avoids windows
temporarily disappearing during KDE startup or similar visual glitches.


svn path=/trunk/KDE/kdebase/workspace/; revision=806387
2008-05-11 09:48:34 +00:00
Albert Astals Cid
3b9121ec3f const & in foreach
svn path=/trunk/KDE/kdebase/workspace/; revision=801427
2008-04-26 16:03:02 +00:00
Luboš Luňák
02aeed3de2 No deprecated.
svn path=/trunk/KDE/kdebase/workspace/; revision=788516
2008-03-21 17:50:59 +00:00
Luboš Luňák
f77561ce65 Don't discard window texture when only the shape changes but the window
geometry actually stays the same. Avoids large number of rebinds (with no
strict binding) with the launch feedback icon.


svn path=/trunk/KDE/kdebase/workspace/; revision=787948
2008-03-20 10:05:41 +00:00
Luboš Luňák
cff2b0e6cd Abstract paint clipping into PaintClipper helper class that allows
stacking of clipping regions.
(http://lists.kde.org/?l=kwin&m=120138051215450&w=2)
BUG: 156798


svn path=/trunk/KDE/kdebase/workspace/; revision=779045
2008-02-25 11:32:21 +00:00
Luboš Luňák
4b792d000e Make error messages about compositing use kError(), so that they show up
even in release builds. Point to release notes in case of error.


svn path=/trunk/KDE/kdebase/workspace/; revision=768132
2008-01-29 14:23:26 +00:00
Luboš Luňák
429f30d508 Skip color-indexed configs, just in case.
svn path=/trunk/KDE/kdebase/workspace/; revision=766482
2008-01-25 23:16:10 +00:00
Luboš Luňák
2382ea23b9 No deprecated.
svn path=/trunk/KDE/kdebase/workspace/; revision=763107
2008-01-18 15:49:57 +00:00
Luboš Luňák
6b5f9f727f Improved error detection in initRenderingContext().
svn path=/trunk/KDE/kdebase/workspace/; revision=763105
2008-01-18 15:49:27 +00:00
Luboš Luňák
4dc04a2eef Move debug output about selected visuals.
svn path=/trunk/KDE/kdebase/workspace/; revision=763097
2008-01-18 15:22:46 +00:00
Luboš Luňák
caf1627047 We need NPOT textures.
BUG: 155833


svn path=/trunk/KDE/kdebase/workspace/; revision=762709
2008-01-17 18:21:58 +00:00
Luboš Luňák
110f76ecd8 Change some of the debug messages to warnings, so compositing setup failures
show up also in release builds.


svn path=/trunk/KDE/kdebase/workspace/; revision=762175
2008-01-16 12:44:45 +00:00
Luboš Luňák
bb433ac40e No longer include config*.h files in installed headers.
Also slightly redo the #define's for effects, now it's:
- #ifdef KWIN_HAVE_COMPOSITING to check whether there's any compositing support at all
- #ifdef KWIN_HAVE_OPENGL_COMPOSITING to check for OpenGL-based compositing
- #ifdef KWIN_HAVE_XRENDER_COMPOSITING the same for XRender
CCMAIL: kwin@kde.org


svn path=/trunk/KDE/kdebase/workspace/; revision=749628
2007-12-17 14:14:53 +00:00
Luboš Luňák
0a59114c43 I suppose black looks better on places where there's nothing at all.
svn path=/trunk/KDE/kdebase/workspace/; revision=746328
2007-12-08 17:58:24 +00:00
Luboš Luňák
01bf6cbb4c License cleanup - add headers where missing, be explicit about GPL
being v2+ (right now it says just GPL, which according to GPL itself
means any GPL). Decoration clients will come later.
CCMAIL: kwin@kde.org


svn path=/trunk/KDE/kdebase/workspace/; revision=742302
2007-11-27 19:40:25 +00:00
Rivo Laks
f4600f4b3f Properly initialize Scene::Window pointers in EffectWindow objects.
svn path=/trunk/KDE/kdebase/workspace/; revision=739644
2007-11-21 13:36:58 +00:00
Luboš Luňák
ff2d52e933 Given that Plasma and KRunner now (again, and maybe again not ultimately,
but whatever) default to ARGB visual if available, it's better to turn off
compositing if no GLX visual is found for depth 32.
CCBUG: 152595


svn path=/trunk/KDE/kdebase/workspace/; revision=739261
2007-11-20 19:04:08 +00:00
Luboš Luňák
6c47fc8322 Before destroying a current context, set some other current context (even none).
Fixes crashes with Intel.


svn path=/trunk/KDE/kdebase/workspace/; revision=731410
2007-10-31 16:28:59 +00:00
Luboš Luňák
6daf4d3ec8 Add few missing glBindTexture() calls.
svn path=/trunk/KDE/kdebase/workspace/; revision=726337
2007-10-17 14:54:24 +00:00
Rivo Laks
aa0e5c7773 Dynamically load some of the used GLX symbols and make sure they exist before
initing gl mode.

svn path=/trunk/KDE/kdebase/workspace/; revision=721561
2007-10-05 14:10:13 +00:00
Rivo Laks
fc2b630b5c Use glXMakeCurrent() instead of glXMakeContextCurrent() (which is only available in glx >= 1.3)
svn path=/trunk/KDE/kdebase/workspace/; revision=720151
2007-10-02 14:57:15 +00:00
Rivo Laks
75e62eefa5 Apply lod bias only to the window texture
svn path=/trunk/KDE/kdebase/workspace/; revision=717334
2007-09-26 16:38:32 +00:00
Luboš Luňák
bdaee4e99f mTarget is not set at this point yet, so this gives opengl error.
Is it ok like this or does glTexEnv() require the texture to be bound?
CCMAIL: rivolaks@hot.ee


svn path=/trunk/KDE/kdebase/workspace/; revision=716886
2007-09-25 13:53:36 +00:00
Luboš Luňák
8d69535933 Add opengl debug checks, so that I don't have to add them everytime I need them.
svn path=/trunk/KDE/kdebase/workspace/; revision=716883
2007-09-25 13:42:20 +00:00
Luboš Luňák
e6069e9cf6 Arghl. Again a stupid bug caused by float having poor precision.
Reverting r700026 and changing floats to doubles again. I'd probably like
to change even the ones interfacing with OpenGL which I've left for now.


svn path=/trunk/KDE/kdebase/workspace/; revision=707987
2007-09-03 15:00:43 +00:00
Rivo Laks
ae4bc5c53d - Call GLTexture ctor
- Adjust texture lod bias after texture's been created (it's not created in init())

svn path=/trunk/KDE/kdebase/workspace/; revision=704983
2007-08-26 19:47:18 +00:00
Rivo Laks
a7ab423f93 Use texture lod bias when available to make trilinear-filtered windows look a bit sharper
svn path=/trunk/KDE/kdebase/workspace/; revision=704372
2007-08-24 18:45:08 +00:00
Luboš Luňák
d846a1e8a9 Use always float as the floating point type for compositing
(http://lists.kde.org/?l=kwin&m=118493073424327&w=2).


svn path=/trunk/KDE/kdebase/workspace/; revision=700026
2007-08-14 15:22:23 +00:00
Luboš Luňák
5a50381e1f Move the shader used for painting to WindowPaintData, as it's
more related to one painting than to a window.


svn path=/trunk/KDE/kdebase/workspace/; revision=698576
2007-08-10 11:26:58 +00:00
Laurent Montel
994c800d79 Adapt to new KWarning/kFatal/kDebug api
svn path=/trunk/KDE/kdebase/workspace/; revision=695877
2007-08-03 06:59:24 +00:00
Luboš Luňák
ac42ba0b4f A simple solution for alpha channel hacks - ignore them :).
The 'ignore ARGB visuals' option from Kompmgr probably doesn't make
much sense, those (usually old) apps can be run with XLIB_SKIP_ARGB_VISUALS=1 set.
Also remove the alpha clear hack used for decorations - I think decorations
instead should be fixed not to "unintentionally" have alpha set.


svn path=/trunk/KDE/kdebase/workspace/; revision=689916
2007-07-19 14:23:11 +00:00
Luboš Luňák
22c8626868 Add a TODO note.
svn path=/trunk/KDE/kdebase/workspace/; revision=689904
2007-07-19 12:53:14 +00:00
Luboš Luňák
e1c5f18414 Separate rendering for decoration and window contents, they can have
different opacity (opacity only for decoration option).


svn path=/trunk/KDE/kdebase/workspace/; revision=689855
2007-07-19 10:07:49 +00:00
Luboš Luňák
ea944065c7 Arghl, this is not static const, it changes.
svn path=/trunk/KDE/kdebase/workspace/; revision=689136
2007-07-17 18:14:17 +00:00
Luboš Luňák
f1108dd13a Let's say the copy buffer hack for old nvidia drivers is not necessary these days.
svn path=/trunk/KDE/kdebase/workspace/; revision=689095
2007-07-17 16:01:07 +00:00
Luboš Luňák
7b054df213 More debug info about possible initialization failures.
svn path=/trunk/KDE/kdebase/workspace/; revision=688960
2007-07-17 10:38:12 +00:00
Stephan Kulow
19d0dab807 init it with something. Even though it looks like it should
rather continue? (CID 3919)

svn path=/trunk/KDE/kdebase/workspace/; revision=688152
2007-07-15 08:13:04 +00:00
Philip Falkner
1fcb1967fe Zack's receent patch to Qt defaulting to ARGB visuals where possible
exposed a bug in our (ab)use of QX11Info::appDepth().  Make sure that
our buffers match the depth of the root window.

Thanks to Fredrik for the hint about DefaultDepth().


svn path=/trunk/KDE/kdebase/workspace/; revision=686998
2007-07-12 16:50:52 +00:00
Luboš Luňák
5faa397849 Vertex redesign - redo the way windows are split into smaller parts
for use in effects (and not only). Now a list of window quads (=window areas)
is created at the beginning of the paint pass, prepaint calls can modify
the split itself (i.e. divide it into more parts). The actual paint calls
can then modify these quads (i.e. transform their geometry). This will allow
better control of how the split is done and also allow painting e.g. only
the decoration differently. Still work in progress, but it works.
Also pass data to prepaint functions in a struct, as there is
already quite a number of them.


svn path=/trunk/KDE/kdebase/workspace/; revision=684893
2007-07-07 14:01:32 +00:00
Philip Falkner
c2ff6a4d7a Make sure to unbind the texture in tfp_mode when the underlying pixmap
is discarded.  Windows that have previously been mapped and unmapped now
update properly when mapped again.


svn path=/trunk/KDE/kdebase/workspace/; revision=683977
2007-07-05 19:59:55 +00:00
Luboš Luňák
cdb2d046c3 Always rebinding should not make sense anymore.
svn path=/trunk/KDE/kdebase/workspace/; revision=677309
2007-06-18 21:24:01 +00:00
Luboš Luňák
4040e9be58 Add a hack to make it work with XGL.
svn path=/trunk/KDE/kdebase/workspace/; revision=677300
2007-06-18 21:14:18 +00:00
Luboš Luňák
d9583cd3f6 Option for strict binding: kwinrc:Translucency:GLStrictBinding .
Non-nvidia users will probably need it set to true with TFP.


svn path=/trunk/KDE/kdebase/workspace/; revision=676673
2007-06-17 12:17:03 +00:00
Luboš Luňák
9c31c4555c I apparently misunderstood the semantics of texture_from_pixmap a bit - rebind
only when the compositing pixmap changes (as in: a new one), not when its contents
change. This finally makes TFP faster than SHM (70% vs 45% of non-composited
performance) and should about match Compiz/Beryl. After this change also strict
binding may finally make sense.


svn path=/trunk/KDE/kdebase/workspace/; revision=676667
2007-06-17 12:02:16 +00:00
Rivo Laks
424f906ab2 - Add optional color argument to renderGLGeometry() functions. If specified, it's used as vertex colors
array when rendering.
- Rearrange some renderGLGeometry() parameters.
- Don't use opengl arrays and glDrawArrays() when rendering a small number of vertices since in this
  case overhead of enabling/disabling the array is too big. Use immediate mode instead in such case.

svn path=/trunk/KDE/kdebase/workspace/; revision=675467
2007-06-14 10:05:51 +00:00
Luboš Luňák
acf4e9ce8e Work around gcc-3.3.3's problem with resolving namespaced symbols.
svn path=/trunk/KDE/kdebase/workspace/; revision=673984
2007-06-11 14:35:09 +00:00
Martin Koller
240b663df8 make compile on gcc-3.3.3
svn path=/trunk/KDE/kdebase/workspace/; revision=673195
2007-06-09 10:48:12 +00:00
Luboš Luňák
51107c77b7 We don't use stencil or depth buffer, so best configs are without those.
svn path=/trunk/KDE/kdebase/workspace/; revision=673164
2007-06-09 07:08:30 +00:00
Luboš Luňák
f089923fe2 Sets best values found so far only if the config passes all checks, part II.
svn path=/trunk/KDE/kdebase/workspace/; revision=673163
2007-06-09 07:06:11 +00:00
Luboš Luňák
dce6be54ca Fix pixmap leak with strict binding.
svn path=/trunk/KDE/kdebase/workspace/; revision=673154
2007-06-09 06:27:22 +00:00
Luboš Luňák
de8fa6c883 Clean up also the overlay window on failure.
svn path=/trunk/KDE/kdebase/workspace/; revision=669838
2007-05-30 15:09:06 +00:00
Luboš Luňák
1caa3f95ed Properly check for all needed extensions and handle gracefully absence.
svn path=/trunk/KDE/kdebase/workspace/; revision=669827
2007-05-30 14:22:09 +00:00
Luboš Luňák
94bbce020a Sets best values found so far only if the config passes all checks.
svn path=/trunk/KDE/kdebase/workspace/; revision=669782
2007-05-30 12:01:34 +00:00
Luboš Luňák
fdf4645013 Remove unnecessary calls to initDrawableConfigs().
svn path=/trunk/KDE/kdebase/workspace/; revision=669778
2007-05-30 11:44:16 +00:00
Luboš Luňák
fe3e66deb3 No ceilf().
BUG: 145776


svn path=/trunk/KDE/kdebase/workspace/; revision=667286
2007-05-22 12:07:19 +00:00
Philip Falkner
630f5793dc Update SHM mode.
For 16bpp pixmaps, we use GL_RGB and GL_UNSIGNED_SHORT_5_6_5 with
glTex(Sub)Image2D, which means that SHM mode works with 16bpp X
servers.

Also, only create one XShmPixmap per damaged pixmap, instead of one
per (optimised) damage rectangle.  Now we can use GL_RGB textures for
24bpp pixmaps, just like fallback mode does and tfp mode can.


svn path=/trunk/KDE/kdebase/workspace/; revision=659274
2007-04-29 21:22:49 +00:00
Luboš Luňák
f52b8e48cd branches/work/kwin_composite becomes new trunk kwin.
svn path=/trunk/KDE/kdebase/workspace/; revision=659202
2007-04-29 17:35:43 +00:00
Luboš Luňák
2b7e1f4993 Remove kwin, kwin_composite will become new trunk kwin, missing merges
from trunk will be merged in.


svn path=/trunk/KDE/kdebase/workspace/; revision=659200
2007-04-29 17:34:49 +00:00
Luboš Luňák
cd98bc12d5 Shared implementation of rendering gl geometry.
svn path=/branches/work/kwin_composite/; revision=656516
2007-04-21 16:02:19 +00:00
Rivo Laks
cc1a7a9eca Add GLRenderTarget class.
The render target is used to render the scene (or part of it) onto texture. This texture can then be used
  e.g. to do some postprocessing.
  Demo effect coming soon.

Move checkGLError() to kwineffects.*
Add GLTexture ctor which takes width and height and creates an empty texture (to be used with
  GLRenderTarget to render onto it)

svn path=/branches/work/kwin_composite/; revision=655489
2007-04-18 15:22:13 +00:00
Rivo Laks
0353f3376e Make effects actual plugins, so it's possible to load them on runtime.
There's also a kwineffects library now, containing the effects API, which makes it possible to write
  third-party effects.
API isn't complete yet and for now just two effects have been converted but I'm working on it :-)

svn path=/branches/work/kwin_composite/; revision=652226
2007-04-10 13:02:08 +00:00
Luboš Luňák
e3b865cd5f namespace KWinInternal -> KWin - shorter typing of names in gdb, yay
svn path=/branches/work/kwin_composite/; revision=650770
2007-04-05 12:07:35 +00:00
Luboš Luňák
8b5b40e4e8 Shadows. Right not it's only flat black rectangle, but otherwise
everything should work.


svn path=/branches/work/kwin_composite/; revision=646315
2007-03-25 10:48:07 +00:00
Luboš Luňák
81fdcfd20b Beryl has moved to git.
svn path=/branches/work/kwin_composite/; revision=645292
2007-03-22 08:38:30 +00:00
Philip Falkner
aa6d8eabc5 Add GLTexture class. This is a convenient wrapper around managing an OpenGL texture, as well as loading an image into it. Includes support for loading from QImage, QPixmap, and a file. Defaults to a GL_TEXTURE_2D target, and will scale image if necessary.
Also add SceneOpenGL::Texture class, based on GLTexture.  Optimised for SceneOpenGL::Window, this adds support for loading from an X Pixmap, as well as taking advantage of texture_from_pixmap/shm when available.  Automatically detects what texture target should be used, so be sure to enableUnnormalizedTexCoords() before painting.

Make SceneOpenGL::Window, BoxSwitchEffect, and ExplosionEffect use the new classes.

svn path=/branches/work/kwin_composite/; revision=645125
2007-03-21 18:14:09 +00:00
Luboš Luňák
da02ba11ca Scene*::Window classes are now too complex to be value-based,
allocate them dynamically.


svn path=/branches/work/kwin_composite/; revision=645046
2007-03-21 15:52:42 +00:00
Rivo Laks
19e7ebe1d8 Add shader support.
Effects can use setShader() method to set a custom shader for window rendering.

svn path=/branches/work/kwin_composite/; revision=643131
2007-03-16 13:00:01 +00:00
Luboš Luňák
d4a58f4152 QMap -> QHash
svn path=/branches/work/kwin_composite/; revision=642532
2007-03-14 16:50:19 +00:00
Luboš Luňák
f6ad1881e1 Support for window thumbnails.
svn path=/branches/work/kwin_composite/; revision=640344
2007-03-07 17:50:33 +00:00
Luboš Luňák
e61ecff9b9 Check that getting compositing pixmap of a window succeeded.
It may fail (or "fail") if the window is not mapped or if the geometry
doesn't match, both of which may happen due to the asynchronous
nature of X.


svn path=/branches/work/kwin_composite/; revision=637741
2007-02-27 16:13:34 +00:00
Philip Falkner
8299541652 Add build checks for XComposite, XDamage, XRender, OpenGL, and XShm.
KWin should now build and run with/without any or all of the above.

svn path=/branches/work/kwin_composite/; revision=633387
2007-02-13 23:28:36 +00:00
Rivo Laks
de2c5223ee Split window rendering into multiple methods
svn path=/branches/work/kwin_composite/; revision=630472
2007-02-05 14:01:09 +00:00
Philip Falkner
f060c3bfbb Improved filtering algorithm. Now fast filtering is used by default, while (depending on SmoothScale in kwinrc) bilinear filtering is used on transformed windows and screens.
Optionally, if SmoothScale is set to 2, trilinear filtering will be attempted instead of bilinear.  This requires GL_ARB_texture_non_power_of_two, GL_EXT_framebuffer_object, and valid mipmaps.

svn path=/branches/work/kwin_composite/; revision=629453
2007-02-02 19:58:35 +00:00
Philip Falkner
66d796002f Add basic mipmapping support for OpenGL; by itself this doesn't do much, but allows further capabilities.
svn path=/branches/work/kwin_composite/; revision=629452
2007-02-02 19:56:18 +00:00
Philip Falkner
1e2d811cea Add support for GL_EXT_framebuffer_object, needed for mipmaps.
svn path=/branches/work/kwin_composite/; revision=629450
2007-02-02 19:55:17 +00:00
Philip Falkner
8fe5ec7709 Use glXGetFBConfigs instead of glXChooseFBConfig.
This makes texture_from_pixmap mode work in more places.

svn path=/branches/work/kwin_composite/; revision=628804
2007-01-31 14:32:52 +00:00
Luboš Luňák
908ec070a9 Discard vertices on size change.
svn path=/branches/work/kwin_composite/; revision=628605
2007-01-30 16:42:03 +00:00
Luboš Luňák
43d393429d A window can be trasformed also by transforming the whole screen.
svn path=/branches/work/kwin_composite/; revision=628601
2007-01-30 16:36:53 +00:00
Luboš Luňák
409ceae7ff SHM does not support all color depths.
svn path=/branches/work/kwin_composite/; revision=628226
2007-01-29 15:22:29 +00:00
Luboš Luňák
2324e92b4e The workaround with explicitly asking for texture target with tfp
doesn't seem to be necessary.


svn path=/branches/work/kwin_composite/; revision=628209
2007-01-29 14:32:20 +00:00
Luboš Luňák
e0ed5d5f3f Move raster position relatively using glBitmap() rather
than using glRasterPos2f() - the latter causes drawing
artefacts at the bottom screen edge with some gfx cards


svn path=/branches/work/kwin_composite/; revision=627525
2007-01-26 22:50:31 +00:00
Philip Falkner
0341a3e8b5 Add support for GL_ARB_texture_non_power_of_two. Use GL_TEXTURE_2D wherever possible, even when that extension isn't available.
svn path=/branches/work/kwin_composite/; revision=626897
2007-01-24 21:35:58 +00:00
Luboš Luňák
e5f5ecf22e Handle a fixme.
KWin's debug area is 1212.
CCMAIL: Rivo Laks <rivolaks@hot.ee>


svn path=/branches/work/kwin_composite/; revision=626743
2007-01-24 14:26:04 +00:00
Rivo Laks
c2830a6360 Effects can now request windows to be subdivided into multiple quads.
Effects also get access to window's vertices. This can be used to change shape of
  the window, e.g. for wobble effect

svn path=/branches/work/kwin_composite/; revision=626706
2007-01-24 11:51:38 +00:00