mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
cache that expires
This commit is contained in:
parent
c58b995143
commit
cd2883885b
2 changed files with 77 additions and 6 deletions
|
|
@ -36,6 +36,7 @@ import src.MarbleGame;
|
|||
import src.ResourceLoaderWorker;
|
||||
import src.Console;
|
||||
import src.Debug;
|
||||
import src.LRUCache;
|
||||
|
||||
class DifBuilderTriangle {
|
||||
public var texture:String;
|
||||
|
|
@ -98,7 +99,7 @@ typedef VertexBucket = {
|
|||
}
|
||||
|
||||
class DifBuilder {
|
||||
static var difCache:Map<String, DifCache> = [];
|
||||
static var difCache:LRUCache<DifCache> = new LRUCache(16);
|
||||
|
||||
static var materialDict:Map<String, {
|
||||
friction:Float,
|
||||
|
|
@ -213,7 +214,8 @@ class DifBuilder {
|
|||
var worker = new ResourceLoaderWorker(() -> {
|
||||
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
||||
diffuseTex.wrap = Repeat;
|
||||
diffuseTex.mipMap = Nearest;
|
||||
diffuseTex.mipMap = Linear;
|
||||
diffuseTex.filter = Linear;
|
||||
var normalTex = ResourceLoader.getTexture(normalTexture).resource;
|
||||
normalTex.wrap = Repeat;
|
||||
normalTex.mipMap = Nearest;
|
||||
|
|
@ -230,7 +232,8 @@ class DifBuilder {
|
|||
var worker = new ResourceLoaderWorker(() -> {
|
||||
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
||||
diffuseTex.wrap = Repeat;
|
||||
diffuseTex.mipMap = Nearest;
|
||||
diffuseTex.mipMap = Linear;
|
||||
diffuseTex.filter = Linear;
|
||||
var normalTex = ResourceLoader.getTexture(normalTexture).resource;
|
||||
normalTex.wrap = Repeat;
|
||||
normalTex.mipMap = Nearest;
|
||||
|
|
@ -262,7 +265,8 @@ class DifBuilder {
|
|||
var worker = new ResourceLoaderWorker(() -> {
|
||||
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
||||
diffuseTex.wrap = Repeat;
|
||||
diffuseTex.mipMap = Nearest;
|
||||
diffuseTex.mipMap = Linear;
|
||||
diffuseTex.filter = Linear;
|
||||
var shader = new DefaultNormalMaterial(diffuseTex, shininess, specularColor, uvScaleFactor);
|
||||
onFinish(shader);
|
||||
});
|
||||
|
|
@ -274,7 +278,8 @@ class DifBuilder {
|
|||
var worker = new ResourceLoaderWorker(() -> {
|
||||
var diffuseTex = ResourceLoader.getTexture('data/textures/${baseTexture}').resource;
|
||||
diffuseTex.wrap = Repeat;
|
||||
diffuseTex.mipMap = Nearest;
|
||||
diffuseTex.mipMap = Linear;
|
||||
diffuseTex.filter = Linear;
|
||||
var normalTex = ResourceLoader.getTexture('data/textures/tile_intermediate.normal.png').resource;
|
||||
normalTex.wrap = Repeat;
|
||||
normalTex.mipMap = Nearest;
|
||||
|
|
@ -973,7 +978,7 @@ class DifBuilder {
|
|||
} else {
|
||||
texture = ResourceLoader.getTextureRealpath(tex(grp)).resource; // ResourceLoader.getTexture(tex(grp), false).resource;
|
||||
texture.wrap = Wrap.Repeat;
|
||||
texture.mipMap = Nearest;
|
||||
texture.mipMap = Linear;
|
||||
material.texture = texture;
|
||||
material.shadows = false;
|
||||
material.receiveShadows = true;
|
||||
|
|
|
|||
66
src/LRUCache.hx
Normal file
66
src/LRUCache.hx
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
package src;
|
||||
|
||||
@:publicFields
|
||||
@:generic
|
||||
class LRUCacheValue<V> {
|
||||
var value:V;
|
||||
var age:Int;
|
||||
|
||||
public function new() {}
|
||||
}
|
||||
|
||||
@:generic
|
||||
class LRUCache<V> {
|
||||
var cacheMap:Map<String, LRUCacheValue<V>>;
|
||||
var size = 10;
|
||||
var curSize = 0;
|
||||
|
||||
public function new(size:Int) {
|
||||
cacheMap = new Map<String, LRUCacheValue<V>>();
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
function tick() {
|
||||
for (k => v in cacheMap) {
|
||||
v.age >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
public function get(k:String) {
|
||||
var cv = cacheMap.get(k);
|
||||
return (cv != null) ? cv.value : null;
|
||||
}
|
||||
|
||||
public function exists(k:String) {
|
||||
return cacheMap.exists(k);
|
||||
}
|
||||
|
||||
public function set(k:String, v:V) {
|
||||
var cv = cacheMap.get(k);
|
||||
if (cv != null) {
|
||||
cv.value = v;
|
||||
cv.age = 0xFFFF;
|
||||
} else {
|
||||
cv = new LRUCacheValue<V>();
|
||||
cv.value = v;
|
||||
cv.age = 0xFFFF;
|
||||
cacheMap[k] = cv;
|
||||
curSize += 1;
|
||||
}
|
||||
tick();
|
||||
if (curSize > size) {
|
||||
var minAge = 0xFFFF;
|
||||
var minAgeKey = null;
|
||||
for (k => v in cacheMap) {
|
||||
if (v.age < minAge) {
|
||||
minAge = v.age;
|
||||
minAgeKey = k;
|
||||
}
|
||||
}
|
||||
if (minAgeKey != null) {
|
||||
cacheMap.remove(minAgeKey);
|
||||
curSize -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue