freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] gsoc-anurag-2022 1cf8e2ed5 19/27: Fix antialiasing


From: Werner Lemberg
Subject: [freetype2] gsoc-anurag-2022 1cf8e2ed5 19/27: Fix antialiasing
Date: Mon, 3 Oct 2022 17:51:54 -0400 (EDT)

branch: gsoc-anurag-2022
commit 1cf8e2ed5db006b6ff1a6a0abe9ab5767b5c735f
Author: Anurag Thakur <anurag105csec21@bpitindia.edu.in>
Commit: Anurag Thakur <anurag105csec21@bpitindia.edu.in>

    Fix antialiasing
---
 src/dense/ftdense.c     | 40 +++++++++++++++++++---------------------
 src/dense/ftdenserend.c |  1 +
 2 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/src/dense/ftdense.c b/src/dense/ftdense.c
index fb53ce089..78700a9b9 100644
--- a/src/dense/ftdense.c
+++ b/src/dense/ftdense.c
@@ -52,7 +52,7 @@ dense_move_to( const FT_Vector* to, dense_worker* worker )
 static int
 dense_line_to( const FT_Vector* to, dense_worker* worker )
 {
-  // printf( "dense_line_to: %d, %d\n", to->x, to->y );
+  //printf( "dense_line_to: %d, %d\n", to->x, to->y );
   dense_render_line( worker, UPSCALE( to->x ), UPSCALE( to->y ) );
   dense_move_to( to, worker );
   return 0;
@@ -76,6 +76,8 @@ swapold( unsigned char* a, unsigned char* b )
 void
 dense_render_line( dense_worker* worker, TPos to_x, TPos to_y )
 {
+  // printf("line from: %d, %d to %d, %d\n", worker->prev_x, worker->prev_y,
+  // to_x, to_y);
   TPos from_x = worker->prev_x;
   TPos from_y = worker->prev_y;
   if ( from_y == to_y )
@@ -238,6 +240,7 @@ dense_conic_to( const FT_Vector* control,
                 const FT_Vector* to,
                 dense_worker*    worker )
 {
+  //printf( "dense_conic_to: %d, %d\n", to->x, to->y );
   dense_render_quadratic( worker, control, to );
   return 0;
 }
@@ -259,9 +262,9 @@ dense_render_quadratic( dense_worker*    worker,
   The division by four is omitted to save time.
   */
 
-  FT_Vector aP0 = { worker->prev_x, worker->prev_y };
-  FT_Vector aP1 = { UPSCALE( control->x ), UPSCALE( control->y ) };
-  FT_Vector aP2 = { UPSCALE( to->x ), UPSCALE( to->y ) };
+  FT_Vector aP0 = { DOWNSCALE( worker->prev_x ), DOWNSCALE( worker->prev_y ) };
+  FT_Vector aP1 = { control->x, control->y };
+  FT_Vector aP2 = { to->x, to->y };
 
   float devx  = aP0.x - aP1.x - aP1.x + aP2.x;
   float devy  = aP0.y - aP1.y - aP1.y + aP2.y;
@@ -269,9 +272,7 @@ dense_render_quadratic( dense_worker*    worker,
 
   if ( devsq < 0.333f )
   {
-    dense_render_line( worker, aP2.x, aP2.y );
-    worker->prev_x = aP2.x;
-    worker->prev_y = aP2.y;
+    dense_line_to( &aP2, worker );
     return;
   }
 
@@ -285,24 +286,23 @@ dense_render_quadratic( dense_worker*    worker,
   expected to be 33% more in the limit".
   */
 
-  const float tol    = 3.0f;
-  int         n      = (int)floor( sqrt( sqrt( tol * devsq ) ) );
-  FT_Vector   p      = aP0;
-  float       nrecip = 1.0f / ( n + 1.0f );
-  float       t      = 0.0f;
+  const float tol = 3.0f;
+  int         n   = (int)floor( sqrt( sqrt( tol * devsq ) ) )/8;
+  //printf( "n is %d\n", n );
+  FT_Vector p      = aP0;
+  float     nrecip = 1.0f / ( n + 1.0f );
+  float     t      = 0.0f;
   for ( int i = 0; i < n; i++ )
   {
     t += nrecip;
     FT_Vector next = Lerp( t, Lerp( t, aP0, aP1 ), Lerp( t, aP1, aP2 ) );
-    dense_render_line( worker, next.x, next.y );
-    worker->prev_x = next.x;
-    worker->prev_y = next.y;
+    dense_line_to(&next, worker );
     p              = next;
   }
 
-  dense_render_line( worker, aP2.x, aP2.y );
-  worker->prev_x = aP2.x;
-  worker->prev_y = aP2.y;
+  dense_line_to( &aP2, worker );
+  // worker->prev_x = aP2.x;
+  // worker->prev_y = aP2.y;
 }
 
 static int
@@ -375,7 +375,6 @@ dense_raster_new( FT_Memory memory, dense_PRaster* araster )
 static void
 dense_raster_done( FT_Raster raster )
 {
-
   FT_Memory memory = (FT_Memory)( (dense_PRaster)raster )->memory;
 
   FT_FREE( raster );
@@ -455,11 +454,10 @@ dense_render_glyph( dense_worker* worker, const 
FT_Bitmap* target )
 static int
 dense_raster_render( FT_Raster raster, const FT_Raster_Params* params )
 {
-
   const FT_Outline* outline    = (const FT_Outline*)params->source;
   const FT_Bitmap*  target_map = params->target;
 
-  //dense_worker* worker = malloc( sizeof( dense_worker ) );
+  // dense_worker* worker = malloc( sizeof( dense_worker ) );
   dense_worker worker[1];
 
   if ( !raster )
diff --git a/src/dense/ftdenserend.c b/src/dense/ftdenserend.c
index 9f15ba481..a068a1baa 100644
--- a/src/dense/ftdenserend.c
+++ b/src/dense/ftdenserend.c
@@ -54,6 +54,7 @@ ft_dense_render( FT_Renderer      render,
                  FT_Render_Mode   mode,
                  const FT_Vector* origin )
 {
+ // printf("ft_dense_render\n");
   FT_Error    error   = FT_Err_Ok;
   FT_Outline* outline = &slot->outline;
   FT_Bitmap*  bitmap  = &slot->bitmap;



reply via email to

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