On 06/08/10 02:47 AM, Werner LEMBERG wrote:
- Even though I'm getting different rasterization results between
2.3.9 and 2.3.11, I can't seem to see anything different being
done. The output I attached is the same for both versions,
leading me to suspect I'm not looking at the relevant code.
I suggest that you build your product with both 2.3.9 and 2.3.11 and
do two parallel gdb sessions, inserting breakpoints in the sweep
functions to find out where the additional pixel gets set. Then you
should be able to repeat it with the standalone version of the
rasterizer.
(sigh) My sincere apology for that last post, as I see now it was
completely useless...
Too many simultaneous things on the go, too many VMs, too many
hack-jobs to system libraries... In the end, it seems I was
debugging two separate 2.3.9 builds... (Duh!)
Now, on to _real_ 2.3.9 vs 2.3.11 info... :P
- Horizontal_Sweep_Drop() doesn't do anything when called (Bails
early due to leftmost/rightmost stub tests)
Then there aren't any drop-outs to consider during the horizontal
sweep phase. This is strange, however, since one of the drop routines
should be responsible for your additional pixel, I believe.
As you suspected, Horizontal_Sweep_Drop() seems to be the culprit,
and the 2.3.11 changes seem to be producing different results in
the second/final call to it.
I'm not going to try to understand the logic, nor suggest how to
fix it (Not my area of expertise!). Instead, I've tried to print
out all the relevant information [See attached] to hopefully allow
you to ponder how to best proceed.
If anything isn't there, let me know and I can add more output. I
realize it's not as ideal as a self-contained test, but I've been
busy debugging my program for now, and haven't got back to trying
to reproduce this in isolation...
Feel free to ask for more info, or to try hacking something, etc.
Thanks,
Ian
Draw_Sweep
Vertical_Sweep_Init
Vertical_Sweep_Span: y=1, x1=227,x2=560 , e1=4,e2=8
VSS: Changing target[0] from 0 to 15
VSS: Changing target[1] from 0 to 128
Vertical_Sweep_Step
Vertical_Sweep_Span: y=2, x1=163,x2=496 , e1=3,e2=7
VSS: Changing *target from 0 to 31
Vertical_Sweep_Step
Vertical_Sweep_Span: y=3, x1=99,x2=432 , e1=2,e2=6
VSS: Changing *target from 0 to 62
Vertical_Sweep_Step
Vertical_Sweep_Span: y=4, x1=35,x2=368 , e1=1,e2=5
VSS: Changing *target from 0 to 124
Vertical_Sweep_Step
Draw_Sweep
Horizontal_Sweep_Init
Horizontal_Sweep_Drop: y=0, x1=289,x2=291 , e1=320,e2=256
HSD: ras.precision=64, ras.dropOutControl=1
-> R.Stub test: (left->next == right) = 0
-> R.Stub test: (left->height <= 0) = 0
-> L.Stub test: (right->next == left) = 1
-> L.Stub test: (left->start == y) = 1
leftmost stub test bailing
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=1, x1=225,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=2, x1=161,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=3, x1=97,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=4, x1=34,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=5, x1=6,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=6, x1=6,x2=241
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=7, x1=6,x2=178
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=8, x1=6,x2=114
Horizontal_Sweep_Step
Horizontal_Sweep_Drop: y=9, x1=6,x2=50 , e1=64,e2=0
HSD: ras.precision=64, ras.dropOutControl=1
-> R.Stub test: (left->next == right) = 1
-> R.Stub test: (left->height <= 0) = 1
rightmost stub test bailing
Horizontal_Sweep_Step
Draw_Sweep
Vertical_Sweep_Init
Vertical_Sweep_Span: y=1, x1=227,x2=560 , e1=4,e2=8
VSS: Changing target[0] from 0 to 15
VSS: Changing target[1] from 0 to 128
Vertical_Sweep_Step
Vertical_Sweep_Span: y=2, x1=163,x2=496 , e1=3,e2=7
VSS: Changing *target from 0 to 31
Vertical_Sweep_Step
Vertical_Sweep_Span: y=3, x1=99,x2=432 , e1=2,e2=6
VSS: Changing *target from 0 to 62
Vertical_Sweep_Step
Vertical_Sweep_Span: y=4, x1=35,x2=368 , e1=1,e2=5
VSS: Changing *target from 0 to 124
Vertical_Sweep_Step
Draw_Sweep
Horizontal_Sweep_Init
Horizontal_Sweep_Drop: y=0, x1=289,x2=291 , e1=320,e2=256
HSD: ras.precision=64, ras.dropOutControl=1
-> R.Stub test: (left->next == right) = 0
-> R.Stub test: (left->height <= 0) = 0
-> R.Stub test: (left->flags & Overshoot_Top) = 16
-> R.Stub test: (x2 - x1 >= ras.precision_half) = 0
-> L.Stub test: (right->next == left) = 1
-> L.Stub test: (left->start == y) = 1
-> L.Stub test: (left->flags & Overshoot_Bottom) = 0
-> L.Stub test: (x2 - x1 >= ras.precision_half) = 0
leftmost stub test bailing
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=1, x1=225,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=2, x1=161,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=3, x1=97,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=4, x1=34,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=5, x1=6,x2=291
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=6, x1=6,x2=241
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=7, x1=6,x2=178
Horizontal_Sweep_Step
Horizontal_Sweep_Span: y=8, x1=6,x2=114
Horizontal_Sweep_Step
Horizontal_Sweep_Drop: y=9, x1=6,x2=50 , e1=64,e2=0
HSD: ras.precision=64, ras.dropOutControl=1
-> R.Stub test: (left->next == right) = 1
-> R.Stub test: (left->height <= 0) = 1
-> R.Stub test: (left->flags & Overshoot_Top) = 16
-> R.Stub test: (x2 - x1 >= ras.precision_half) = 1
-> L.Stub test: (right->next == left) = 0
-> L.Stub test: (left->start == y) = 0
-> L.Stub test: (left->flags & Overshoot_Bottom) = 0
-> L.Stub test: (x2 - x1 >= ras.precision_half) = 1
HSD: Changing bits[0] from 0 to 64
Horizontal_Sweep_Step
_______________________________________________
Freetype mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/freetype