This commit is contained in:
Andras Schmelczer 2026-05-13 21:07:10 +01:00
commit 39b0160064
136 changed files with 7129 additions and 1950 deletions

View file

@ -0,0 +1,36 @@
export interface CachedFloat32BufferWrite {
hasValue: boolean;
previous: Float32Array;
}
export const createCachedFloat32BufferWrite = (
length: number
): CachedFloat32BufferWrite => ({
hasValue: false,
previous: new Float32Array(length),
});
export const writeFloat32BufferIfChanged = (
device: GPUDevice,
buffer: GPUBuffer,
values: Float32Array,
cache: CachedFloat32BufferWrite
): boolean => {
if (values.length !== cache.previous.length) {
throw new Error('Cached buffer write length mismatch');
}
let hasChanged = !cache.hasValue;
for (let i = 0; i < values.length && !hasChanged; i++) {
hasChanged = !Object.is(values[i], cache.previous[i]);
}
if (!hasChanged) {
return false;
}
cache.previous.set(values);
cache.hasValue = true;
device.queue.writeBuffer(buffer, 0, values);
return true;
};