freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Git][freetype/freetype-demos][master] [graph] Slight optimization of ca


From: Alexei Podtelezhnikov (@apodtele)
Subject: [Git][freetype/freetype-demos][master] [graph] Slight optimization of cached gradients.
Date: Fri, 26 Aug 2022 01:34:26 +0000

Alexei Podtelezhnikov pushed to branch master at FreeType / FreeType Demo Programs

Commits:

  • 6b2764f1
    by Alexei Podtelezhnikov at 2022-08-25T21:28:17-04:00
    [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.
    

1 changed file:

Changes:

  • graph/gblender.c
    ... ... @@ -202,7 +202,7 @@ gblender_reset_key( GBlender blender,
    202 202
       const unsigned char*   gamma_ramp_inv = blender->gamma_ramp_inv;
    
    203 203
       const unsigned short*  gamma_ramp     = blender->gamma_ramp;
    
    204 204
     
    
    205
    -  unsigned int  r1,g1,b1,r2,g2,b2;
    
    205
    +  int  r1, g1, b1, r2, g2, b2;
    
    206 206
     
    
    207 207
       r1 = ( back >> 16 ) & 255;
    
    208 208
       g1 = ( back >> 8 )  & 255;
    
    ... ... @@ -222,32 +222,35 @@ gblender_reset_key( GBlender blender,
    222 222
       gr   += 1;
    
    223 223
     #endif
    
    224 224
     
    
    225
    -  r1 = gamma_ramp[r1];
    
    226
    -  g1 = gamma_ramp[g1];
    
    227
    -  b1 = gamma_ramp[b1];
    
    225
    +  r1 = gamma_ramp[r1] << 10;
    
    226
    +  g1 = gamma_ramp[g1] << 10;
    
    227
    +  b1 = gamma_ramp[b1] << 10;
    
    228 228
     
    
    229
    -  r2 = gamma_ramp[r2];
    
    230
    -  g2 = gamma_ramp[g2];
    
    231
    -  b2 = gamma_ramp[b2];
    
    229
    +  r2 = gamma_ramp[r2] << 10;
    
    230
    +  g2 = gamma_ramp[g2] << 10;
    
    231
    +  b2 = gamma_ramp[b2] << 10;
    
    232
    +
    
    233
    +  r2 = ( r2 - r1 ) / ( GBLENDER_SHADE_COUNT - 1 );
    
    234
    +  g2 = ( g2 - g1 ) / ( GBLENDER_SHADE_COUNT - 1 );
    
    235
    +  b2 = ( b2 - b1 ) / ( GBLENDER_SHADE_COUNT - 1 );
    
    232 236
     
    
    233 237
       for ( nn = 1; nn < GBLENDER_SHADE_COUNT; nn++ )
    
    234 238
       {
    
    235
    -    unsigned int  a = 255 * nn / ( GBLENDER_SHADE_COUNT - 1 );
    
    236
    -    unsigned int  r, g, b;
    
    239
    +    unsigned char  r, g, b;
    
    237 240
     
    
    238 241
     
    
    239
    -    r = ( r2 * a + r1 * ( 255 - a ) + 127 ) / 255;
    
    240
    -    g = ( g2 * a + g1 * ( 255 - a ) + 127 ) / 255;
    
    241
    -    b = ( b2 * a + b1 * ( 255 - a ) + 127 ) / 255;
    
    242
    +    r1 += r2;
    
    243
    +    g1 += g2;
    
    244
    +    b1 += b2;
    
    242 245
     
    
    243
    -    r = gamma_ramp_inv[r];
    
    244
    -    g = gamma_ramp_inv[g];
    
    245
    -    b = gamma_ramp_inv[b];
    
    246
    +    r = gamma_ramp_inv[r1 >> 10];
    
    247
    +    g = gamma_ramp_inv[g1 >> 10];
    
    248
    +    b = gamma_ramp_inv[b1 >> 10];
    
    246 249
     
    
    247 250
     #ifdef GBLENDER_STORE_BYTES
    
    248
    -    gr[0] = (unsigned char)r;
    
    249
    -    gr[1] = (unsigned char)g;
    
    250
    -    gr[2] = (unsigned char)b;
    
    251
    +    gr[0] = r;
    
    252
    +    gr[1] = g;
    
    253
    +    gr[2] = b;
    
    251 254
         gr   += 3;
    
    252 255
     #else
    
    253 256
         gr[0] = ( r << 16 ) | ( g << 8 ) | b;
    
    ... ... @@ -315,28 +318,21 @@ gblender_reset_channel_key( GBlender blender,
    315 318
       const unsigned char*   gamma_ramp_inv = blender->gamma_ramp_inv;
    
    316 319
       const unsigned short*  gamma_ramp     = blender->gamma_ramp;
    
    317 320
     
    
    318
    -  unsigned int  r1,r2;
    
    319
    -
    
    320
    -  r1    = back;
    
    321
    -  r2    = fore;
    
    321
    +  int  r1, r2;
    
    322 322
     
    
    323
    -  gr[0] = (unsigned char)r1;
    
    323
    +  gr[0] = (unsigned char)back;
    
    324 324
       gr++;
    
    325 325
     
    
    326
    -  r1 = gamma_ramp[r1];
    
    327
    -  r2 = gamma_ramp[r2];
    
    326
    +  r1 = gamma_ramp[back] << 10;
    
    327
    +  r2 = gamma_ramp[fore] << 10;
    
    328
    +
    
    329
    +  r2 = ( r2 - r1 ) / ( GBLENDER_SHADE_COUNT - 1 );
    
    328 330
     
    
    329 331
       for ( nn = 1; nn < GBLENDER_SHADE_COUNT; nn++ )
    
    330 332
       {
    
    331
    -    unsigned int  a = 255 * nn / ( GBLENDER_SHADE_COUNT - 1 );
    
    332
    -    unsigned int  r;
    
    333
    -
    
    334
    -
    
    335
    -    r = ( r2 * a + r1 * ( 255 - a ) + 127 ) / 255;
    
    336
    -
    
    337
    -    r  = gamma_ramp_inv[r];
    
    333
    +    r1 += r2;
    
    338 334
     
    
    339
    -    gr[0] = (unsigned char)r;
    
    335
    +    gr[0] = gamma_ramp_inv[r1 >> 10];
    
    340 336
         gr++;
    
    341 337
       }
    
    342 338
     }
    


  • reply via email to

    [Prev in Thread] Current Thread [Next in Thread]