|
From: | lilypond |
Subject: | Re: [Lilypond-auto] Issue 2801 in lilypond: Patch: Approximates cross-staff slurs in VerticalAxisGroup vertical-skylines. |
Date: | Mon, 17 Sep 2012 09:10:17 +0000 |
Comment #58 on issue 2801 by address@hidden: Patch: Approximates cross-staff slurs in VerticalAxisGroup vertical-skylines.
http://code.google.com/p/lilypond/issues/detail?id=2801I think I've found the nature of the problem. I did a run of the regtests with a bunch of messages printed to std:err and it looks like every time there is a divergence, the order in which the grobs are read changes. This comes from sorting grobs by pointers and then running ::uniq. In theory this shouldn't matter, but in practice...
1) LilyPond requests pure height from grob X. 2) Grob X's pure height is somehow dependent on grob Y. 3) Depending on how a vector has been pointer-sorted...3a) Grob Y's actual offset has not yet been calculated because of the way a given vector is sorted, in which is pure offset is returned. 3b) Grob Y's actual offset has been calculated because it was triggered first and stashed in dim_cache_. Grob::pure_relative_y_coordinate will always return this as opposed to the pure value.
So there you have it. One way to solve this may be to disallow Grob::pure_relative_y_coordinate from ever returning something out of dim_cache_. This has no bearing on the caching in item.cc, so it shouldn't result in too much of a slow-down. I'll run regtests on a patch doing this...
[Prev in Thread] | Current Thread | [Next in Thread] |