freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Git][freetype/freetype][master] [raster] Simplify dropout detection.


From: Alexei Podtelezhnikov (@apodtele)
Subject: [Git][freetype/freetype][master] [raster] Simplify dropout detection.
Date: Tue, 31 Oct 2023 15:01:37 +0000

Alexei Podtelezhnikov pushed to branch master at FreeType / FreeType

Commits:

  • dc519d06
    by Alexei Podtelezhnikov (Алексей Подтележников) at 2023-10-31T15:01:32+00:00
    [raster] Simplify dropout detection.
    
    * src/raster/ftrater.c (Draw_Sweep): Use a single dropout condition.

1 changed file:

Changes:

  • src/raster/ftraster.c
    ... ... @@ -2609,8 +2609,6 @@
    2609 2609
     
    
    2610 2610
         PProfile      P, Q, P_Left, P_Right;
    
    2611 2611
     
    
    2612
    -    Long          x1, x2, xs, e1, e2;
    
    2613
    -
    
    2614 2612
         TProfileList  waiting    = ras.fProfile;
    
    2615 2613
         TProfileList  draw_left  = NULL;
    
    2616 2614
         TProfileList  draw_right = NULL;
    
    ... ... @@ -2683,8 +2681,10 @@
    2683 2681
     
    
    2684 2682
             while ( P_Left && P_Right )
    
    2685 2683
             {
    
    2686
    -          x1 = P_Left ->X;
    
    2687
    -          x2 = P_Right->X;
    
    2684
    +          Long  x1 = P_Left ->X;
    
    2685
    +          Long  x2 = P_Right->X;
    
    2686
    +          Long  xs;
    
    2687
    +
    
    2688 2688
     
    
    2689 2689
               if ( x1 > x2 )
    
    2690 2690
               {
    
    ... ... @@ -2693,36 +2693,24 @@
    2693 2693
                 x2 = xs;
    
    2694 2694
               }
    
    2695 2695
     
    
    2696
    -          e1 = FLOOR( x1 );
    
    2697
    -          e2 = CEILING( x2 );
    
    2698
    -
    
    2699
    -          if ( x2 - x1 <= ras.precision &&
    
    2700
    -               e1 != x1 && e2 != x2     )
    
    2696
    +          /* if bottom ceiling exceeds top floor, it is a drop-out */
    
    2697
    +          if ( CEILING( x1 ) > FLOOR( x2 ) )
    
    2701 2698
               {
    
    2702
    -            if ( e1 > e2 || e2 == e1 + ras.precision )
    
    2703
    -            {
    
    2704
    -              Int  dropOutControl = P_Left->flags & 7;
    
    2705
    -
    
    2699
    +            Int  dropOutControl = P_Left->flags & 7;
    
    2706 2700
     
    
    2707
    -              if ( dropOutControl != 2 )
    
    2708
    -              {
    
    2709
    -                /* a drop-out was detected */
    
    2710 2701
     
    
    2711
    -                P_Left ->X = x1;
    
    2712
    -                P_Right->X = x2;
    
    2713
    -
    
    2714
    -                /* mark profile for drop-out processing */
    
    2715
    -                P_Left->countL = 1;
    
    2716
    -                dropouts++;
    
    2717
    -              }
    
    2702
    +            if ( dropOutControl != 2 )
    
    2703
    +            {
    
    2704
    +              P_Left ->X = x1;
    
    2705
    +              P_Right->X = x2;
    
    2718 2706
     
    
    2719
    -              goto Skip_To_Next;
    
    2707
    +              /* mark profile for drop-out processing */
    
    2708
    +              P_Left->countL = 1;
    
    2709
    +              dropouts++;
    
    2720 2710
                 }
    
    2721 2711
               }
    
    2722
    -
    
    2723
    -          ras.Proc_Sweep_Span( RAS_VARS y, x1, x2, P_Left, P_Right );
    
    2724
    -
    
    2725
    -        Skip_To_Next:
    
    2712
    +          else
    
    2713
    +            ras.Proc_Sweep_Span( RAS_VARS y, x1, x2, P_Left, P_Right );
    
    2726 2714
     
    
    2727 2715
               P_Left  = P_Left->link;
    
    2728 2716
               P_Right = P_Right->link;
    


  • reply via email to

    [Prev in Thread] Current Thread [Next in Thread]