summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Podtelezhnikov <apodtele@gmail.com>2016-06-23 23:17:39 -0400
committerAlexei Podtelezhnikov <apodtele@gmail.com>2016-06-23 23:17:39 -0400
commit25e82bc2b54054b1819c92bad01b623de7d380c7 (patch)
treececaeb66fee3f84adf3ffb0a4f8d743f8a23b28b
parente22334812f83cd03fe988b5f903d66247e049b7d (diff)
downloadfreetype2-25e82bc2b54054b1819c92bad01b623de7d380c7.tar.gz
[smooth] Consolidate memory management.
* src/smooth/ftgrays.c (gray_init_cells): Remove function. (gray_TWorker): Remove fields that become local variables. (gray_raster_render): Move rendering buffer declaration from here. (gray_convert_glyph): ... to here and update accordingly.
-rw-r--r--ChangeLog9
-rw-r--r--src/smooth/ftgrays.c43
2 files changed, 15 insertions, 37 deletions
diff --git a/ChangeLog b/ChangeLog
index 219b5a6d0..a57b2674b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-06-23 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Consolidate memory management.
+
+ * src/smooth/ftgrays.c (gray_init_cells): Remove function.
+ (gray_TWorker): Remove fields that become local variables.
+ (gray_raster_render): Move rendering buffer declaration from here.
+ (gray_convert_glyph): ... to here and update accordingly.
+
2016-06-22 Alexei Podtelezhnikov <apodtele@gmail.com>
[smooth] Consolidate boundary checks.
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index 85d39c1a9..140ec8ec9 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -452,11 +452,6 @@ typedef ptrdiff_t FT_PtrDist;
void* render_span_data;
int span_y;
- int band_size;
-
- void* buffer;
- long buffer_size;
-
PCell* ycells;
TPos ycount;
@@ -510,27 +505,6 @@ typedef ptrdiff_t FT_PtrDist;
/*************************************************************************/
/* */
- /* Initialize the cells table. */
- /* */
- static void
- gray_init_cells( RAS_ARG_ void* buffer,
- long byte_size )
- {
- ras.buffer = buffer;
- ras.buffer_size = byte_size;
-
- ras.ycells = (PCell*) buffer;
- ras.cells = NULL;
- ras.max_cells = 0;
- ras.num_cells = 0;
- ras.area = 0;
- ras.cover = 0;
- ras.invalid = 1;
- }
-
-
- /*************************************************************************/
- /* */
/* Record the current cell in the table. */
/* */
static PCell
@@ -1910,6 +1884,8 @@ typedef ptrdiff_t FT_PtrDist;
static int
gray_convert_glyph( RAS_ARG )
{
+ TCell buffer[FT_MAX_GRAY_POOL];
+ const int band_size = FT_MAX_GRAY_POOL / 8;
gray_TBand bands[40];
gray_TBand* volatile band;
int volatile n, num_bands;
@@ -1917,7 +1893,7 @@ typedef ptrdiff_t FT_PtrDist;
/* set up vertical bands */
- num_bands = (int)( ( ras.max_ey - ras.min_ey ) / ras.band_size );
+ num_bands = (int)( ( ras.max_ey - ras.min_ey ) / band_size );
if ( num_bands == 0 )
num_bands = 1;
if ( num_bands >= 39 )
@@ -1928,7 +1904,7 @@ typedef ptrdiff_t FT_PtrDist;
for ( n = 0; n < num_bands; n++, min = max )
{
- max = min + ras.band_size;
+ max = min + band_size;
if ( n == num_bands - 1 || max > max_y )
max = max_y;
@@ -1954,10 +1930,10 @@ typedef ptrdiff_t FT_PtrDist;
if ( FT_MAX_GRAY_POOL - cell_start < 2 )
goto ReduceBands;
- ras.cells = (PCell)ras.buffer + cell_start;
+ ras.cells = buffer + cell_start;
ras.max_cells = (FT_PtrDist)( FT_MAX_GRAY_POOL - cell_start );
- ras.ycells = (PCell*)ras.buffer;
+ ras.ycells = (PCell*)buffer;
ras.ycount = (TPos)ycount;
while ( ycount )
ras.ycells[--ycount] = NULL;
@@ -2018,8 +1994,6 @@ typedef ptrdiff_t FT_PtrDist;
gray_TWorker worker[1];
- TCell buffer[FT_MAX_GRAY_POOL];
-
if ( !raster )
return FT_THROW( Invalid_Argument );
@@ -2100,12 +2074,7 @@ typedef ptrdiff_t FT_PtrDist;
ras.count_ex = ras.max_ex - ras.min_ex;
ras.count_ey = ras.max_ey - ras.min_ey;
- gray_init_cells( RAS_VAR_ buffer, sizeof ( buffer ) );
-
ras.outline = *outline;
- ras.num_cells = 0;
- ras.invalid = 1;
- ras.band_size = FT_MAX_GRAY_POOL / 8;
ras.num_gray_spans = 0;
ras.span_y = 0;