[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] gsoc-anurag-2023 4b312496a 06/11: [dense] Enable module compilation,
Werner Lemberg <=