30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { PerspectiveCamera } from 'three';
|
|
import { createRenderInvalidation } from '../src/scene/renderInvalidation.ts';
|
|
|
|
test('unchanged frames skip rendering but each live update requests a fresh frame', () => {
|
|
const render = createRenderInvalidation();
|
|
const camera = new PerspectiveCamera();
|
|
assert.equal(render.shouldRender(camera), true);
|
|
assert.equal(render.shouldRender(camera), false);
|
|
for (let tick = 0; tick < 3; tick++) {
|
|
render.invalidate();
|
|
assert.equal(render.shouldRender(camera), true);
|
|
assert.equal(render.shouldRender(camera), false);
|
|
}
|
|
});
|
|
|
|
test('movement, rotation, camera switches and ocean animation remain visible', () => {
|
|
const render = createRenderInvalidation();
|
|
const camera = new PerspectiveCamera();
|
|
render.shouldRender(camera);
|
|
camera.position.x = 1;
|
|
assert.equal(render.shouldRender(camera), true);
|
|
camera.rotation.y = 0.2;
|
|
assert.equal(render.shouldRender(camera), true);
|
|
assert.equal(render.shouldRender(camera.clone()), true);
|
|
assert.equal(render.shouldRender(camera, true), true);
|
|
assert.equal(render.shouldRender(camera, true), true);
|
|
});
|