Commit Graph

6912 Commits

Author SHA1 Message Date
Anuj Verma 968a2f6237 [sdf] Added memory tracker.
* src/sdf/ftsdf.c (SDF_MemoryUser): Added struct
  which is used in place of `FT_Memory::user'.

* src/sdf/ftsdf.c (SDF_ALLOC, SDF_FREE): Added macros
  for allocating and deallocating memory. These macros
  restore the old `FT_Memory::user' before calling the
  relevant allocation/deallocation functions so as to
  not cause errors while debugging memory. And later
  they add the allocated memory size in a variable.

* src/sdf/ftsdf.c (*): Use `SDF_ALLOC', `SDF_FREE'
  instead of the `FT_' variant.
2020-08-02 16:33:19 +05:30
Anuj Verma dfdbc34108 Revert "[sdf] Added total memory allocation log."
This reverts commit d97e060891af0cc59af6fefa84484bec0d1794a4.
2020-08-02 16:33:19 +05:30
Anuj Verma 531d51eb2a [sdf] Added total memory allocation log.
* src/sdf/ftsdf.c (*): Replaced `FT_QNEW' and `FT_ALLOC_MULT'
  to custom macros in order to track memory allocations
  throughout the process of generating SDF. It basically
  add the memory being allocated to a static global variable
  and at the end outputs it at the end.
2020-08-02 16:33:19 +05:30
Anuj Verma 08d5a325dc * src/sdf/ftsdfrend.c (sdf_property_set): Minor fix. 2020-08-02 16:33:19 +05:30
Anuj Verma d40fc55dad [sdf] Temporary change.
Added new property to dynamically change the
optimization to be used to generate the SDF.
This can be used to compare the performance of
different optimization techniques without going
and recompiling the program.
And will also be used in the demo to check the
performance.
2020-08-02 16:33:19 +05:30
Anuj Verma dd5276601c [sdf] Added more properties.
Added two properties:
- `flip_y': To flip the generated SDF along the y axis.
- `flip_sign': By default outside is treated to have
   negative sign, setting `flip_sign' to 1 the outside
   pixels will have positive sign.

* src/sdf/ftsdf.* (*): Use the newly added properties.

* src/sdf/ftsdfrend.* (*): Add the newly added properties,
  and add functionality to set them using `FT_Property_Set'.
2020-08-02 16:33:19 +05:30
Anuj Verma 6b03b1c57a [sdf] Check for left or right fill.
* src/sdf/ftsdf.c (SDF_Params): Added struct which
  contains some internal data required by the rater-
  izer (such as left/right fill).

* src/sdf/ftsdf.c (sdf_raster_render): Determine the
  fill side and pass it to the `sdf_generate_' funcs.

* src/sdf/ftsdf.c (sdf_generate_): Use the new `SDF_Params'
  to generate SDF accordingly.
2020-08-02 16:33:19 +05:30
Anuj Verma 548bd3cf62 [sdf] Optimize the coarse grid optimization.
* src/sdf/ftsdf.c (sdf_generate_coarse_grid): Merge
  the relevant edge finding loop and shortest dist-
  ance search loop. We can find the relevant edges
  of a coarse grid and immediately use them to find
  the shortest distance of the points in the coarse
  grid. This drastically reduce memory usage and 
  performance.
  Also, do the sign assignment of the edges which was
  missing.
2020-08-02 16:33:19 +05:30
Anuj Verma ad696c07d3 * src/sdf/ftsdf.c (*): Fixed warnings.
Fixed various warnings and other few errors.
2020-08-02 16:33:19 +05:30
Anuj Verma 2045c7d9b3 * src/sdf/ftsdf.c (sdf_generate_coarse_grid): Comments.
Add more comments explaining the step by step
process of using coarse grid to increase the
performance of nearest distance search.
2020-08-02 16:33:19 +05:30
Anuj Verma 2afa0cb369 * src/sdf/ftsdf.c (sdf_generate_coarse_grid): Memory leak.
Release the allocated lists for the coarse grid after
we are done using them.
2020-08-02 16:33:19 +05:30
Anuj Verma 80c5bed575 [sdf] Completed the coarse grid optimization.
* src/sdf/ftsdf.c (sdf_generate_coarse_grid): Fixed
  an issue with position calculation and upside down
  images.
2020-08-02 16:33:19 +05:30
Anuj Verma 992609a1db [sdf] Partially completed the coarse grid optimization.
* src/sdf/ftsdf.c (sdf_generate_coarse_grid): Added
  functionality to check distances of all edges from
  the coarse grid and add the relevant edges to the 
  list.
  [Note]: The function is not complete yet.
2020-08-02 16:33:19 +05:30
Anuj Verma 111b755128 [sdf] Added the coarse grid optimization function.
* src/sdf/ftsdf.c (sdf_generate_coarse_grid): The
  function uses coarse grid to optimize nearest edge
  search performance.
2020-08-02 16:33:19 +05:30
Anuj Verma d9eeac807e [sdf] Remove use of `FT_List'.
Simply use a `next' pointer inside `SDF_Edge' and
`SDF_Contour' to create a linked list. This reduces
the number of allocations due to `FT_ListNode', also
we don't need a doubly linked list.

* src/sdf/ftsdf.c (SDF_Edge, SDF_Contour): Remove the
  `FT_List' and use a `next' pointer to create the
  linked list.

* src/sdf/ftsdf.c(sdf_edge_destructor, sdf_contour_destructor):
  Removed, not needed any more.

* src/sdf/ftsdf.c (*): Remove the use of `FT_List_'
  functions wherever necessary and sync with the new
  list.
2020-08-02 16:33:19 +05:30
Anuj Verma 8bf9da21e0 [sdf] Added subdivision optimization.
* src/sdf/ftsdfrend.c (sdf_generate_subdivision): The
  function generate SDF just like the `sdf_generate'
  function, but subdivide the curve into a number of
  lines and then use the `sdf_generate_bounding_box'
  function to generate SDF.
2020-08-02 16:33:19 +05:30
Anuj Verma fa7251ba35 [sdf] Added functions to subdivide a cubic curve.
* src/sdf/ftsdf.c (split_cubic, split_sdf_cubic):
  These functions can be used to subdivide a
  cubic bezier curve into line segments which can
  then be used to generate the SDF.

* src/sdf/ftsdf.c (split_sdf_shape): Added function
  to split a cubic into a line segments.

* src/sdf/ftsdf.c (sdf_shape_done): No need to pass
  `FT_Memory' as a parameter, it can be accessed
  from the `shape' struct.
2020-08-02 16:33:19 +05:30
Anuj Verma 1ba3da86e1 * src/sdf/ftsdf.c (split_sdf_shape): Typo. 2020-08-02 16:33:18 +05:30
Anuj Verma 90abe41ead * src/sdf/ftsdf.c (split_sdf_shape): Memory leak.
* src/sdf/ftsdf.c (split_sdf_shape): Memory leak.
  After recursion the edges variable becomes `NULL'
  so reassign it to deallocate the list completely.
2020-08-02 16:33:18 +05:30
Anuj Verma 470d02aa60 [sdf] Added functions to subdivide a conic curve.
* src/sdf/ftsdf.c (split_conic, split_sdf_conic):
  These functions can be used to subdivide a
  conic bezier curve into line segments which can
  then be used to generate the SDF.

* src/sdf/ftsdf.c (split_sdf_shape): Added function
  to split a outline into a line segments.
2020-08-02 16:33:18 +05:30
Anuj Verma de86a14b32 *[GSoC]ChangeLog: Fix typos. 2020-08-02 16:33:18 +05:30
Anuj Verma c4f64fc0e1 * src/sdf/ftsdfrend.c (sdf_generate_bounding_box): Add buffer for signs. 2020-08-02 16:33:18 +05:30
Anuj Verma e6576cc0e7 [sdf] Precompute the orthogonality. 2020-08-02 16:33:18 +05:30
Anuj Verma 1e3c41d19e [sdf] Added bounding box optimization. 2020-08-02 16:33:18 +05:30
preversewharf45 1d5d8ff288 * src/sdf/ftsdfrend.c (sdf_shape_dump): Use `%ld' to printf `signed long'. 2020-08-02 16:33:18 +05:30
Anuj Verma 44e16a0be6 * src/sdf/ftsdfrend.c (ft_sdf_render): Don't negate unsigned integers. 2020-08-02 16:33:18 +05:30
Anuj Verma 4fcc1653ca * src/sdf/ftsdf.c: Use ASCII single quote ('). 2020-08-02 16:33:18 +05:30
Anuj Verma ddf631729e [sdf] Added function to find shortest distance from a point to a cubic. 2020-08-02 16:33:18 +05:30
Anuj Verma 5baa2cefc6 * src/sdf/ftsdf.c (sdf_contour_get_min_distance): Use epsilon. 2020-08-02 16:33:18 +05:30
Anuj Verma 76e67227ec * src/sdf/ftsdf.c (sdf_shape_dump): Add more info to the debug output. 2020-08-02 16:33:18 +05:30
Anuj Verma 3e52d1a7a8 * src/sdf/ftsdf.c (MAX_NEWTON_DIVISIONS): Renamed to avoid confusion. 2020-08-02 16:33:18 +05:30
Anuj Verma 363f1e8de1 [sdf] Added Newton's method for conic curve. 2020-08-02 16:33:17 +05:30
Anuj Verma be3b7d7945 * src/sdf/ftsdf.c: More comments and code style fix. 2020-08-02 16:33:17 +05:30
Anuj Verma d0e3074738 [sdf] Make squared distances toggleable. 2020-08-02 16:33:17 +05:30
Anuj Verma 97474a7072 * src/sdf/ftsdf.c (get_min_distance_conic): Use 0, 1 in case of 0 roots. 2020-08-02 16:33:17 +05:30
Anuj Verma f9b4f37433 [sdf] Added function to find shortest distance from a point to a conic. 2020-08-02 16:33:17 +05:30
Anuj Verma 5cbcab183a * src/sdf/ftsdf.c (get_min_distance_line): Minor bug 2020-08-02 16:33:17 +05:30
Anuj Verma c8e3c5a420 * src/sdf/ftsdf.c: Refactored the code. 2020-08-02 16:33:17 +05:30
Anuj Verma f1de833a9d [sdf] Added functions to solve polynomial equations. 2020-08-02 16:33:17 +05:30
Anuj Verma 92a5312036 * src/sdf/ftsdf.c: Use FT_16D16 instead of FT_Fixed to avoid confusion. 2020-08-02 16:33:17 +05:30
Anuj Verma 811b6a7177 * src/sdf/ftsdf.c (cube_root, arc_cos): Added a few math functions. 2020-08-02 16:33:17 +05:30
Anuj Verma 38df99a1b4 [sdf] Fixed compilation under gnumake. 2020-08-02 16:33:17 +05:30
Anuj Verma 96883decbb [sdf] Added function to resolve corners. 2020-08-02 16:33:17 +05:30
Anuj Verma 03e6debb80 [sdf] The module can now generate SDF for outline with only lines. 2020-08-02 16:33:17 +05:30
Anuj Verma 063b65d583 [sdf] Added function to find shortest distance from a point to a line. 2020-08-02 16:33:17 +05:30
Anuj Verma 186cc478ae * src/sdf/ftsdf.c: Manually iterate through the lists. 2020-08-02 16:33:17 +05:30
Anuj Verma e9fce03032 [sdf] Added basic outline of the functions required to generate sdf. 2020-08-02 16:33:17 +05:30
Anuj Verma 6d4e00ae37 [sdf] Added `SDF_Raster_Params'. 2020-08-02 16:33:17 +05:30
Anuj Verma 3ebcbd7066 * include/freetype/ftimage.h (FT_RASTER_FLAG_): Added a new raster flag. 2020-08-02 16:33:16 +05:30
Anuj Verma f02d1acb89 * src/sdf/ftsdf.c (sdf_shape_dump): Use `FT_TRACEX' instead of `printf'. 2020-08-02 16:33:16 +05:30