summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnuj Verma <anujv@iitbhilai.ac.in>2020-07-30 17:12:04 +0530
committeranujverma <anujv@iitbhilai.ac.in>2020-08-02 16:33:21 +0530
commitf2553d89b24aee1b12bfbec82f893314d7c94024 (patch)
tree5fc97ffe44ec963bfa63db2aeac9883ca22cb9f1
parentaed19e152448d14116d8acb0f10ea10bc957a828 (diff)
downloadfreetype2-f2553d89b24aee1b12bfbec82f893314d7c94024.tar.gz
[sdf,bsdf] Put common propertied and functions in one file.
* src/sdf/ftsdfcommon.h: Added new file which contains common function, macros, properties for both `sdf' and `bsdf' renderer. * src/sdf/ftsdf.c, src/sdf/ftsdf.h, src/sdf/ftbsdf.c: Remove common properties and include `ftsdfcommon.h'. * src/sdf/rules.mk (SDF_DRV_H): Add the new `ftsdfcommon.h' file to include list.
-rw-r--r--[GSoC]ChangeLog14
-rw-r--r--src/sdf/ftbsdf.c24
-rw-r--r--src/sdf/ftsdf.c67
-rw-r--r--src/sdf/ftsdf.h12
-rw-r--r--src/sdf/ftsdfcommon.h122
-rw-r--r--src/sdf/rules.mk3
6 files changed, 142 insertions, 100 deletions
diff --git a/[GSoC]ChangeLog b/[GSoC]ChangeLog
index b0232c6d5..1c30387a8 100644
--- a/[GSoC]ChangeLog
+++ b/[GSoC]ChangeLog
@@ -1,5 +1,19 @@
2020-07-30 Anuj Verma <anujv@iitbhilai.ac.in>
+ [sdf,bsdf] Put common propertied and functions in one file.
+
+ * src/sdf/ftsdfcommon.h: Added new file which contains
+ common function, macros, properties for both `sdf' and
+ `bsdf' renderer.
+
+ * src/sdf/ftsdf.c, src/sdf/ftsdf.h, src/sdf/ftbsdf.c:
+ Remove common properties and include `ftsdfcommon.h'.
+
+ * src/sdf/rules.mk (SDF_DRV_H): Add the new `ftsdfcommon.h'
+ file to include list.
+
+2020-07-30 Anuj Verma <anujv@iitbhilai.ac.in>
+
* src/sdf/ftbsdf.c (compute_gradient): Use root(2)
for the filter. Also, use the computed gradient
to approximate the edge distance from a pixel's
diff --git a/src/sdf/ftbsdf.c b/src/sdf/ftbsdf.c
index cdf1406bd..101d7aa2a 100644
--- a/src/sdf/ftbsdf.c
+++ b/src/sdf/ftbsdf.c
@@ -6,6 +6,7 @@
#include "ftsdf.h"
#include "ftsdferrs.h"
+#include "ftsdfcommon.h"
/**************************************************************************
*
@@ -13,30 +14,10 @@
*
*/
- /* Convenient macro which calls the function */
- /* and returns if any error occurs. */
- #define FT_CALL( x ) do \
- { \
- error = ( x ); \
- if ( error != FT_Err_Ok ) \
- goto Exit; \
- } while ( 0 )
-
#define ONE 65536 /* 1 in 16.16 */
/**************************************************************************
*
- * typedefs
- *
- */
-
- typedef FT_Vector FT_16D16_Vec; /* with 16.16 fixed point components */
-
- typedef FT_Short FT_6D10; /* 6.10 fixed point representation */
- typedef FT_Fixed FT_16D16; /* 16.16 fixed point representation */
-
- /**************************************************************************
- *
* structs
*
*/
@@ -170,9 +151,6 @@
#undef CHECK_NEIGHBOR
- static FT_16D16
- square_root( FT_16D16 val );
-
/**************************************************************************
*
* @Function:
diff --git a/src/sdf/ftsdf.c b/src/sdf/ftsdf.c
index 277ce953d..6a38aedca 100644
--- a/src/sdf/ftsdf.c
+++ b/src/sdf/ftsdf.c
@@ -118,14 +118,6 @@
*
*/
- /* If it is defined to 1 then the rasterizer will use squared distances */
- /* for computation. It can greatly improve the performance but there is */
- /* a chance of overflow and artifacts. You can safely use it upto a */
- /* pixel size of 128. */
- #ifndef USE_SQUARED_DISTANCES
- # define USE_SQUARED_DISTANCES 0
- #endif
-
/* If it is defined to 1 then the rasterizer will use Newton-Raphson's */
/* method for finding shortest distance from a point to a conic curve. */
/* The other method is an analytical method which find the roots of a */
@@ -159,25 +151,6 @@
*
*/
- /* convert int to 26.6 fixed point */
- #define FT_INT_26D6( x ) ( x * 64 )
-
- /* convert int to 16.16 fixed point */
- #define FT_INT_16D16( x ) ( x * 65536 )
-
- /* convert 26.6 to 16.16 fixed point */
- #define FT_26D6_16D16( x ) ( x * 1024 )
-
-
- /* Convenient macro which calls the function */
- /* and returns if any error occurs. */
- #define FT_CALL( x ) do \
- { \
- error = ( x ); \
- if ( error != FT_Err_Ok ) \
- goto Exit; \
- } while ( 0 )
-
#define MUL_26D6( a, b ) ( ( a * b ) / 64 )
#define VEC_26D6_DOT( p, q ) ( MUL_26D6( p.x, q.x ) + \
MUL_26D6( p.y, q.y ) )
@@ -197,20 +170,6 @@
/**************************************************************************
*
- * typedefs
- *
- */
-
- typedef FT_Vector FT_26D6_Vec; /* with 26.6 fixed point components */
- typedef FT_Vector FT_16D16_Vec; /* with 16.16 fixed point components */
-
- typedef FT_Fixed FT_16D16; /* 16.16 fixed point representation */
- typedef FT_Fixed FT_26D6; /* 26.6 fixed point representation */
-
- typedef FT_BBox FT_CBox; /* control box of a curve */
-
- /**************************************************************************
- *
* structures and enums
*
*/
@@ -1164,32 +1123,6 @@
*
*/
- /* Original Algorithm: https://github.com/chmike/fpsqrt */
- static FT_16D16
- square_root( FT_16D16 val )
- {
- FT_ULong t, q, b, r;
-
-
- r = val;
- b = 0x40000000;
- q = 0;
- while( b > 0x40 )
- {
- t = q + b;
- if( r >= t )
- {
- r -= t;
- q = t + b;
- }
- r <<= 1;
- b >>= 1;
- }
- q >>= 8;
-
- return q;
- }
-
#if !USE_NEWTON_FOR_CONIC
/* [NOTE]: All the functions below down until rasterizer */
diff --git a/src/sdf/ftsdf.h b/src/sdf/ftsdf.h
index e44081ac8..0338092ab 100644
--- a/src/sdf/ftsdf.h
+++ b/src/sdf/ftsdf.h
@@ -6,16 +6,10 @@
#include FT_CONFIG_CONFIG_H
#include <freetype/ftimage.h>
-FT_BEGIN_HEADER
-
- /* default spread value */
- #define DEFAULT_SPREAD 8
+/* common properties and function */
+#include "ftsdfcommon.h"
- /* minimum spread supported by the rasterizer. */
- #define MIN_SPREAD 2
-
- /* maximum spread supported by the rasterizer. */
- #define MAX_SPREAD 32
+FT_BEGIN_HEADER
/* TEMPORARY */
typedef enum Optimizations_ {
diff --git a/src/sdf/ftsdfcommon.h b/src/sdf/ftsdfcommon.h
new file mode 100644
index 000000000..2e806c74f
--- /dev/null
+++ b/src/sdf/ftsdfcommon.h
@@ -0,0 +1,122 @@
+
+ /****************************************************
+ *
+ * This file contain common function and properties
+ * for both `sdf' and `bsdf' renderer.
+ *
+ */
+
+#ifndef FTSDFCOMMON_H_
+#define FTSDFCOMMON_H_
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include <freetype/freetype.h>
+
+FT_BEGIN_HEADER
+
+ /**************************************************************************
+ *
+ * default values (cannot be set individually for each renderer)
+ *
+ */
+
+ /* default spread value */
+ #define DEFAULT_SPREAD 8
+
+ /* minimum spread supported by the renderer. */
+ #define MIN_SPREAD 2
+
+ /* maximum spread supported by the renderer. */
+ #define MAX_SPREAD 32
+
+ /**************************************************************************
+ *
+ * common definitions (cannot be set individually for each renderer)
+ *
+ */
+
+ /* If it is defined to 1 then the rasterizer will use squared distances */
+ /* for computation. It can greatly improve the performance but there is */
+ /* a chance of overflow and artifacts. You can safely use it upto a */
+ /* pixel size of 128. */
+ #ifndef USE_SQUARED_DISTANCES
+ # define USE_SQUARED_DISTANCES 0
+ #endif
+
+ /**************************************************************************
+ *
+ * common macros
+ *
+ */
+
+ /* convert int to 26.6 fixed point */
+ #define FT_INT_26D6( x ) ( x * 64 )
+
+ /* convert int to 16.16 fixed point */
+ #define FT_INT_16D16( x ) ( x * 65536 )
+
+ /* convert 26.6 to 16.16 fixed point */
+ #define FT_26D6_16D16( x ) ( x * 1024 )
+
+ /* Convenient macro which calls the function */
+ /* and returns if any error occurs. */
+ #define FT_CALL( x ) do \
+ { \
+ error = ( x ); \
+ if ( error != FT_Err_Ok ) \
+ goto Exit; \
+ } while ( 0 )
+
+ /**************************************************************************
+ *
+ * common typedefs
+ *
+ */
+
+ typedef FT_Vector FT_26D6_Vec; /* with 26.6 fixed point components */
+ typedef FT_Vector FT_16D16_Vec; /* with 16.16 fixed point components */
+
+ typedef FT_Fixed FT_16D16; /* 16.16 fixed point representation */
+ typedef FT_Fixed FT_26D6; /* 26.6 fixed point representation */
+ typedef FT_Short FT_6D10; /* 6.10 fixed point representation */
+
+ typedef FT_BBox FT_CBox; /* control box of a curve */
+
+ /**************************************************************************
+ *
+ * common functions
+ *
+ */
+
+ /* Original Algorithm: https://github.com/chmike/fpsqrt */
+ static FT_16D16
+ square_root( FT_16D16 val )
+ {
+ FT_ULong t, q, b, r;
+
+
+ r = val;
+ b = 0x40000000;
+ q = 0;
+ while( b > 0x40 )
+ {
+ t = q + b;
+ if( r >= t )
+ {
+ r -= t;
+ q = t + b;
+ }
+ r <<= 1;
+ b >>= 1;
+ }
+ q >>= 8;
+
+ return q;
+ }
+
+FT_END_HEADER
+
+#endif /* FTSDFCOMMON_H_ */
+
+/* END */
diff --git a/src/sdf/rules.mk b/src/sdf/rules.mk
index c40b4f596..24857a8a1 100644
--- a/src/sdf/rules.mk
+++ b/src/sdf/rules.mk
@@ -24,7 +24,8 @@ SDF_DRV_SRC := $(SDF_DIR)/ftsdfrend.c \
#
SDF_DRV_H := $(SDF_DIR)/ftsdfrend.h \
$(SDF_DIR)/ftsdf.h \
- $(SDF_DIR)/ftsdferrs.h
+ $(SDF_DIR)/ftsdferrs.h \
+ $(SDF_DIR)/ftsdfcommon.h
# sdf driver object(s)