[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] master c43fdf1: [ftgrid] Tweak direct rendering.
From: |
Alexei Podtelezhnikov |
Subject: |
[freetype2-demos] master c43fdf1: [ftgrid] Tweak direct rendering. |
Date: |
Thu, 20 Jun 2019 22:40:19 -0400 (EDT) |
branch: master
commit c43fdf1b6039b00650179ae62c4281d882c50033
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>
[ftgrid] Tweak direct rendering.
* src/ftcommon.c (FT_Demo_Sketch_Glyph_Color): Redefine surface origin
and clipping box instead of shifting outline.
* src/ftgrid.c (grid_status_draw_outline): Tweaked.
* graph/gblspans.h: Simplify.
* graph/grobjs.h (grSurface): Introduce `origin' byte.
* graph/gblblit.c: Silence compilation warning.
---
ChangeLog | 11 +++++++++++
graph/gblblit.c | 1 +
graph/gblspans.h | 9 ++-------
graph/grobjs.h | 5 +++--
src/ftcommon.c | 47 ++++++++++++++++++++++++++++++++++++-----------
src/ftgrid.c | 2 +-
6 files changed, 54 insertions(+), 21 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e9f0b09..be8a20a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2019-06-20 Alexei Podtelezhnikov <address@hidden>
+
+ [ftgrid] Tweak direct rendering.
+
+ * src/ftcommon.c (FT_Demo_Sketch_Glyph_Color): Redefine surface origin
+ and clipping box instead of shifting outline.
+ * src/ftgrid.c (grid_status_draw_outline): Tweaked.
+ * graph/gblspans.h: Simplify.
+ * graph/grobjs.h (grSurface): Introduce `origin' byte.
+ * graph/gblblit.c: Silence compilation warning.
+
2019-06-19 Alexei Podtelezhnikov <address@hidden>
[ftgrid] Direct outline drawing.
diff --git a/graph/gblblit.c b/graph/gblblit.c
index 718b811..5ff18e1 100644
--- a/graph/gblblit.c
+++ b/graph/gblblit.c
@@ -411,6 +411,7 @@ grSetTargetGamma( grBitmap* target,
surface->gray_spans = _gblender_spans_rgb565;
break;
default:
+ (void)_gblender_spans_bgr565; /* unused */
surface->gray_spans = (grSpanFunc)0;
}
}
diff --git a/graph/gblspans.h b/graph/gblspans.h
index b0c38e5..b9de313 100644
--- a/graph/gblspans.h
+++ b/graph/gblspans.h
@@ -1,7 +1,7 @@
GBLENDER_VARS;
- unsigned char* dst_line = surface->bitmap.buffer;
+ unsigned char* dst_origin = surface->origin - y * surface->bitmap.pitch;
gblender_use_channels( blender, 0 );
@@ -12,14 +12,9 @@
(void)(g);
(void)(b);
- if ( surface->bitmap.pitch > 0 )
- dst_line -= surface->bitmap.pitch * ( y - surface->bitmap.rows + 1 );
- else
- dst_line -= surface->bitmap.pitch * y;
-
for ( ; count--; spans++ )
{
- unsigned char* dst = dst_line + spans->x * GDST_INCR;
+ unsigned char* dst = dst_origin + spans->x * GDST_INCR;
unsigned short w = spans->len;
int a = GBLENDER_SHADE_INDEX( spans->coverage );
diff --git a/graph/grobjs.h b/graph/grobjs.h
index c5cfd7d..7d82024 100644
--- a/graph/grobjs.h
+++ b/graph/grobjs.h
@@ -129,8 +129,9 @@
GBlenderRec gblender[1];
- GBlenderPixel gcolor;
- grSpanFunc gray_spans;
+ unsigned char* origin; /* span origin */
+ GBlenderPixel gcolor; /* span color */
+ grSpanFunc gray_spans; /* span function */
grDevice* device;
grBool refresh;
diff --git a/src/ftcommon.c b/src/ftcommon.c
index 85762e6..6c1b34d 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -1734,16 +1734,45 @@
grColor color )
{
grSurface* surface = (grSurface*)display->surface;
- FT_Raster_Params params;
+ grBitmap* target = display->bitmap;
+ unsigned char* origin;
FT_Outline* outline;
+ FT_Raster_Params params;
if ( glyph->format != FT_GLYPH_FORMAT_OUTLINE )
return FT_Err_Ok;
- outline = &((FT_OutlineGlyph)glyph)->outline;
+ origin = target->buffer;
+ if ( target->pitch < 0 )
+ origin += ( y - target->rows ) * target->pitch;
+ else
+ origin += ( y - 1 ) * target->pitch;
+
+ switch ( target->mode )
+ {
+ case gr_pixel_mode_gray:
+ origin += x;
+ break;
+ case gr_pixel_mode_rgb565:
+ origin += x * 2;
+ break;
+ case gr_pixel_mode_rgb24:
+ origin += x * 3;
+ break;
+ case gr_pixel_mode_rgb32:
+ origin += x * 4;
+ break;
+ default:
+ fprintf( stderr, "Unsupported target\n" );
+ return FT_Err_Ok;
+ }
- FT_Outline_Translate( outline, x, display->bitmap->rows * 64 - y );
+ surface->origin = origin;
+ surface->gcolor = ((GBlenderPixel)color.chroma[0] << 16) |
+ ((GBlenderPixel)color.chroma[1] << 8 ) |
+ ((GBlenderPixel)color.chroma[2] ) ;
+ outline = &((FT_OutlineGlyph)glyph)->outline;
params.source = outline;
params.flags = FT_RASTER_FLAG_AA |
@@ -1751,14 +1780,10 @@
FT_RASTER_FLAG_CLIP;
params.gray_spans = (FT_SpanFunc)surface->gray_spans;
params.user = surface;
- params.clip_box.xMin = 0;
- params.clip_box.yMin = 0;
- params.clip_box.xMax = display->bitmap->width;
- params.clip_box.yMax = display->bitmap->rows;
-
- surface->gcolor = ((GBlenderPixel)color.chroma[0] << 16) |
- ((GBlenderPixel)color.chroma[1] << 8 ) |
- ((GBlenderPixel)color.chroma[2] ) ;
+ params.clip_box.xMin = -x;
+ params.clip_box.yMin = y - target->rows;
+ params.clip_box.xMax = -x + target->width;
+ params.clip_box.yMax = y;
return FT_Outline_Render( handle->library, outline, ¶ms );
}
diff --git a/src/ftgrid.c b/src/ftgrid.c
index a6b1c4b..def21f1 100644
--- a/src/ftgrid.c
+++ b/src/ftgrid.c
@@ -682,7 +682,7 @@
FT_Glyph_Stroke( &glyph, st->stroker, 1 );
error = FTDemo_Sketch_Glyph_Color( handle, display, glyph,
- ox * 64, oy * 64,
+ ox, oy,
st->outline_color );
if ( !error )
FT_Done_Glyph( glyph );
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master c43fdf1: [ftgrid] Tweak direct rendering.,
Alexei Podtelezhnikov <=