Skip to content

Commit e57373b

Browse files
authored
refactor: derive layer transparency from blend mode (#668)
Summary: This PR removed the redundant Layer.transparent flag. Transparency is now derived from blendMode !== "none. It also changes the blend mode from normal to none so a default constructed layer is explicitly opaque.
1 parent fb47437 commit e57373b

7 files changed

Lines changed: 7 additions & 16 deletions

File tree

examples/image2d_from_omezarr4d_hcs/main.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ const onImageChange = async () => {
100100
sliceCoords: { t: 0, z: initZ, c: [2] },
101101
channelProps,
102102
policy,
103-
transparent: true,
104103
blendMode: "additive",
105104
});
106105
viewport.layerManager.add(layer1);

examples/image_series_labels_overlay/main.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ function createLabelsLayer() {
7171
source: labelsSource,
7272
sliceCoords: labelsSliceCoords,
7373
policy: createExplorationPolicy(),
74-
transparent: true,
7574
opacity: 0.25,
7675
blendMode: "normal",
7776
outlineSelected: outlineMode,

src/core/layer.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ type StateChangeCallback = (
2020
) => void;
2121

2222
export interface LayerOptions {
23-
transparent?: boolean;
2423
opacity?: number;
2524
blendMode?: BlendMode;
2625
}
@@ -36,22 +35,16 @@ export abstract class Layer {
3635
private state_: LayerState = "initialized";
3736
private readonly callbacks_: StateChangeCallback[] = [];
3837

39-
public transparent: boolean;
4038
private opacity_: number;
4139
public blendMode: BlendMode;
4240

43-
constructor({
44-
transparent = false,
45-
opacity = 1.0,
46-
blendMode = "normal",
47-
}: LayerOptions = {}) {
41+
constructor({ opacity = 1.0, blendMode = "none" }: LayerOptions = {}) {
4842
if (opacity < 0 || opacity > 1) {
4943
Logger.warn(
5044
"Layer",
5145
`Layer opacity out of bounds: ${opacity} — clamping to [0.0, 1.0]`
5246
);
5347
}
54-
this.transparent = transparent;
5548
this.opacity_ = clamp(opacity, 0.0, 1.0);
5649
this.blendMode = blendMode;
5750
}

src/core/layer_manager.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ export class LayerManager {
1919
const transparent: Layer[] = [];
2020

2121
for (const layer of this.layers) {
22-
if (layer.transparent) {
23-
transparent.push(layer);
24-
} else {
22+
if (layer.blendMode === "none") {
2523
opaque.push(layer);
24+
} else {
25+
transparent.push(layer);
2626
}
2727
}
2828

src/layers/volume_layer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export class VolumeLayer extends Layer implements ChannelsEnabled {
104104
}
105105

106106
constructor({ source, sliceCoords, policy, channelProps }: VolumeLayerProps) {
107-
super({ transparent: true, blendMode: "premultiplied" });
107+
super({ blendMode: "premultiplied" });
108108
this.source_ = source;
109109
this.sliceCoords_ = sliceCoords;
110110
this.sourcePolicy_ = policy;

src/renderers/webgl_renderer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export class WebGLRenderer extends Renderer {
132132

133133
private renderLayer(layer: Layer, camera: Camera, frustum: Frustum) {
134134
if (layer.objects.length === 0) return;
135-
this.state_.setBlendingMode(layer.transparent ? layer.blendMode : "none");
135+
this.state_.setBlendingMode(layer.blendMode);
136136
const shouldUseStencil = layer.hasMultipleLODs();
137137
this.state_.setStencilTest(shouldUseStencil);
138138
if (shouldUseStencil) {

src/renderers/webgpu/webgpu_renderer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class WebGPURenderer extends Renderer {
213213
this.passEncoder_.setStencilReference(0);
214214
}
215215

216-
this.currentBlendMode_ = layer.transparent ? layer.blendMode : "none";
216+
this.currentBlendMode_ = layer.blendMode;
217217
this.currentOpacity_ = layer.opacity;
218218

219219
layer.objects.forEach((object, i) => {

0 commit comments

Comments
 (0)