more
This commit is contained in:
parent
2fe3c69963
commit
6bc125be1c
104 changed files with 3084 additions and 2410 deletions
|
|
@ -17,3 +17,32 @@ export const createBindGroupCache = <K1 extends object, K2 extends object>(
|
|||
return bindGroup;
|
||||
};
|
||||
};
|
||||
|
||||
export const createBindGroupCache3 = <
|
||||
K1 extends object,
|
||||
K2 extends object,
|
||||
K3 extends object,
|
||||
>(
|
||||
factory: (key1: K1, key2: K2, key3: K3) => GPUBindGroup
|
||||
): ((key1: K1, key2: K2, key3: K3) => GPUBindGroup) => {
|
||||
const outer = new WeakMap<K1, WeakMap<K2, WeakMap<K3, GPUBindGroup>>>();
|
||||
return (key1, key2, key3) => {
|
||||
let mid = outer.get(key1);
|
||||
if (!mid) {
|
||||
mid = new WeakMap();
|
||||
outer.set(key1, mid);
|
||||
}
|
||||
let inner = mid.get(key2);
|
||||
if (!inner) {
|
||||
inner = new WeakMap();
|
||||
mid.set(key2, inner);
|
||||
}
|
||||
const cached = inner.get(key3);
|
||||
if (cached) {
|
||||
return cached;
|
||||
}
|
||||
const bindGroup = factory(key1, key2, key3);
|
||||
inner.set(key3, bindGroup);
|
||||
return bindGroup;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue