[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
This commit is contained in:
parent
5e681678f6
commit
2504e2de84
@ -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
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
||||
|
@ -1,3 +1,6 @@
|
||||
/** For building a single object of the entire module */
|
||||
#define FT_MAKE_OPTION_SINGLE_OBJECT
|
||||
|
||||
/* END */
|
||||
#include "ftdense.c"
|
||||
#include "ftdenserend.c"
|
||||
/* END */
|
||||
|
@ -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;
|
||||
|
23
src/dense/module.mk
Normal file
23
src/dense/module.mk
Normal file
@ -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
|
73
src/dense/rules.mk
Normal file
73
src/dense/rules.mk
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user