mirror of
https://github.com/reactos/reactos.git
synced 2025-08-08 09:43:03 +00:00
[NTGDI][FREETYPE] Check 'No transformation' for performance (#6850)
Slight performance improvement. JIRA issue: CORE-15554 - Add bNoTransform variable. - Check whether mat is identity matrix. - If so, then don't do FT_Vector_Transform.
This commit is contained in:
parent
e79c896592
commit
d076146f4e
1 changed files with 27 additions and 12 deletions
|
@ -5814,7 +5814,8 @@ IntGetTextDisposition(
|
||||||
IN INT Count,
|
IN INT Count,
|
||||||
IN OPTIONAL LPINT Dx,
|
IN OPTIONAL LPINT Dx,
|
||||||
IN OUT PFONT_CACHE_ENTRY Cache,
|
IN OUT PFONT_CACHE_ENTRY Cache,
|
||||||
IN UINT fuOptions)
|
IN UINT fuOptions,
|
||||||
|
IN BOOL bNoTransform)
|
||||||
{
|
{
|
||||||
LONGLONG X64 = 0, Y64 = 0;
|
LONGLONG X64 = 0, Y64 = 0;
|
||||||
INT i, glyph_index;
|
INT i, glyph_index;
|
||||||
|
@ -5822,7 +5823,7 @@ IntGetTextDisposition(
|
||||||
FT_Face face = Cache->Hashed.Face;
|
FT_Face face = Cache->Hashed.Face;
|
||||||
BOOL use_kerning = FT_HAS_KERNING(face);
|
BOOL use_kerning = FT_HAS_KERNING(face);
|
||||||
ULONG previous = 0;
|
ULONG previous = 0;
|
||||||
FT_Vector delta;
|
FT_Vector delta, vec;
|
||||||
|
|
||||||
ASSERT_FREETYPE_LOCK_HELD();
|
ASSERT_FREETYPE_LOCK_HELD();
|
||||||
|
|
||||||
|
@ -5850,15 +5851,19 @@ IntGetTextDisposition(
|
||||||
}
|
}
|
||||||
else if (fuOptions & ETO_PDY)
|
else if (fuOptions & ETO_PDY)
|
||||||
{
|
{
|
||||||
FT_Vector vec = { Dx[2 * i + 0] << 6, Dx[2 * i + 1] << 6 };
|
vec.x = (Dx[2 * i + 0] << 6);
|
||||||
FT_Vector_Transform(&vec, &Cache->Hashed.matTransform);
|
vec.y = (Dx[2 * i + 1] << 6);
|
||||||
|
if (!bNoTransform)
|
||||||
|
FT_Vector_Transform(&vec, &Cache->Hashed.matTransform);
|
||||||
X64 += vec.x;
|
X64 += vec.x;
|
||||||
Y64 -= vec.y;
|
Y64 -= vec.y;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FT_Vector vec = { Dx[i] << 6, 0 };
|
vec.x = (Dx[i] << 6);
|
||||||
FT_Vector_Transform(&vec, &Cache->Hashed.matTransform);
|
vec.y = 0;
|
||||||
|
if (!bNoTransform)
|
||||||
|
FT_Vector_Transform(&vec, &Cache->Hashed.matTransform);
|
||||||
X64 += vec.x;
|
X64 += vec.x;
|
||||||
Y64 -= vec.y;
|
Y64 -= vec.y;
|
||||||
}
|
}
|
||||||
|
@ -5989,11 +5994,12 @@ IntExtTextOutW(
|
||||||
EXLATEOBJ exloRGB2Dst, exloDst2RGB;
|
EXLATEOBJ exloRGB2Dst, exloDst2RGB;
|
||||||
POINT Start;
|
POINT Start;
|
||||||
PMATRIX pmxWorldToDevice;
|
PMATRIX pmxWorldToDevice;
|
||||||
FT_Vector delta, vecAscent64, vecDescent64;
|
FT_Vector delta, vecAscent64, vecDescent64, vec;
|
||||||
LOGFONTW *plf;
|
LOGFONTW *plf;
|
||||||
BOOL use_kerning, bResult, DoBreak;
|
BOOL use_kerning, bResult, DoBreak;
|
||||||
FONT_CACHE_ENTRY Cache;
|
FONT_CACHE_ENTRY Cache;
|
||||||
FT_Matrix mat;
|
FT_Matrix mat;
|
||||||
|
BOOL bNoTransform;
|
||||||
|
|
||||||
/* Check if String is valid */
|
/* Check if String is valid */
|
||||||
if (Count > 0xFFFF || (Count > 0 && String == NULL))
|
if (Count > 0xFFFF || (Count > 0 && String == NULL))
|
||||||
|
@ -6120,6 +6126,10 @@ IntExtTextOutW(
|
||||||
FT_Matrix_Multiply(&mat, &Cache.Hashed.matTransform);
|
FT_Matrix_Multiply(&mat, &Cache.Hashed.matTransform);
|
||||||
FT_Set_Transform(face, &Cache.Hashed.matTransform, NULL);
|
FT_Set_Transform(face, &Cache.Hashed.matTransform, NULL);
|
||||||
|
|
||||||
|
/* Is there no transformation? */
|
||||||
|
bNoTransform = ((mat.xy == 0) && (mat.yx == 0) &&
|
||||||
|
(mat.xx == (1 << 16)) && (mat.yy == (1 << 16)));
|
||||||
|
|
||||||
/* Calculate the ascent point and the descent point */
|
/* Calculate the ascent point and the descent point */
|
||||||
vecAscent64.x = 0;
|
vecAscent64.x = 0;
|
||||||
vecAscent64.y = (FontGDI->tmAscent << 6);
|
vecAscent64.y = (FontGDI->tmAscent << 6);
|
||||||
|
@ -6151,7 +6161,8 @@ IntExtTextOutW(
|
||||||
/* Calculate the text width if necessary */
|
/* Calculate the text width if necessary */
|
||||||
if ((fuOptions & ETO_OPAQUE) || (pdcattr->flTextAlign & (TA_CENTER | TA_RIGHT)))
|
if ((fuOptions & ETO_OPAQUE) || (pdcattr->flTextAlign & (TA_CENTER | TA_RIGHT)))
|
||||||
{
|
{
|
||||||
if (!IntGetTextDisposition(&DeltaX64, &DeltaY64, String, Count, Dx, &Cache, fuOptions))
|
if (!IntGetTextDisposition(&DeltaX64, &DeltaY64, String, Count, Dx, &Cache,
|
||||||
|
fuOptions, bNoTransform))
|
||||||
{
|
{
|
||||||
IntUnLockFreeType();
|
IntUnLockFreeType();
|
||||||
bResult = FALSE;
|
bResult = FALSE;
|
||||||
|
@ -6323,15 +6334,19 @@ IntExtTextOutW(
|
||||||
}
|
}
|
||||||
else if (fuOptions & ETO_PDY)
|
else if (fuOptions & ETO_PDY)
|
||||||
{
|
{
|
||||||
FT_Vector vec = { Dx[2 * i + 0] << 6, Dx[2 * i + 1] << 6 };
|
vec.x = (Dx[2 * i + 0] << 6);
|
||||||
FT_Vector_Transform(&vec, &Cache.Hashed.matTransform);
|
vec.y = (Dx[2 * i + 1] << 6);
|
||||||
|
if (!bNoTransform)
|
||||||
|
FT_Vector_Transform(&vec, &Cache.Hashed.matTransform);
|
||||||
X64 += vec.x;
|
X64 += vec.x;
|
||||||
Y64 -= vec.y;
|
Y64 -= vec.y;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FT_Vector vec = { Dx[i] << 6, 0 };
|
vec.x = (Dx[i] << 6);
|
||||||
FT_Vector_Transform(&vec, &Cache.Hashed.matTransform);
|
vec.y = 0;
|
||||||
|
if (!bNoTransform)
|
||||||
|
FT_Vector_Transform(&vec, &Cache.Hashed.matTransform);
|
||||||
X64 += vec.x;
|
X64 += vec.x;
|
||||||
Y64 -= vec.y;
|
Y64 -= vec.y;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue