WIP
This commit is contained in:
parent
34ac200437
commit
39b0160064
136 changed files with 7129 additions and 1950 deletions
36
src/utils/graphics/cached-buffer-write.ts
Normal file
36
src/utils/graphics/cached-buffer-write.ts
Normal 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;
|
||||
};
|
||||
Loading…
Reference in a new issue