mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2026-04-26 12:41:40 +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.ResourceLoaderWorker;
|
||||||
import src.Console;
|
import src.Console;
|
||||||
import src.Debug;
|
import src.Debug;
|
||||||
|
import src.LRUCache;
|
||||||
|
|
||||||
class DifBuilderTriangle {
|
class DifBuilderTriangle {
|
||||||
public var texture:String;
|
public var texture:String;
|
||||||
|
|
@ -98,7 +99,7 @@ typedef VertexBucket = {
|
||||||
}
|
}
|
||||||
|
|
||||||
class DifBuilder {
|
class DifBuilder {
|
||||||
static var difCache:Map<String, DifCache> = [];
|
static var difCache:LRUCache<DifCache> = new LRUCache(16);
|
||||||
|
|
||||||
static var materialDict:Map<String, {
|
static var materialDict:Map<String, {
|
||||||
friction:Float,
|
friction:Float,
|
||||||
|
|
@ -213,7 +214,8 @@ class DifBuilder {
|
||||||
var worker = new ResourceLoaderWorker(() -> {
|
var worker = new ResourceLoaderWorker(() -> {
|
||||||
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
||||||
diffuseTex.wrap = Repeat;
|
diffuseTex.wrap = Repeat;
|
||||||
diffuseTex.mipMap = Nearest;
|
diffuseTex.mipMap = Linear;
|
||||||
|
diffuseTex.filter = Linear;
|
||||||
var normalTex = ResourceLoader.getTexture(normalTexture).resource;
|
var normalTex = ResourceLoader.getTexture(normalTexture).resource;
|
||||||
normalTex.wrap = Repeat;
|
normalTex.wrap = Repeat;
|
||||||
normalTex.mipMap = Nearest;
|
normalTex.mipMap = Nearest;
|
||||||
|
|
@ -230,7 +232,8 @@ class DifBuilder {
|
||||||
var worker = new ResourceLoaderWorker(() -> {
|
var worker = new ResourceLoaderWorker(() -> {
|
||||||
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
||||||
diffuseTex.wrap = Repeat;
|
diffuseTex.wrap = Repeat;
|
||||||
diffuseTex.mipMap = Nearest;
|
diffuseTex.mipMap = Linear;
|
||||||
|
diffuseTex.filter = Linear;
|
||||||
var normalTex = ResourceLoader.getTexture(normalTexture).resource;
|
var normalTex = ResourceLoader.getTexture(normalTexture).resource;
|
||||||
normalTex.wrap = Repeat;
|
normalTex.wrap = Repeat;
|
||||||
normalTex.mipMap = Nearest;
|
normalTex.mipMap = Nearest;
|
||||||
|
|
@ -262,7 +265,8 @@ class DifBuilder {
|
||||||
var worker = new ResourceLoaderWorker(() -> {
|
var worker = new ResourceLoaderWorker(() -> {
|
||||||
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
var diffuseTex = ResourceLoader.getTexture(baseTexture).resource;
|
||||||
diffuseTex.wrap = Repeat;
|
diffuseTex.wrap = Repeat;
|
||||||
diffuseTex.mipMap = Nearest;
|
diffuseTex.mipMap = Linear;
|
||||||
|
diffuseTex.filter = Linear;
|
||||||
var shader = new DefaultNormalMaterial(diffuseTex, shininess, specularColor, uvScaleFactor);
|
var shader = new DefaultNormalMaterial(diffuseTex, shininess, specularColor, uvScaleFactor);
|
||||||
onFinish(shader);
|
onFinish(shader);
|
||||||
});
|
});
|
||||||
|
|
@ -274,7 +278,8 @@ class DifBuilder {
|
||||||
var worker = new ResourceLoaderWorker(() -> {
|
var worker = new ResourceLoaderWorker(() -> {
|
||||||
var diffuseTex = ResourceLoader.getTexture('data/textures/${baseTexture}').resource;
|
var diffuseTex = ResourceLoader.getTexture('data/textures/${baseTexture}').resource;
|
||||||
diffuseTex.wrap = Repeat;
|
diffuseTex.wrap = Repeat;
|
||||||
diffuseTex.mipMap = Nearest;
|
diffuseTex.mipMap = Linear;
|
||||||
|
diffuseTex.filter = Linear;
|
||||||
var normalTex = ResourceLoader.getTexture('data/textures/tile_intermediate.normal.png').resource;
|
var normalTex = ResourceLoader.getTexture('data/textures/tile_intermediate.normal.png').resource;
|
||||||
normalTex.wrap = Repeat;
|
normalTex.wrap = Repeat;
|
||||||
normalTex.mipMap = Nearest;
|
normalTex.mipMap = Nearest;
|
||||||
|
|
@ -973,7 +978,7 @@ class DifBuilder {
|
||||||
} else {
|
} else {
|
||||||
texture = ResourceLoader.getTextureRealpath(tex(grp)).resource; // ResourceLoader.getTexture(tex(grp), false).resource;
|
texture = ResourceLoader.getTextureRealpath(tex(grp)).resource; // ResourceLoader.getTexture(tex(grp), false).resource;
|
||||||
texture.wrap = Wrap.Repeat;
|
texture.wrap = Wrap.Repeat;
|
||||||
texture.mipMap = Nearest;
|
texture.mipMap = Linear;
|
||||||
material.texture = texture;
|
material.texture = texture;
|
||||||
material.shadows = false;
|
material.shadows = false;
|
||||||
material.receiveShadows = true;
|
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