[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] master 6b2764f: [graph] Slight optimization of cached
From: |
Werner Lemberg |
Subject: |
[freetype2-demos] master 6b2764f: [graph] Slight optimization of cached gradients. |
Date: |
Thu, 25 Aug 2022 21:34:33 -0400 (EDT) |
branch: master
commit 6b2764f183582b04f9e46d3f9c17310538235f30
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>
[graph] Slight optimization of cached gradients.
This saves about 1% of `ftgrid` execution time.
* graph/gblender.c (gblender_reset_key, gblender_reset_channel_key):
Implement faster gradients, which are rounded anyway.
---
graph/gblender.c | 62 ++++++++++++++++++++++++++------------------------------
1 file changed, 29 insertions(+), 33 deletions(-)
diff --git a/graph/gblender.c b/graph/gblender.c
index df39379..3941869 100644
--- a/graph/gblender.c
+++ b/graph/gblender.c
@@ -202,7 +202,7 @@ gblender_reset_key( GBlender blender,
const unsigned char* gamma_ramp_inv = blender->gamma_ramp_inv;
const unsigned short* gamma_ramp = blender->gamma_ramp;
- unsigned int r1,g1,b1,r2,g2,b2;
+ int r1, g1, b1, r2, g2, b2;
r1 = ( back >> 16 ) & 255;
g1 = ( back >> 8 ) & 255;
@@ -222,32 +222,35 @@ gblender_reset_key( GBlender blender,
gr += 1;
#endif
- r1 = gamma_ramp[r1];
- g1 = gamma_ramp[g1];
- b1 = gamma_ramp[b1];
+ r1 = gamma_ramp[r1] << 10;
+ g1 = gamma_ramp[g1] << 10;
+ b1 = gamma_ramp[b1] << 10;
- r2 = gamma_ramp[r2];
- g2 = gamma_ramp[g2];
- b2 = gamma_ramp[b2];
+ r2 = gamma_ramp[r2] << 10;
+ g2 = gamma_ramp[g2] << 10;
+ b2 = gamma_ramp[b2] << 10;
+
+ r2 = ( r2 - r1 ) / ( GBLENDER_SHADE_COUNT - 1 );
+ g2 = ( g2 - g1 ) / ( GBLENDER_SHADE_COUNT - 1 );
+ b2 = ( b2 - b1 ) / ( GBLENDER_SHADE_COUNT - 1 );
for ( nn = 1; nn < GBLENDER_SHADE_COUNT; nn++ )
{
- unsigned int a = 255 * nn / ( GBLENDER_SHADE_COUNT - 1 );
- unsigned int r, g, b;
+ unsigned char r, g, b;
- r = ( r2 * a + r1 * ( 255 - a ) + 127 ) / 255;
- g = ( g2 * a + g1 * ( 255 - a ) + 127 ) / 255;
- b = ( b2 * a + b1 * ( 255 - a ) + 127 ) / 255;
+ r1 += r2;
+ g1 += g2;
+ b1 += b2;
- r = gamma_ramp_inv[r];
- g = gamma_ramp_inv[g];
- b = gamma_ramp_inv[b];
+ r = gamma_ramp_inv[r1 >> 10];
+ g = gamma_ramp_inv[g1 >> 10];
+ b = gamma_ramp_inv[b1 >> 10];
#ifdef GBLENDER_STORE_BYTES
- gr[0] = (unsigned char)r;
- gr[1] = (unsigned char)g;
- gr[2] = (unsigned char)b;
+ gr[0] = r;
+ gr[1] = g;
+ gr[2] = b;
gr += 3;
#else
gr[0] = ( r << 16 ) | ( g << 8 ) | b;
@@ -315,28 +318,21 @@ gblender_reset_channel_key( GBlender blender,
const unsigned char* gamma_ramp_inv = blender->gamma_ramp_inv;
const unsigned short* gamma_ramp = blender->gamma_ramp;
- unsigned int r1,r2;
-
- r1 = back;
- r2 = fore;
+ int r1, r2;
- gr[0] = (unsigned char)r1;
+ gr[0] = (unsigned char)back;
gr++;
- r1 = gamma_ramp[r1];
- r2 = gamma_ramp[r2];
+ r1 = gamma_ramp[back] << 10;
+ r2 = gamma_ramp[fore] << 10;
+
+ r2 = ( r2 - r1 ) / ( GBLENDER_SHADE_COUNT - 1 );
for ( nn = 1; nn < GBLENDER_SHADE_COUNT; nn++ )
{
- unsigned int a = 255 * nn / ( GBLENDER_SHADE_COUNT - 1 );
- unsigned int r;
-
-
- r = ( r2 * a + r1 * ( 255 - a ) + 127 ) / 255;
-
- r = gamma_ramp_inv[r];
+ r1 += r2;
- gr[0] = (unsigned char)r;
+ gr[0] = gamma_ramp_inv[r1 >> 10];
gr++;
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master 6b2764f: [graph] Slight optimization of cached gradients.,
Werner Lemberg <=