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:
German Khokhlov committed 2026-10-16 14:34:17 +04:00
1 parent d50eaa28af
commit 26968f4903
2 files changed
+27 -9

No files matched your search

+5 -5
View File
@@ -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);
} }
+22 -4
View File
@@ -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();
}); });