freenode/#clim - IRC Chatlog
Search
12:15:46
jackdaniel
I think that we can win big if we buffer all output during recording phase (instead of drawing it through) and replay visible output it in the end.
12:22:41
beach
That would not be so great. If there is lots of output then there will be a long pause before anything becomes visible.
12:23:53
beach
Instead it would be interesting to see whether it would be possible to do something similar to what gilberth is doing in that demo that we saw some time ago.
12:30:36
jackdaniel
I'm leaving now, so I'll just provide one example: custom clipping region requires drawing a pixmap (costful operation)
12:30:52
jackdaniel
if all output fits in old and new clipping region, then we don't have to perform it
12:32:31
jackdaniel
(also, if we want to have double-buffering, long display will be equally prone to pauses)
13:04:03
beach
I wrote a similar demo, and McCLIM is way faster, but it doesn't display very nicely.
13:07:42
beach
Do we still do coordinate swizzling. I wonder whether the phenomenon that I observe is related to coordinate swizzling.
15:39:20
jackdaniel
unless you mean glitches during displaying things. that could be due to coordinate swizzling, but if not that, you wouldn't be able to have such long window (due to mirror size limit).
15:42:41
jackdaniel
interestingly enough when I use single mirror (instead of multiple mirrors) your demo corrupts the display, but I won't investigate this issue now except of duly noting it on issue tracker
15:42:51
beach
Correct. At the end it looks fine. But after 3000 lines and 6000 lines, the text is overwritten with new lines. I think that corresponds to 32k pixels.
15:45:54
beach
It is needed so that a mirrored sheet can be larger than 32k pixels. If we have McCLIM do the sheet transformation and sheet region, then the only X11 coordinates that are going to be used will be for the top mirrored sheet.
15:46:26
jackdaniel
even on single mirror output to a sheet lands somewhere. if sheet is too big to fit in root window, then you still can't fit everything in it, so you need coordinate swizzling
15:46:31
beach
This is why I wold like to see a backend with a single mirrored sheet, so that we can get rid of coordinate swizzling.
15:46:54
jackdaniel
I'd even say, that problem is even more evident, because sheet doesn't have full mirror at its disposal, but rather whatever is left after translation
15:47:43
jackdaniel
drawing only things which are within clipped area is orthogonal to mirroring strategy
15:48:54
beach
With a single top-level mirror, we should have McCLIM do the sheet transformation and the sheet region so that output is clipped to the visible area.
15:49:20
jackdaniel
as I said, that is orthogonal, we could implement the same (very useful) thing for single and for multiple mirrors
15:50:21
jackdaniel
snippet above gives you a single top-level mirror and it doesn't give you quality you expect from it
15:50:47
jackdaniel
(nb: having single mirror causes that glitches doesn't disappear, that is a bug I'm reporting right now)
15:52:33
jackdaniel
also, if you draw only *visible* part, then you do coordinate swizzling by default
15:52:41
beach
OK, let me start over. I think coordinate swizzling is error prone. That's why I have been wanting to get rid of it for a long time. In order to do that, inner sheets can not be mirrored. That is why I have been wanting the X11 backend to have a single mirrored top-level sheet, and then to get rid of coordinate swizzling.
15:53:41
jackdaniel
because if something is displayed at coordinate 33k : 500, then when you scroll to that point you swizzle coordinates, so they are displayed on actual mirror at coordinate (for instance) 200:200
15:53:48
beach
When I say "coordinate swizzling", I am specifically referring to the code that gilberth implemented in order for it to be possible to have mirrored sheets that are larger than what an X11 window allows.
15:54:20
beach
I am not referring to the coordinate transformation that is done as part of the ordinary CLIM machinery for mapping coordinates in a sheet to coordinates in its parent.
15:54:31
jackdaniel
code for small sheet to achieve that will be very similar I imagine, just "maximum size" will be capped at window size
15:57:13
jackdaniel
Even taking your clarification into account I still think that the problem is irrelevant to mirroring. But I'll spare some more time to think about it.
16:54:43
jackdaniel
so the result of optimizing clipping to polygon is from 0.5s to something what doesn't come up in flamegraph
16:56:55
jackdaniel
tomorrow I'll finish adding similar improvements for standard-region-union, standard-region-difference and standard-region-intersection, so we are all set for merging xrender branch with blazing speed rendering :)
16:57:42
jackdaniel
nb: that basically screems for a demo/benchmark of clipping to the intersection of a polygon and an ellipse
16:59:15
jackdaniel
(I think of implementing the intersection with a logxor clipper gcontext-function)
17:00:24
jackdaniel
scratch that, I'll need to think about intersection on paper. difference and union are trivial