summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnuj Verma <anujv@iitbhilai.ac.in>2020-07-17 17:07:28 +0530
committeranujverma <anujv@iitbhilai.ac.in>2020-08-02 16:33:20 +0530
commit04f2a34a7d5dd8279c4f647bd51ec809fe133da5 (patch)
tree5680dc8da15fe6d132147ea2740dc79594b4fe2e
parent968a2f6237c52890f38dbe0df66814a86239e7ef (diff)
downloadfreetype2-04f2a34a7d5dd8279c4f647bd51ec809fe133da5.tar.gz
[sdfb] Added new module to generate SDF from bitmap.
* src/sdfb/sdfb.c, src/sdfb/ftsdfbrend.c, src/sdfb/ftsdfb.c, src/sdfb/ftsdfbrend.h, src/sdfb/ftsdfb.h, src/sdfb/ftsdfberrs.h: Added files required by the `sdfb' renderer module. * src/sdfb/rules.mk, src/sdfb/module.mk: Added files required to build the `sdfb' module using the default build system. * CMakeLists.txt (BASE_SRCS): Add `src/sdfb/sdfb.c' to the variable. * include/freetype/config/ftmodule.h: Added `sdfb' module declaration so that the module can be compiled when not compiling with GNU make. * modules.cfg (RASTER_MODULES): Include `sdfb' module to the default rasterizer module list. * include/freetype/ftmoderr.h: sdfb module error define * src/sdf/rules.mk: Add EOF.
-rw-r--r--CMakeLists.txt1
-rw-r--r--[GSoC]ChangeLog27
-rw-r--r--include/freetype/config/ftmodule.h1
-rw-r--r--include/freetype/ftmoderr.h1
-rw-r--r--modules.cfg12
-rw-r--r--src/sdf/rules.mk2
-rw-r--r--src/sdfb/ftsdfb.c2
-rw-r--r--src/sdfb/ftsdfb.h2
-rw-r--r--src/sdfb/ftsdfberrs.h18
-rw-r--r--src/sdfb/ftsdfbrend.c43
-rw-r--r--src/sdfb/ftsdfbrend.h43
-rw-r--r--src/sdfb/module.mk10
-rw-r--r--src/sdfb/rules.mk60
-rw-r--r--src/sdfb/sdfb.c9
14 files changed, 231 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index aa6360258..93d5506ed 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -348,6 +348,7 @@ set(BASE_SRCS
src/psnames/psnames.c
src/raster/raster.c
src/sdf/sdf.c
+ src/sdfb/sdfb.c
src/sfnt/sfnt.c
src/smooth/smooth.c
src/truetype/truetype.c
diff --git a/[GSoC]ChangeLog b/[GSoC]ChangeLog
index 7a2f7c2fa..19f339271 100644
--- a/[GSoC]ChangeLog
+++ b/[GSoC]ChangeLog
@@ -1,5 +1,32 @@
2020-07-17 Anuj Verma <anujv@iitbhilai.ac.in>
+ [sdfb] Added new module to generate SDF from bitmap.
+
+ * src/sdfb/sdfb.c, src/sdfb/ftsdfbrend.c,
+ src/sdfb/ftsdfb.c, src/sdfb/ftsdfbrend.h,
+ src/sdfb/ftsdfb.h, src/sdfb/ftsdfberrs.h:
+ Added files required by the `sdfb' renderer module.
+
+ * src/sdfb/rules.mk, src/sdfb/module.mk: Added
+ files required to build the `sdfb' module using
+ the default build system.
+
+ * CMakeLists.txt (BASE_SRCS): Add `src/sdfb/sdfb.c'
+ to the variable.
+
+ * include/freetype/config/ftmodule.h: Added `sdfb'
+ module declaration so that the module can be compiled
+ when not compiling with GNU make.
+
+ * modules.cfg (RASTER_MODULES): Include `sdfb' module
+ to the default rasterizer module list.
+
+ * include/freetype/ftmoderr.h: sdfb module error define
+
+ * src/sdf/rules.mk: Add EOF.
+
+2020-07-17 Anuj Verma <anujv@iitbhilai.ac.in>
+
[sdf] Added memory tracker.
* src/sdf/ftsdf.c (SDF_MemoryUser): Added struct
diff --git a/include/freetype/config/ftmodule.h b/include/freetype/config/ftmodule.h
index 81b665526..839a115d2 100644
--- a/include/freetype/config/ftmodule.h
+++ b/include/freetype/config/ftmodule.h
@@ -27,5 +27,6 @@ FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
FT_USE_MODULE( FT_Renderer_Class, ft_sdf_renderer_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_sdfb_renderer_class )
/* EOF */
diff --git a/include/freetype/ftmoderr.h b/include/freetype/ftmoderr.h
index b2c7d609e..dbbf6acc1 100644
--- a/include/freetype/ftmoderr.h
+++ b/include/freetype/ftmoderr.h
@@ -172,6 +172,7 @@
FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" )
FT_MODERRDEF( Sdf, 0x1700, "signed distance field raster module" )
+ FT_MODERRDEF( Sdfb, 0x1700, "signed distance field converter module" )
#ifdef FT_MODERR_END_LIST
diff --git a/modules.cfg b/modules.cfg
index d64c5ff08..5673e8700 100644
--- a/modules.cfg
+++ b/modules.cfg
@@ -103,6 +103,18 @@ RASTER_MODULES += smooth
RASTER_MODULES += sdf
####
+#### post processing modules -- for doing post processing on bitmaps
+####
+
+# Currently there is no seperate list for post processing modules
+# so we simply use the `RASTER_MODULES' list.
+
+# Signed distance field generator. This one uses bitmaps
+# to generate SDF unlike the `sdf' module which require
+# outlines.
+RASTER_MODULES += sdfb
+
+####
#### auxiliary modules
####
diff --git a/src/sdf/rules.mk b/src/sdf/rules.mk
index efc8ac53e..214725eae 100644
--- a/src/sdf/rules.mk
+++ b/src/sdf/rules.mk
@@ -56,3 +56,5 @@ $(OBJ_DIR)/%.$O: $(SDF_DIR)/%.c $(FREETYPE_H) $(SDF_DRV_H)
#
DRV_OBJS_S += $(SDF_DRV_OBJ_S)
DRV_OBJS_M += $(SDF_DRV_OBJ_M)
+
+# EOF
diff --git a/src/sdfb/ftsdfb.c b/src/sdfb/ftsdfb.c
new file mode 100644
index 000000000..7caf1e6b6
--- /dev/null
+++ b/src/sdfb/ftsdfb.c
@@ -0,0 +1,2 @@
+
+/* END */
diff --git a/src/sdfb/ftsdfb.h b/src/sdfb/ftsdfb.h
new file mode 100644
index 000000000..7caf1e6b6
--- /dev/null
+++ b/src/sdfb/ftsdfb.h
@@ -0,0 +1,2 @@
+
+/* END */
diff --git a/src/sdfb/ftsdfberrs.h b/src/sdfb/ftsdfberrs.h
new file mode 100644
index 000000000..1a78e459a
--- /dev/null
+++ b/src/sdfb/ftsdfberrs.h
@@ -0,0 +1,18 @@
+
+#ifndef FTSDFBERRS_H_
+#define FTSDFBERRS_H_
+
+#include <freetype/ftmoderr.h>
+
+#undef FTERRORS_H_
+
+#undef FT_ERR_PREFIX
+#define FT_ERR_PREFIX Sdfb_Err_
+#define FT_ERR_BASE FT_Mod_Err_Sdfb
+
+#include <freetype/fterrors.h>
+
+#endif /* FTSDFBERRS_H_ */
+
+
+/* END */
diff --git a/src/sdfb/ftsdfbrend.c b/src/sdfb/ftsdfbrend.c
new file mode 100644
index 000000000..c0051113d
--- /dev/null
+++ b/src/sdfb/ftsdfbrend.c
@@ -0,0 +1,43 @@
+
+#include "ftsdfbrend.h"
+
+#include "ftsdfberrs.h"
+
+ /**************************************************************************
+ *
+ * The macro FT_COMPONENT is used in trace mode. It is an implicit
+ * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+ * messages during execution.
+ */
+ #undef FT_COMPONENT
+ #define FT_COMPONENT sdfb
+
+
+
+ FT_DEFINE_RENDERER(
+ ft_sdfb_renderer_class,
+
+ FT_MODULE_RENDERER,
+ sizeof( SDFB_Renderer_Module ),
+
+ "sdfb",
+ 0x10000L,
+ 0x20000L,
+
+ NULL,
+
+ (FT_Module_Constructor) NULL,
+ (FT_Module_Destructor) NULL,
+ (FT_Module_Requester) NULL,
+
+ FT_GLYPH_FORMAT_BITMAP,
+
+ (FT_Renderer_RenderFunc) NULL, /* render_glyph */
+ (FT_Renderer_TransformFunc) NULL, /* transform_glyph */
+ (FT_Renderer_GetCBoxFunc) NULL, /* get_glyph_cbox */
+ (FT_Renderer_SetModeFunc) NULL, /* set_mode */
+
+ (FT_Raster_Funcs*) NULL /* raster_class */
+ )
+
+/* END */
diff --git a/src/sdfb/ftsdfbrend.h b/src/sdfb/ftsdfbrend.h
new file mode 100644
index 000000000..5805c518a
--- /dev/null
+++ b/src/sdfb/ftsdfbrend.h
@@ -0,0 +1,43 @@
+
+#ifndef FTSDFBREND_H_
+#define FTSDFBREND_H_
+
+
+#include <freetype/ftrender.h>
+#include <freetype/ftmodapi.h>
+#include <freetype/internal/ftobjs.h>
+
+
+FT_BEGIN_HEADER
+
+ /**************************************************************************
+ *
+ * @struct:
+ * SDFB_Renderer_Module
+ *
+ * @description:
+ * [TODO]
+ *
+ * @fields:
+ * [TODO]
+ *
+ */
+ typedef struct SDFB_Renderer_Module_
+ {
+ FT_RendererRec root;
+ FT_UInt spread;
+ FT_Bool flip_sign;
+ FT_Bool flip_y;
+
+ } SDFB_Renderer_Module, *SDFB_Renderer;
+
+
+ FT_DECLARE_RENDERER( ft_sdfb_renderer_class )
+
+
+FT_END_HEADER
+
+#endif /* FTSDFBREND_H_ */
+
+
+/* END */
diff --git a/src/sdfb/module.mk b/src/sdfb/module.mk
new file mode 100644
index 000000000..0bb308ca1
--- /dev/null
+++ b/src/sdfb/module.mk
@@ -0,0 +1,10 @@
+
+
+FTMODULE_H_COMMANDS += SDFB_RENDERER
+
+define SDFB_RENDERER
+$(OPEN_DRIVER) FT_Renderer_Class, ft_sdfb_renderer_class $(CLOSE_DRIVER)
+$(ECHO_DRIVER)sdfb $(ECHO_DRIVER_DESC)signed distance field converter$(ECHO_DRIVER_DONE)
+endef
+
+#EOF
diff --git a/src/sdfb/rules.mk b/src/sdfb/rules.mk
new file mode 100644
index 000000000..b17b008ff
--- /dev/null
+++ b/src/sdfb/rules.mk
@@ -0,0 +1,60 @@
+
+
+# sdf bitmap driver directory
+#
+SDFB_DIR := $(SRC_DIR)/sdfb
+
+
+# compilation flags for the driver
+#
+SDFB_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(SDFB_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
+
+
+# sdf bitmap driver sources (i.e., C files)
+#
+SDFB_DRV_SRC := $(SDFB_DIR)/ftsdfbrend.c \
+ $(SDFB_DIR)/ftsdfb.c
+
+
+# sdf bitmap driver headers
+#
+SDFB_DRV_H := $(SDFB_DRV_SRC:%.c=%.h) \
+ $(SDFB_DIR)/ftsdferrs.h
+
+
+# sdf bitmap driver object(s)
+#
+# SDFB_DRV_OBJ_M is used during `multi' builds.
+# SDFB_DRV_OBJ_S is used during `single' builds.
+#
+SDFB_DRV_OBJ_M := $(SDFB_DRV_SRC:$(SDFB_DIR)/%.c=$(OBJ_DIR)/%.$O)
+SDFB_DRV_OBJ_S := $(OBJ_DIR)/sdfb.$O
+
+
+# sdf driver source file for single build
+#
+SDFB_DRV_SRC_S := $(SDFB_DIR)/sdfb.c
+
+
+# sdf bitmap driver - single object
+#
+$(SDFB_DRV_OBJ_S): $(SDFB_DRV_SRC_S) $(SDFB_DRV_SRC) \
+ $(FREETYPE_H) $(SDFB_DRV_H)
+ $(SDFB_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(SDFB_DRV_SRC_S))
+
+
+# sdf bitmap driver - multiple objects
+#
+$(OBJ_DIR)/%.$O: $(SDFB_DIR)/%.c $(FREETYPE_H) $(SDFB_DRV_H)
+ $(SDFB_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+
+
+# update main driver list
+#
+DRV_OBJS_S += $(SDFB_DRV_OBJ_S)
+DRV_OBJS_M += $(SDFB_DRV_OBJ_M)
+
+# EOF
diff --git a/src/sdfb/sdfb.c b/src/sdfb/sdfb.c
new file mode 100644
index 000000000..67a683329
--- /dev/null
+++ b/src/sdfb/sdfb.c
@@ -0,0 +1,9 @@
+
+
+#define FT_MAKE_OPTION_SINGLE_OBJECT
+
+#include "ftsdfbrend.c"
+#include "ftsdfb.c"
+
+
+/* END */