freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] gsoc-anurag-2023 4b312496a 06/11: [dense] Enable module comp


From: Werner Lemberg
Subject: [freetype2] gsoc-anurag-2023 4b312496a 06/11: [dense] Enable module compilation
Date: Mon, 5 Jun 2023 10:36:44 -0400 (EDT)

branch: gsoc-anurag-2023
commit 4b312496a309fb51a881fd07edc43ed2cb611753
Author: Anurag Thakur <anurag105csec21@bpitindia.edu.in>
Commit: Anurag Thakur <anurag105csec21@bpitindia.edu.in>

    [dense] Enable module compilation
    
    * src/dense/ftdense.c: Redefine FT_SWAP to fix compilation error
    
    * src/include/freetype/config/ftmodule.h: Added ft_dense_renderer_class
    
    * src/dense/dense.c: Build single object of module
    
    * modules.cfg: Added 'dense' RASTER_MODULE
    
    * src/dense/module.mk, src/dense/rules.mk: Added Makefile
    
    * CMakeLists.txt: Added 'dense.c' to compilation files
---
 CMakeLists.txt                     |  1 +
 include/freetype/config/ftmodule.h |  1 +
 modules.cfg                        |  3 ++
 src/dense/dense.c                  |  5 ++-
 src/dense/ftdense.c                | 16 ++++-----
 src/dense/module.mk                | 23 ++++++++++++
 src/dense/rules.mk                 | 73 ++++++++++++++++++++++++++++++++++++++
 7 files changed, 113 insertions(+), 9 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 554b580e9..4a6e3a60c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -405,6 +405,7 @@ set(BASE_SRCS
   src/cache/ftcache.c
   src/cff/cff.c
   src/cid/type1cid.c
+  src/dense/dense.c
   src/gzip/ftgzip.c
   src/lzw/ftlzw.c
   src/pcf/pcf.c
diff --git a/include/freetype/config/ftmodule.h 
b/include/freetype/config/ftmodule.h
index b315baba8..3b692aa28 100644
--- a/include/freetype/config/ftmodule.h
+++ b/include/freetype/config/ftmodule.h
@@ -24,6 +24,7 @@ FT_USE_MODULE( FT_Module_Class, psaux_module_class )
 FT_USE_MODULE( FT_Module_Class, psnames_module_class )
 FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
 FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_dense_renderer_class )
 FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
 FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
 FT_USE_MODULE( FT_Renderer_Class, ft_sdf_renderer_class )
diff --git a/modules.cfg b/modules.cfg
index 5b6c9b5a5..cb49d79c9 100644
--- a/modules.cfg
+++ b/modules.cfg
@@ -93,6 +93,9 @@ HINTING_MODULES += pshinter
 #### raster modules -- at least one is required for vector font formats
 ####
 
+# Dense Rasterizer
+RASTER_MODULES += dense
+
 # Anti-aliasing rasterizer.
 RASTER_MODULES += smooth
 
diff --git a/src/dense/dense.c b/src/dense/dense.c
index 6893aa715..fc0534750 100644
--- a/src/dense/dense.c
+++ b/src/dense/dense.c
@@ -1,3 +1,6 @@
 /** For building a single object of the entire module */
+#define FT_MAKE_OPTION_SINGLE_OBJECT
 
-/* END */
\ No newline at end of file
+#include "ftdense.c"
+#include "ftdenserend.c"
+/* END */
diff --git a/src/dense/ftdense.c b/src/dense/ftdense.c
index d2a4cde84..70c610885 100644
--- a/src/dense/ftdense.c
+++ b/src/dense/ftdense.c
@@ -20,7 +20,7 @@
 #define UPSCALE( x )   ( ( x ) * ( ONE_PIXEL >> 6 ) )
 #define DOWNSCALE( x ) ( ( x ) >> ( PIXEL_BITS - 6 ) )
 
-#define FT_SWAP(a, b)   ( (a) ^= (b) ^=(a) ^= (b))
+#define FT_SWAP(a, b)   { (a) = (a) + (b); (b) = (a) - (b); (a) = (a) - (b);}
 #define FT_MIN( a, b )  ( (a) < (b) ? (a) : (b) )
 #define FT_MAX( a, b )  ( (a) > (b) ? (a) : (b) )
 #define FT_ABS( a )     ( (a) < 0 ? -(a) : (a) )
@@ -256,17 +256,17 @@ dense_render_cubic( dense_worker* worker,
   FT_Vector aP2 = { control_2->x, control_2->y };
   FT_Vector aP3 = { to->x, to->y };
 
-  float     devx   = aP0.x - aP1->x - aP1->x + aP2->x;
-  float     devy   = aP0.y - aP1->y - aP1->y + aP2->y;
+  float     devx   = aP0.x - aP1.x - aP1.x + aP2.x;
+  float     devy   = aP0.y - aP1.y - aP1.y + aP2.y;
   float     devsq0 = devx * devx + devy * devy;
-  devx             = aP1->x - aP2->x - aP2->x + aP3->x;
-  devy             = aP1->y - aP2->y - aP2->y + aP3->y;
+  devx             = aP1.x - aP2.x - aP2.x + aP3.x;
+  devy             = aP1.y - aP2.y - aP2.y + aP3.y;
   float devsq1     = devx * devx + devy * devy;
   float devsq      = fmax( devsq0, devsq1 );
 
   if ( devsq < 0.333f )
   {
-    dense_render_line( worker, aP3->x, aP3->y );
+    dense_render_line( worker, aP3.x, aP3.y );
     return;
   }
 
@@ -278,8 +278,8 @@ dense_render_cubic( dense_worker* worker,
   for ( int i = 0; i < n; i++ )
   {
     t += nrecip;
-    FT_Vector a    = Lerp( t, Lerp( t, aP0, *aP1 ), Lerp( t, *aP1, *aP2 ) );
-    FT_Vector b    = Lerp( t, Lerp( t, *aP1, *aP2 ), Lerp( t, *aP2, *aP3 ) );
+    FT_Vector a    = Lerp( t, Lerp( t, aP0, aP1 ), Lerp( t, aP1, aP2 ) );
+    FT_Vector b    = Lerp( t, Lerp( t, aP1, aP2 ), Lerp( t, aP2, aP3 ) );
     FT_Vector next = Lerp( t, a, b );
     dense_render_line( worker, next.x, next.y );
     worker->prev_x = next.x;
diff --git a/src/dense/module.mk b/src/dense/module.mk
new file mode 100644
index 000000000..cf6b9cfac
--- /dev/null
+++ b/src/dense/module.mk
@@ -0,0 +1,23 @@
+#
+# FreeType 2 smooth renderer module definition
+#
+
+
+# Copyright (C) 1996-2021 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+FTMODULE_H_COMMANDS += DENSE_RENDERER
+
+define DENSE_RENDERER
+$(OPEN_DRIVER) FT_Renderer_Class, ft_dense_renderer_class $(CLOSE_DRIVER)
+$(ECHO_DRIVER)dense     $(ECHO_DRIVER_DESC)anti-aliased dense 
renderer$(ECHO_DRIVER_DONE)
+endef
+
+# EOF
diff --git a/src/dense/rules.mk b/src/dense/rules.mk
new file mode 100644
index 000000000..005116873
--- /dev/null
+++ b/src/dense/rules.mk
@@ -0,0 +1,73 @@
+#
+# FreeType 2 DENSE renderer module build rules
+#
+
+
+# Copyright (C) 1996-2021 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+# DENSE driver directory
+#
+DENSE_DIR := $(SRC_DIR)/dense
+
+
+# compilation flags for the driver
+#
+DENSE_COMPILE := $(CC) $(ANSIFLAGS)                               \
+                        $I$(subst /,$(COMPILER_SEP),$(DENSE_DIR)) \
+                        $(INCLUDE_FLAGS)                           \
+                        $(FT_CFLAGS)
+
+
+# DENSE driver sources (i.e., C files)
+#
+DENSE_DRV_SRC := $(DENSE_DIR)/ftdense.c  \
+                  $(DENSE_DIR)/ftdenserend.c
+
+
+# DENSE driver headers
+#
+DENSE_DRV_H := $(DENSE_DRV_SRC:%c=%h)  \
+                $(DENSE_DIR)/ftdenseerrs.h
+
+
+# DENSE driver object(s)
+#
+#   DENSE_DRV_OBJ_M is used during `multi' builds.
+#   DENSE_DRV_OBJ_S is used during `single' builds.
+#
+DENSE_DRV_OBJ_M := $(DENSE_DRV_SRC:$(DENSE_DIR)/%.c=$(OBJ_DIR)/%.$O)
+DENSE_DRV_OBJ_S := $(OBJ_DIR)/dense.$O
+
+# DENSE driver source file for single build
+#
+DENSE_DRV_SRC_S := $(DENSE_DIR)/dense.c
+
+
+# DENSE driver - single object
+#
+$(DENSE_DRV_OBJ_S): $(DENSE_DRV_SRC_S) $(DENSE_DRV_SRC) \
+                     $(FREETYPE_H) $(DENSE_DRV_H)
+       $(DENSE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(DENSE_DRV_SRC_S))
+
+
+# DENSE driver - multiple objects
+#
+$(OBJ_DIR)/%.$O: $(DENSE_DIR)/%.c $(FREETYPE_H) $(DENSE_DRV_H)
+       $(DENSE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+# update main driver object lists
+#
+DRV_OBJS_S += $(DENSE_DRV_OBJ_S)
+DRV_OBJS_M += $(DENSE_DRV_OBJ_M)
+
+
+# EOF



reply via email to

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