grs_bitmap * rle_expand_texture(grs_bitmap * bmp) { int i; int lowest_count, lc; int least_recently_used; grs_bitmap *expanded_bitmap; if (!rle_cache_initialized) rle_cache_init(); //Assert( !(bmp->bm_flags & BM_FLAG_PAGED_OUT) ); lc = rle_counter; rle_counter++; if (rle_counter < lc) { for (i = 0; i<MAX_CACHE_BITMAPS; i++) { rle_cache[i].rle_bitmap = NULL; rle_cache[i].last_used = 0; } } // if (((rle_counter % 100)==1) && (rle_hits+rle_misses > 0)) // mprintf(( 0, "RLE-CACHE %d%%, H:%d, M:%d\n", (rle_misses*100)/(rle_hits+rle_misses), rle_hits, rle_misses )); lowest_count = rle_cache[rle_next].last_used; least_recently_used = rle_next; rle_next++; if (rle_next >= MAX_CACHE_BITMAPS) rle_next = 0; for (i = 0; i<MAX_CACHE_BITMAPS; i++) { if (rle_cache[i].rle_bitmap == bmp) { rle_hits++; rle_cache[i].last_used = rle_counter; return rle_cache[i].expanded_bitmap; } if (rle_cache[i].last_used < lowest_count) { lowest_count = rle_cache[i].last_used; least_recently_used = i; } } rle_misses++; rle_expand_texture_sub(bmp, rle_cache[least_recently_used].expanded_bitmap); rle_cache[least_recently_used].rle_bitmap = bmp; rle_cache[least_recently_used].last_used = rle_counter; return rle_cache[least_recently_used].expanded_bitmap; }
grsBitmap *rle_expand_texture (grsBitmap * bmP) { int i; int lowestCount, lc; int least_recently_used; if (!rle_cache_initialized) RLECacheInit (); Assert (!(bmP->bm_props.flags & BM_FLAG_PAGED_OUT)); lc = rleCounter; rleCounter++; if (rleCounter < lc) { for (i=0; i<MAX_CACHE_BITMAPS; i++) { rle_cache[i].rle_bitmap = NULL; rle_cache[i].last_used = 0; } } lowestCount = rle_cache[rle_next].last_used; least_recently_used = rle_next; rle_next++; if (rle_next >= MAX_CACHE_BITMAPS) rle_next = 0; for (i = 0; i < MAX_CACHE_BITMAPS; i++) { if (rle_cache [i].rle_bitmap == bmP) { rle_hits++; rle_cache[i].last_used = rleCounter; return rle_cache [i].expanded_bitmap; } if (rle_cache [i].last_used < lowestCount) { lowestCount = rle_cache[i].last_used; least_recently_used = i; } } Assert (bmP->bm_props.w<=64 && bmP->bm_props.h<=64); //dest buffer is 64x64 rle_misses++; rle_expand_texture_sub (bmP, rle_cache[least_recently_used].expanded_bitmap); rle_cache[least_recently_used].rle_bitmap = bmP; rle_cache[least_recently_used].last_used = rleCounter; return rle_cache[least_recently_used].expanded_bitmap; }