Esempio n. 1
0
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;
}
Esempio n. 2
0
File: rle.c Progetto: paud/d2x-xl
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;
}