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.
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.
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.
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
(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
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
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
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
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
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
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
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
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
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
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
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
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
is discarded. Windows that have previously been mapped and unmapped now
update properly when mapped again.
svn path=/trunk/KDE/kdebase/workspace/; revision=683977
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
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
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
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
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
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
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
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
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
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
instances and keeping them around after the window is closed, create
class Deleted as a representation of a closed window.
svn path=/branches/work/kwin_composite/; revision=626356
or Xrender picture, not after every repaint.
This also allows removing the confusing initPaint()/postPaint() calls in Scene.
svn path=/branches/work/kwin_composite/; revision=607500
and glTexImage texture creation. Stolen from Beryl (stolen from Looking Glass).
Not faster than TFP but faster then the original fallback glCopyTexImage
mode from glcompmgr.
svn path=/branches/work/kwin_composite/; revision=605283
Also dump drawing directly into the root window, OpenGL normally
clips the root window, so nothing is drawn. NVidia has "DisableGLXRootClipping",
but there's no way to detect that and there's still the non-db mode.
svn path=/branches/work/kwin_composite/; revision=604019