mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-06 11:24:00 +00:00
fix(ui): the Cesium engine's render.sharpen() mirrors the sharpen stage
VisualEffects sends its sharpen state to engine.render.setSharpen when a viewer exists too; the Cesium engine keeps it as state, and the Cesium stage itself is unchanged.
This commit is contained in:
1 parent
d50eaa28af
commit
26968f4903
2 files changed
+27
-9
No files matched your search
@@ -32,12 +32,11 @@ export class VisualEffects {
|
|||||||
createStage = (options) => new PostProcessStage(options),
|
createStage = (options) => new PostProcessStage(options),
|
||||||
}) {
|
}) {
|
||||||
this.viewer = viewer;
|
this.viewer = viewer;
|
||||||
// Cesium sharpens with its own post stage below; an engine without a
|
// Cesium sharpens with its own post stage below, and the engine's
|
||||||
// viewer (Navara) sharpens in its render pipeline.
|
// render.sharpen() mirrors that stage (the Cesium engine keeps the state
|
||||||
|
// only); an engine without a viewer (Navara) sharpens in its pipeline.
|
||||||
this.engineRender =
|
this.engineRender =
|
||||||
!viewer && typeof engine?.render?.setSharpen === 'function'
|
typeof engine?.render?.setSharpen === 'function' ? engine.render : null;
|
||||||
? engine.render
|
|
||||||
: null;
|
|
||||||
this.requestRender = requestRender;
|
this.requestRender = requestRender;
|
||||||
this.holdRender = holdRender;
|
this.holdRender = holdRender;
|
||||||
this.releaseRender = releaseRender;
|
this.releaseRender = releaseRender;
|
||||||
@@ -118,6 +117,7 @@ export class VisualEffects {
|
|||||||
});
|
});
|
||||||
this.sharpenStage.enabled = false;
|
this.sharpenStage.enabled = false;
|
||||||
this.viewer.scene.postProcessStages.add(this.sharpenStage);
|
this.viewer.scene.postProcessStages.add(this.sharpenStage);
|
||||||
|
this.engineRender?.setSharpen({ enabled: false });
|
||||||
this.applySharpenIntensity(sharpenIntensity);
|
this.applySharpenIntensity(sharpenIntensity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -223,14 +223,32 @@ test('without a viewer the engine sharpens with the same amount scale', () => {
|
|||||||
effects.destroy();
|
effects.destroy();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('with a viewer the Cesium stage sharpens and the engine is left alone', () => {
|
test('with a viewer the Cesium stage sharpens and the engine mirrors its state', () => {
|
||||||
let calls = 0;
|
let state = { enabled: false, amount: 1 };
|
||||||
const f = fixture({ render: { setSharpen: () => calls++ } });
|
const engine = {
|
||||||
|
render: {
|
||||||
|
setSharpen: (options) => {
|
||||||
|
state = { ...state, ...options };
|
||||||
|
},
|
||||||
|
sharpen: () => ({ ...state }),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const f = fixture(engine);
|
||||||
f.effects.initPostProcess(0.49);
|
f.effects.initPostProcess(0.49);
|
||||||
|
assert.deepEqual(engine.render.sharpen(), {
|
||||||
|
enabled: false,
|
||||||
|
amount: f.effects.sharpenStage.uniforms.amount,
|
||||||
|
});
|
||||||
f.effects.applySharpenIntensity(0.8);
|
f.effects.applySharpenIntensity(0.8);
|
||||||
f.effects.setSharpenEnabled(true);
|
f.effects.setSharpenEnabled(true);
|
||||||
assert.equal(calls, 0);
|
|
||||||
assert.equal(f.effects.sharpenStage.uniforms.amount, sharpenAmount(0.8));
|
assert.equal(f.effects.sharpenStage.uniforms.amount, sharpenAmount(0.8));
|
||||||
|
assert.equal(f.effects.sharpenStage.enabled, true);
|
||||||
|
assert.deepEqual(engine.render.sharpen(), {
|
||||||
|
enabled: true,
|
||||||
|
amount: sharpenAmount(0.8),
|
||||||
|
});
|
||||||
|
f.effects.setSharpenEnabled(false);
|
||||||
|
assert.equal(engine.render.sharpen().enabled, false);
|
||||||
f.effects.destroy();
|
f.effects.destroy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user