[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Devel] Windows API vs. FreeType API, how to make FT API faster
From: |
jonathan . foster |
Subject: |
Re: [Devel] Windows API vs. FreeType API, how to make FT API faster |
Date: |
Fri, 4 Apr 2003 10:36:39 +0100 |
Hi,
> Anyone has a suggestion to make FT API faster?
Use the FreeType cache API.
Kind regards,
Jon Foster
--
To: <address@hidden>
cc: (bcc: Jonathan
Foster/RED/RESEARCH/PHILIPS)
Subject: [Devel] Windows
API vs. FreeType API, how to make FT API faster
"Happy" Classification:
<address@hidden>
Sent by:
address@hidden
04/04/2003 05:06 am
Please respond to devel
Hi, everyone
I'm writing a program based on Freetype API, and I do a benchmark comparing to
Windows API GetGlyphOutline, it seems that FT API is a little slower than
WinAPI, following is a snippet to show the problem. On my machine, ther running
result is :
ft_duration = 700ms
win_duration = 211ms
Anyone has a suggestion to make FT API faster?
Assume there are global variant, here I skip the initialization of them
**************************START OF CODE SNIPPET*****************************
int num_glyph; /** glyph number, about 1600 here*/
OO_UInt glyphs_index; /** Glyph indices array, all of them is different */
FT_Face face;
/**********************
* bench_ft is for FreeType API
*/
void bench_ft()
{
double start, end, ft_duration;
int i;
start = clock();
for(i=0; i<num_glyphs; i++){
FT_Load_Glyph(face, glyph_index[i],
FT_LOAD_DEFAULT|FT_LOAD_NO_BITMAP);
FT_Render_Glyph(face->glyph, ft_render_mode_mono);
}
end = clock();
ft_duration = start-end;
}
/**********************
* bench_win is for Windows API
*/
void bench_win()
{
double start, end, win_duration;
int i;
GLYPHMETRICS gm2;
DWORD SizeBuffer;
MAT2 mat2;
start = clock();
for(int i=0; i< num_glyphs; i++){
unsigned char* lpBuffer = NULL;
SizeBuffer =
GetGlyphOutline(m_dc,glyphs_index[i],GGO_BITMAP|GGO_GLYPH_INDEX,
&gm2,0,NULL,&mat2);
if(SizeBuffer == GDI_ERROR)
return;
unsigned char* lpBuffer = (unsigned char* )malloc(SizeBuffer);
if(!lpBuffer)
return;
GetGlyphOutline(m_dc,glyphs_index[i],GGO_BITMAP|GGO_GLYPH_INDEX,
&gm2,SizeBuffer,lpBuffer,&mat2);
}
end = clock();
win_duration = start-end;
}
**************************END OF CODE SNIPPET*****************************
Happy
4/4/2003