Hi!

I have for a time now been working on a new composing window manager to try
out a few UX ideas (https://redhog.github.io/InfiniteGlass videos: 
https://www.youtube.com/watch?v=vbt7qtwiLiM 
https://www.youtube.com/watch?v=E8f2KwgvxK4).

However, I'm having a performance problem in my redraw loop: When a lot is 
going on, e.g. during continuous stream of mouse events and/or PropertyNotify 
events + property gets, DamageNotify events for windows are often queued up and 
e.g. animations or video appear choppy.

To solve that, I start a redraw loop with a certain framerate when the first 
damage event comes in, to run for a set time. During this redraw loop, any 
window that has had DamageNotify events also on every frame reloads their 
contents to their textures, using glXCreatePixmap() / glXBindTexImageEXT(). 
This works fairly well, but when windows are large, this does mean that my 
renderer process starts eating a lot of CPU. Worse, it does this for a short 
amount of time _after_ all window changes have ceased.

Is there a way around this? Is the real solution to not use the X protocol (or 
properties) for e.g. controlling animations?

Would it help to have multiple connections to the X server, and subscribe only 
to damage events on one of them?

I know that damages are not for the whole window but for a certain region, but 
I don't think there's a way to update parts of a texture in OpenGL?

Thanks in advance,
Egil


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to