freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] gsoc-anurag-2022 fd1b43100 07/18: Integration prototype succ


From: Werner Lemberg
Subject: [freetype2] gsoc-anurag-2022 fd1b43100 07/18: Integration prototype successful
Date: Thu, 11 Aug 2022 04:28:55 -0400 (EDT)

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

    Integration prototype successful
---
 .vscode/settings.json   |   3 +-
 modules.cfg             |   2 +
 src/dense/ftdense.c     | 134 ++++++++++++++++++++++++++++++++----------------
 src/dense/ftdense.h     |   2 +-
 src/dense/ftdenserend.c |  22 ++++----
 src/smooth/ftgrays.c    |   5 +-
 src/smooth/ftsmooth.c   |   2 +
 7 files changed, 111 insertions(+), 59 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index 652233883..1a2f8af47 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,6 +1,7 @@
 {
     "files.associations": {
         "ftoutln.h": "c",
-        "svprop.h": "c"
+        "svprop.h": "c",
+        "ftdebug.h": "c"
     }
 }
\ No newline at end of file
diff --git a/modules.cfg b/modules.cfg
index 986b46fd3..9aa857061 100644
--- a/modules.cfg
+++ b/modules.cfg
@@ -97,6 +97,8 @@ RASTER_MODULES += dense
 # Anti-aliasing rasterizer.
 RASTER_MODULES += smooth
 
+# RASTER_MODULES += dense
+
 # Monochrome rasterizer.
 RASTER_MODULES += raster
 
diff --git a/src/dense/ftdense.c b/src/dense/ftdense.c
index e7f1b473f..bd4a49b2d 100644
--- a/src/dense/ftdense.c
+++ b/src/dense/ftdense.c
@@ -12,6 +12,16 @@
 #include <math.h>
 #include "ftdenseerrs.h"
 
+#define PIXEL_BITS 8
+
+#define ONE_PIXEL  ( 1 << PIXEL_BITS )
+#define TRUNC( x ) ( int )( ( x ) >> PIXEL_BITS )
+#define FRACT( x ) ( int )( ( x ) & ( ONE_PIXEL - 1 ) )
+
+#define UPSCALE( x )   ( ( x ) * ( ONE_PIXEL >> 6 ) )
+#define DOWNSCALE( x ) ( ( x ) >> ( PIXEL_BITS - 6 ) )
+
+
 typedef struct dense_TRaster_
 {
   void* memory;
@@ -30,19 +40,23 @@ Lerp( float aT, RasterFP_Point aP0, RasterFP_Point aP1 )
 static int
 dense_move_to( const FT_Vector* to, RasterFP* aRasterFP )
 {
-  RasterFP_Point lp = { to->x, to->y };
-  aRasterFP->last_point = lp;
+  FT_Pos x, y;
+
+  x                 = UPSCALE( to->x );
+  y                 = UPSCALE( to->y );
+  aRasterFP->prev_x = x;
+  aRasterFP->prev_y = y;
+  //printf( "last point is {%f, %f}", lp.m_x, lp.m_y );
   return 0;
 }
 
-
-
-
 static int
 dense_line_to( const FT_Vector* to, RasterFP* aRasterFP )
 {
-  RasterFP_Point tp = { to->x, to->y };
-  RasterFP_DrawLine( aRasterFP, aRasterFP->last_point, tp );
+  RasterFP_Point tp = {UPSCALE(to->x), UPSCALE(to->y)};
+  RasterFP_Point lp = {aRasterFP->prev_x, aRasterFP->prev_y};
+  RasterFP_DrawLine( aRasterFP, lp, tp );
+  dense_move_to( to, aRasterFP );
   return 0;
 }
 
@@ -54,11 +68,18 @@ RasterFP_DrawLine( RasterFP* aRasterFP, RasterFP_Point aP0, 
RasterFP_Point aP1 )
   // assert( aRasterFP );
   if ( aP0.m_y == aP1.m_y )
     return;
+  // aP0.m_x -= aRasterFP->m_origin_x;
+  // aP0.m_y -= aRasterFP->m_origin_y;
+  // aP1.m_x -= aRasterFP->m_origin_x;
+  // aP1.m_y -= aRasterFP->m_origin_y;
+
+  aP0.m_x = TRUNC((int)aP0.m_x );
+  aP0.m_y = TRUNC((int)aP0.m_y );
+  aP1.m_x = TRUNC((int)aP1.m_x );
+  aP1.m_y = TRUNC((int)aP1.m_y );
 
-  aP0.m_x -= aRasterFP->m_origin_x;
-  aP0.m_y -= aRasterFP->m_origin_y;
-  aP1.m_x -= aRasterFP->m_origin_x;
-  aP1.m_y -= aRasterFP->m_origin_y;
+  // printf( "Drawing a line from {%f, %f} to {%f, %f}\n", aP0.m_x, aP0.m_y,
+  //         aP1.m_x, aP1.m_y );
 
   float dir;
   if ( aP0.m_y < aP1.m_y )
@@ -146,8 +167,8 @@ RasterFP_DrawLine( RasterFP* aRasterFP, RasterFP_Point aP0, 
RasterFP_Point aP1 )
   // printf( "%d\n", y0 );
   // printf( "%d\n", y_limit );
   // printf( "%p\n", m_a );
-
-
+  // printf( "Drawing line from {%f, %f} to {%f, %f}\n", aP0.m_x, aP0.m_y, 
aP1.m_x,
+  //         aP1.m_y );
   for ( int y = y0; y < y_limit; y++ )
   {
     int   linestart = y * aRasterFP->m_w;
@@ -206,22 +227,17 @@ RasterFP_DrawLine( RasterFP* aRasterFP, RasterFP_Point 
aP0, RasterFP_Point aP1 )
     }
     x = xnext;
   }
-
 }
 
-
-
-
-
-
 static int
 dense_conic_to( const FT_Vector* control,
                 const FT_Vector* to,
                 RasterFP*        aRasterFP )
 {
-  RasterFP_Point controlP = { control->x, control->y };
-  RasterFP_Point toP      = { to->x, to->y };
-  RasterFP_DrawQuadratic( aRasterFP, aRasterFP->last_point, controlP, toP );
+  RasterFP_Point controlP = { UPSCALE(control->x), UPSCALE(control->y) };
+  RasterFP_Point toP      = { UPSCALE(to->x), UPSCALE(to->y) };
+  RasterFP_Point lP      = { aRasterFP->prev_x, aRasterFP->prev_y };
+  RasterFP_DrawQuadratic( aRasterFP, lP, controlP, toP );
   return 0;
 }
 
@@ -280,23 +296,19 @@ RasterFP_DrawQuadratic( RasterFP*      aRasterFP,
   RasterFP_DrawLine( aRasterFP, p, aP2 );
 }
 
-
-
-
-
-
-
 static int
 dense_cubic_to( const FT_Vector* control1,
                 const FT_Vector* control2,
                 const FT_Vector* to,
                 RasterFP*        aRasterFP )
 {
-  RasterFP_Point ap1 = { control1->x, control1->y };
-  RasterFP_Point ap2 = { control2->x, control2->y };
-  RasterFP_Point ap3 = { to->x, to->y };
+  RasterFP_Point ap1 = { UPSCALE(control1->x), UPSCALE(control1->y) };
+  RasterFP_Point ap2 = { UPSCALE(control2->x), UPSCALE(control2->y) };
+  RasterFP_Point ap3 = { UPSCALE(to->x), UPSCALE(to->y) };
 
-  RasterFP_DrawCubic( aRasterFP, aRasterFP->last_point, ap1, ap2, ap3 );
+  RasterFP_Point lP = {aRasterFP->prev_x, aRasterFP->prev_y};
+
+  RasterFP_DrawCubic( aRasterFP, lP, ap1, ap2, ap3 );
   return 0;
 }
 
@@ -396,11 +408,49 @@ FT_DEFINE_OUTLINE_FUNCS( dense_decompose_funcs,
 static int
 dense_render_glyph( RasterFP* aRasterFP, const FT_Bitmap* target )
 {
-  FT_Error error = FT_Outline_Decompose( &(aRasterFP->outline),
+  FT_Error error = FT_Outline_Decompose( &( aRasterFP->outline ),
                                          &dense_decompose_funcs, aRasterFP );
-
   // Render into bitmap
-  const float*   source   = aRasterFP->m_a;
+  const float* source = aRasterFP->m_a;
+
+
+// for (int i = 0; i < aRasterFP->m_h; i++)
+// {
+//   printf("%f\n", *(source+i));
+// }
+
+  // printf("pulu %d\n", aRasterFP->m_h);
+  printf( "Outputting bitmap\n" );
+  for ( int i = 0; i < aRasterFP->m_h; i++ )
+  {
+    printf( "\n" );
+    for ( int j = 0; j < aRasterFP->m_w; j++ )
+    {
+      float strength = *( source + ( i * aRasterFP->m_w + j ) );
+      if ( strength > 0.90 )
+      {
+        printf( "@|" );
+      }
+      else if ( strength > 0.70 )
+      {
+        printf( "#|" );
+      }
+      else if ( strength > 0.45 )
+      {
+        printf( "+|" );
+      }
+      else if ( strength > 0.20 )
+      {
+        printf( "*|" );
+      }
+      else
+      {
+        printf( ".|" );
+      }
+    }
+  }
+  printf( "\n" );
+
   unsigned char* dest     = target->buffer;
   unsigned char* dest_end = target->buffer + aRasterFP->m_w * aRasterFP->m_h;
   float          value    = 0.0f;
@@ -427,8 +477,6 @@ 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;
 
-  printf( "Rasterizing glyph" );
-
   RasterFP* aRasterFP = malloc( sizeof( RasterFP ) );
 
   if ( !raster )
@@ -449,7 +497,6 @@ dense_raster_render( FT_Raster raster, const 
FT_Raster_Params* params )
   if ( !target_map->buffer )
     return FT_THROW( Invalid_Argument );
 
-
   aRasterFP->m_origin_x = 0;
   aRasterFP->m_origin_y = 0;
   aRasterFP->m_w        = target_map->pitch;
@@ -457,19 +504,16 @@ dense_raster_render( FT_Raster raster, const 
FT_Raster_Params* params )
 
   int size = aRasterFP->m_w * aRasterFP->m_h + 4;
 
-  aRasterFP->m_a = realloc(aRasterFP, sizeof(float) * size);
-  if ( aRasterFP->m_a == NULL )
-  {
-    memset( aRasterFP, 0, sizeof( RasterFP ) );
-  }
+  aRasterFP->m_a      = malloc( sizeof( float ) * size );
   aRasterFP->m_a_size = size;
 
-  memset( aRasterFP->m_a, 0, sizeof( float ) * size );
-
+  memset( aRasterFP->m_a, 0, ( sizeof( float ) * size ) );
   /* exit if nothing to do */
   if ( aRasterFP->m_w <= aRasterFP->m_origin_x ||
        aRasterFP->m_h <= aRasterFP->m_origin_y )
+  {
     return 0;
+  }
   return dense_render_glyph( aRasterFP, target_map );
 }
 
diff --git a/src/dense/ftdense.h b/src/dense/ftdense.h
index f62f32db3..606e020fc 100644
--- a/src/dense/ftdense.h
+++ b/src/dense/ftdense.h
@@ -106,7 +106,7 @@ extern "C"
     /** The y origin of the raster. */
     int m_origin_y;
 
-    RasterFP_Point last_point;
+    FT_Pos prev_x, prev_y;
 
     FT_Outline outline;
   } RasterFP;
diff --git a/src/dense/ftdenserend.c b/src/dense/ftdenserend.c
index b4996c25d..589c4bb83 100644
--- a/src/dense/ftdenserend.c
+++ b/src/dense/ftdenserend.c
@@ -98,22 +98,22 @@ ft_dense_render( FT_Renderer      render,
 
 
   /* the padding will simply be equal to the `spread' */
-  // x_shift = 64 * -slot->bitmap_left;
-  // y_shift = 64 * -slot->bitmap_top;
+  x_shift = 64 * -slot->bitmap_left;
+  y_shift = 64 * -slot->bitmap_top;
 
 
   slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
-  // y_shift += 64 * (FT_Int)bitmap->rows;
+  y_shift += 64 * (FT_Int)bitmap->rows;
 
-  // if ( origin )
-  // {
-  //   x_shift += origin->x;
-  //   y_shift += origin->y;
-  // }
+  if ( origin )
+  {
+    x_shift += origin->x;
+    y_shift += origin->y;
+  }
 
-  // /* translate outline to render it into the bitmap */
-  // if ( x_shift || y_shift )
-  //   FT_Outline_Translate( outline, x_shift, y_shift );
+  /* translate outline to render it into the bitmap */
+  if ( x_shift || y_shift )
+    FT_Outline_Translate( outline, x_shift, y_shift );
 
   /* set up parameters */
   params.target = bitmap;
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index 28a081cbc..0a40aa237 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -876,10 +876,13 @@ typedef ptrdiff_t  FT_PtrDist;
     TCoord  fx1, fy1, fx2, fy2;
     TCoord  ex1, ey1, ex2, ey2;
 
-
+    printf( "Line from {%li, %li} to {%li, %li}, with a maximum dimensions of 
%d by %d\n", ras.x, ras.y, to_x,
+            to_y, ras.max_ex, ras.max_ey );
     ey1 = TRUNC( ras.y );
     ey2 = TRUNC( to_y );
 
+    printf("Truncation reduced prev y from %ld to %d\n", ras.y, ey1);
+
     /* perform vertical clipping */
     if ( ( ey1 >= ras.max_ey && ey2 >= ras.max_ey ) ||
          ( ey1 <  ras.min_ey && ey2 <  ras.min_ey ) )
diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c
index df227c375..41778870b 100644
--- a/src/smooth/ftsmooth.c
+++ b/src/smooth/ftsmooth.c
@@ -493,6 +493,8 @@
     /* translate outline to render it into the bitmap */
     if ( x_shift || y_shift )
       FT_Outline_Translate( outline, x_shift, y_shift );
+    printf( "x_shift is %li\n", x_shift );
+    printf( "y_shift is %li\n", y_shift );
 
     if ( mode == FT_RENDER_MODE_NORMAL ||
          mode == FT_RENDER_MODE_LIGHT  )



reply via email to

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