freenode/#shirakumo - IRC Chatlog
Search
11:53:01
Colleen
twitter.com/Shinmera/status... Website (HTML), Title: Shinmera auf Twitter: "I have a new styling system for Alloy that seems to work pretty well.… &q
16:03:19
Shinmera
when drawing, if you are caching values, or not using a constant redrawing backend, you would like to avoid spurious redraws by only refreshing parts that changed, and are, thus, "dirty".
16:04:45
Shinmera
- the element's internal state changes, causing changes in its rendered representation, requiring a redraw.
16:05:23
Shinmera
In either case these changes can happen programmatically without the surrounding context of the renderer
16:06:02
Shinmera
Now, typically the suggestion would be that you just keep track of a dirty bit in every renderable element.
16:07:18
Shinmera
This works until you reach the fact that layouts and especially components can appear in multiple rendering backends at once.
16:08:13
Shinmera
Because of this the dirty bit "fails". The element needs to be redrawn in every renderer, but if you clear the bit from the first renderer, it will be left stale in all the others.
16:08:47
Shinmera
So there needs to be some way of knowing when the element has been redrawn in every renderer that applies
16:09:31
Shinmera
but there's no connection from the components to the renderers, so the change in state can't propagate the dirty information to the renderer.
16:10:00
Shinmera
because there's no way to iterate all renderers either, we can't know when the component has been redrawn in all either.
19:21:16
plathrop
I don't know about "clean"... but can rendering objects "register" with the component and when the component is dirtied it "tells" all the renderers? Probably/possibly too slow...
19:25:16
Shinmera
There is a REGISTER function that must be called on every renderable with every renderer.
19:25:56
Shinmera
But I'd rather not have to keep a back link to every renderer from every renderable, because that would make it hard to discard renderers.
20:25:17
Shinmera
The only other idea I have is to provide a function the components can call, which the user must fill in to handle the dirtying logic (going through the renderers)
20:32:55
plathrop
Well, instead of keeping a back link to the renderer, have the renderable keep a hash of some renderer-id to a bit. When it is dirty it sets all the bits in that. When a renderer wants to see if it needs to redraw, it looks itself up in the renderable's dirty hash, redraws, and clears the bit?
20:34:49
Shinmera
yes, I thought of something similar, with just having a list of "fresh" renderers that they pushnew to after drawing
20:35:44
plathrop
It's not beautiful, I admit, but unless you are creating/discarding a really really large number of renderers, the stale refs shouldn't be that big a deal
20:37:42
Shinmera
some renderers might need a cleanup protocol to stay sane, but that's not part of the core.
20:38:17
plathrop
I can't think of a cleaner way than the hash, and just not worry too much about the stale keys. :-/
20:38:43
Shinmera
yeah, it's either: call out to user-implemented function, or use a weak table/weak vector.
20:39:52
Shinmera
same caveat as with all weak pointers: it's completely unpredictable when the pointer will be culled.