summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnurag Thakur <anurag105csec21@bpitindia.edu.in>2022-11-19 10:53:24 +0530
committerAnurag Thakur <anurag105csec21@bpitindia.edu.in>2022-11-19 11:06:36 +0530
commit03cc2183e0df8f29098377d60296ba5d950ce866 (patch)
treef8fafc53b234b5ce90cf693c20e7d0fcb02ede37
parent4b77d947c574d8fa875c0b5c974f5d98c0e0a9d2 (diff)
downloadfreetype2-03cc2183e0df8f29098377d60296ba5d950ce866.tar.gz
[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
-rw-r--r--CMakeLists.txt1
-rw-r--r--include/freetype/config/ftmodule.h1
-rw-r--r--modules.cfg3
-rw-r--r--src/dense/dense.c5
-rw-r--r--src/dense/ftdense.c16
-rw-r--r--src/dense/module.mk23
-rw-r--r--src/dense/rules.mk73
7 files changed, 113 insertions, 9 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dff5b4ef5..642c33379 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 aded92e5e..7314a458a 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