freetype-commit
[Top][All Lists]
Advanced

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

[Git][freetype/freetype-demos][master] [graph] Clean up the cache cleara


From: Alexei Podtelezhnikov (@apodtele)
Subject: [Git][freetype/freetype-demos][master] [graph] Clean up the cache clearance.
Date: Thu, 15 Sep 2022 17:36:10 +0000

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

Commits:

  • 50de6cec
    by Alexei Podtelezhnikov at 2022-09-15T17:36:06+00:00
    [graph] Clean up the cache clearance.
    
    Use separate functions to clear the color and channel gradient
    caches and call them conditionally instead of passing the switch
    around.
    
    * graph/gblender.c (gblender_clear): Separate out...
    (gblender_clear_channels): ... this function.
    (gblender_use_channels): Removed.
    * graph/gblender.h: Update their declarations.
    * graph/gblgblit.c (gblender_blit_init, grSetTargetPenBrush): 
    Updated to call the above functions and formatted.
    

3 changed files:

Changes:

  • graph/gblblit.c
    ... ... @@ -244,55 +244,69 @@ gblender_blit_init( GBlenderBlit blit,
    244 244
                         grSurface*             surface,
    
    245 245
                         grBitmap*              glyph )
    
    246 246
     {
    
    247
    -  int               src_x = 0;
    
    248
    -  int               src_y = 0;
    
    249
    -  int               delta;
    
    250
    -
    
    251
    -  grBitmap*  target = (grBitmap*)surface;
    
    252
    -
    
    253
    -  GBlenderSourceFormat   src_format;
    
    254
    -  const unsigned char*   src_buffer = glyph->buffer;
    
    255
    -  int                    src_pitch  = glyph->pitch;
    
    256
    -  int                    src_width  = glyph->width;
    
    257
    -  int                    src_height = glyph->rows;
    
    258
    -  unsigned char*         dst_buffer = target->buffer;
    
    259
    -  const int              dst_pitch  = target->pitch;
    
    260
    -  const int              dst_width  = target->width;
    
    261
    -  const int              dst_height = target->rows;
    
    247
    +  grBitmap*  target = &surface->bitmap;
    
    248
    +  GBlender   blender = surface->gblender;
    
    249
    +
    
    250
    +  GBlenderSourceFormat  src_format;
    
    251
    +  int                   src_x = 0;
    
    252
    +  int                   src_y = 0;
    
    253
    +  int                   delta;
    
    254
    +  const unsigned char*  src_buffer = glyph->buffer;
    
    255
    +  int                   src_pitch  = glyph->pitch;
    
    256
    +  int                   src_width  = glyph->width;
    
    257
    +  int                   src_height = glyph->rows;
    
    258
    +  unsigned char*        dst_buffer = target->buffer;
    
    259
    +  const int             dst_pitch  = target->pitch;
    
    260
    +  const int             dst_width  = target->width;
    
    261
    +  const int             dst_height = target->rows;
    
    262 262
     
    
    263 263
     
    
    264 264
       switch ( glyph->mode )
    
    265 265
       {
    
    266
    -  case gr_pixel_mode_gray:  src_format = GBLENDER_SOURCE_GRAY8;
    
    267
    -    gblender_use_channels( surface->gblender, 0 );
    
    266
    +  case gr_pixel_mode_gray:
    
    267
    +    src_format = GBLENDER_SOURCE_GRAY8;
    
    268
    +    if ( blender->channels )
    
    269
    +      gblender_clear( blender );
    
    268 270
         break;
    
    269
    -  case gr_pixel_mode_lcd:   src_format = GBLENDER_SOURCE_HRGB;
    
    271
    +  case gr_pixel_mode_lcd:
    
    272
    +    src_format = GBLENDER_SOURCE_HRGB;
    
    270 273
         src_width /= 3;
    
    271
    -    gblender_use_channels( surface->gblender, 1 );
    
    274
    +    if ( !blender->channels )
    
    275
    +      gblender_clear_channels( blender );
    
    272 276
         break;
    
    273
    -  case gr_pixel_mode_lcd2:  src_format = GBLENDER_SOURCE_HBGR;
    
    277
    +  case gr_pixel_mode_lcd2:
    
    278
    +    src_format = GBLENDER_SOURCE_HBGR;
    
    274 279
         src_width /= 3;
    
    275
    -    gblender_use_channels( surface->gblender, 1 );
    
    280
    +    if ( !blender->channels )
    
    281
    +      gblender_clear_channels( blender );
    
    276 282
         break;
    
    277
    -  case gr_pixel_mode_lcdv:  src_format = GBLENDER_SOURCE_VRGB;
    
    283
    +  case gr_pixel_mode_lcdv:
    
    284
    +    src_format  = GBLENDER_SOURCE_VRGB;
    
    278 285
         src_height /= 3;
    
    279 286
         src_pitch  *= 3;
    
    280
    -    gblender_use_channels( surface->gblender, 1 );
    
    287
    +    if ( !blender->channels )
    
    288
    +      gblender_clear_channels( blender );
    
    281 289
         break;
    
    282
    -  case gr_pixel_mode_lcdv2: src_format = GBLENDER_SOURCE_VBGR;
    
    290
    +  case gr_pixel_mode_lcdv2:
    
    291
    +    src_format  = GBLENDER_SOURCE_VBGR;
    
    283 292
         src_height /= 3;
    
    284 293
         src_pitch  *= 3;
    
    285
    -    gblender_use_channels( surface->gblender, 1 );
    
    294
    +    if ( !blender->channels )
    
    295
    +      gblender_clear_channels( blender );
    
    286 296
         break;
    
    287
    -  case gr_pixel_mode_bgra:  src_format = GBLENDER_SOURCE_BGRA;
    
    297
    +  case gr_pixel_mode_bgra:
    
    298
    +    src_format = GBLENDER_SOURCE_BGRA;
    
    288 299
         break;
    
    289
    -  case gr_pixel_mode_mono:  src_format = GBLENDER_SOURCE_MONO;
    
    300
    +  case gr_pixel_mode_mono:
    
    301
    +    src_format = GBLENDER_SOURCE_MONO;
    
    290 302
         break;
    
    291 303
       default:
    
    292 304
         grError = gr_err_bad_source_depth;
    
    293 305
         return -2;
    
    294 306
       }
    
    295 307
     
    
    308
    +  blit->blender = blender;
    
    309
    +
    
    296 310
       switch ( target->mode )
    
    297 311
       {
    
    298 312
       case gr_pixel_mode_gray:
    
    ... ... @@ -315,8 +329,6 @@ gblender_blit_init( GBlenderBlit blit,
    315 329
         return -2;
    
    316 330
       }
    
    317 331
     
    
    318
    -  blit->blender   = surface->gblender;
    
    319
    -
    
    320 332
       if ( dst_x < 0 )
    
    321 333
       {
    
    322 334
         src_width += dst_x;
    
    ... ... @@ -378,6 +390,7 @@ grSetTargetPenBrush( grSurface* surface,
    378 390
                          grColor     color )
    
    379 391
     {
    
    380 392
       grBitmap*  target = &surface->bitmap;
    
    393
    +  GBlender   blender = surface->gblender;
    
    381 394
     
    
    382 395
     
    
    383 396
       surface->origin = target->buffer;
    
    ... ... @@ -415,7 +428,8 @@ grSetTargetPenBrush( grSurface* surface,
    415 428
     
    
    416 429
       surface->color = color;
    
    417 430
     
    
    418
    -  gblender_use_channels( surface->gblender, 0 );
    
    431
    +  if ( blender->channels )
    
    432
    +    gblender_clear( blender );
    
    419 433
     }
    
    420 434
     
    
    421 435
     
    
    ... ... @@ -426,7 +440,7 @@ grBlitGlyphToSurface( grSurface* surface,
    426 440
                           grPos       y,
    
    427 441
                           grColor     color )
    
    428 442
     {
    
    429
    -  GBlenderBlitRec       gblit[1];
    
    443
    +  GBlenderBlitRec  gblit[1];
    
    430 444
     
    
    431 445
     
    
    432 446
       /* check arguments */
    

  • graph/gblender.c
    ... ... @@ -116,49 +116,54 @@ gblender_set_gamma_table( double gamma_value,
    116 116
     
    
    117 117
     /* clear the cache
    
    118 118
      */
    
    119
    -static void
    
    120
    -gblender_clear( GBlender  blender )
    
    119
    +GBLENDER_APIDEF( void )
    
    120
    +gblender_clear_channels( GBlender  blender )
    
    121 121
     {
    
    122
    +  GBlenderChanKey  chan_keys = (GBlenderChanKey)blender->keys;
    
    122 123
       int  nn;
    
    123 124
     
    
    124
    -  if ( blender->channels )
    
    125
    -  {
    
    126
    -    GBlenderChanKey  chan_keys = (GBlenderChanKey) blender->keys;
    
    127 125
     
    
    128
    -    for ( nn = 0; nn < GBLENDER_KEY_COUNT * 3; nn++ )
    
    129
    -      chan_keys[nn].index = 0xFFFF;
    
    126
    +  for ( nn = 0; nn < GBLENDER_KEY_COUNT * 3; nn++ )
    
    127
    +    chan_keys[nn].index = 0xFFFF;
    
    130 128
     
    
    131
    -    blender->cache_r_back  = 0;
    
    132
    -    blender->cache_r_fore  = ~0U;
    
    133
    -    blender->cache_r_cells = NULL;
    
    129
    +  blender->cache_r_back  = 0;
    
    130
    +  blender->cache_r_fore  = ~0U;
    
    131
    +  blender->cache_r_cells = NULL;
    
    134 132
     
    
    135
    -    blender->cache_g_back  = 0;
    
    136
    -    blender->cache_g_fore  = ~0U;
    
    137
    -    blender->cache_g_cells = NULL;
    
    133
    +  blender->cache_g_back  = 0;
    
    134
    +  blender->cache_g_fore  = ~0U;
    
    135
    +  blender->cache_g_cells = NULL;
    
    138 136
     
    
    139
    -    blender->cache_b_back  = 0;
    
    140
    -    blender->cache_b_fore  = ~0U;
    
    141
    -    blender->cache_b_cells = NULL;
    
    142
    -  }
    
    143
    -  else
    
    144
    -  {
    
    145
    -    GBlenderKey  keys = blender->keys;
    
    137
    +  blender->cache_b_back  = 0;
    
    138
    +  blender->cache_b_fore  = ~0U;
    
    139
    +  blender->cache_b_cells = NULL;
    
    146 140
     
    
    147
    -    for ( nn = 0; nn < GBLENDER_KEY_COUNT; nn++ )
    
    148
    -      keys[nn].cells = NULL;
    
    141
    +  blender->channels      = 1;
    
    142
    +}
    
    149 143
     
    
    150
    -    blender->cache_back  = 0;
    
    151
    -    blender->cache_fore  = ~0U;
    
    152
    -    blender->cache_cells = NULL;
    
    153
    -  }
    
    144
    +
    
    145
    +GBLENDER_APIDEF( void )
    
    146
    +gblender_clear( GBlender  blender )
    
    147
    +{
    
    148
    +  GBlenderKey  keys = blender->keys;
    
    149
    +  int  nn;
    
    150
    +
    
    151
    +
    
    152
    +  for ( nn = 0; nn < GBLENDER_KEY_COUNT; nn++ )
    
    153
    +    keys[nn].cells = NULL;
    
    154
    +
    
    155
    +  blender->cache_back  = 0;
    
    156
    +  blender->cache_fore  = ~0U;
    
    157
    +  blender->cache_cells = NULL;
    
    158
    +
    
    159
    +  blender->channels    = 0;
    
    154 160
     }
    
    155 161
     
    
    162
    +
    
    156 163
     GBLENDER_APIDEF( void )
    
    157 164
     gblender_init( GBlender   blender,
    
    158 165
                    double     gamma_value )
    
    159 166
     {
    
    160
    -  blender->channels = 0;
    
    161
    -
    
    162 167
       gblender_set_gamma_table( gamma_value,
    
    163 168
                                 blender->gamma_ramp,
    
    164 169
                                 blender->gamma_ramp_inv );
    
    ... ... @@ -174,21 +179,6 @@ gblender_init( GBlender blender,
    174 179
     }
    
    175 180
     
    
    176 181
     
    
    177
    -GBLENDER_APIDEF( void )
    
    178
    -gblender_use_channels( GBlender  blender,
    
    179
    -                       int       channels )
    
    180
    -{
    
    181
    -  channels = (channels != 0);
    
    182
    -
    
    183
    -  if ( blender->channels != channels )
    
    184
    -  {
    
    185
    -    blender->channels = channels;
    
    186
    -    gblender_clear( blender );
    
    187
    -  }
    
    188
    -}
    
    189
    -
    
    190
    -
    
    191
    -
    
    192 182
     /* recompute the grade levels of a given key
    
    193 183
      */
    
    194 184
     static void
    

  • graph/gblender.h
    ... ... @@ -122,12 +122,11 @@
    122 122
     
    
    123 123
      /* clear blender, and reset stats */
    
    124 124
       GBLENDER_API( void )
    
    125
    -  gblender_reset( GBlender  blender );
    
    126
    -
    
    125
    +  gblender_clear( GBlender  blender );
    
    127 126
     
    
    128 127
       GBLENDER_API( void )
    
    129
    -  gblender_use_channels( GBlender  blender,
    
    130
    -                         int       channels );
    
    128
    +  gblender_clear_channels( GBlender  blender );
    
    129
    +
    
    131 130
     
    
    132 131
      /* lookup a cell range for a given (background,foreground) pair
    
    133 132
       */
    


  • reply via email to

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