Skip to content

galavi / BaseLayer

Class: abstract BaseLayer

Defined in: layer/base.ts:100

Constructors

new BaseLayer()

new BaseLayer(id?): BaseLayer

Defined in: layer/base.ts:102

Parameters

id?

string

Returns

BaseLayer

Properties

id

readonly id: string

Defined in: layer/base.ts:101


visible

visible: boolean = true

Defined in: layer/base.ts:106


opacity

opacity: number = 1.0

Defined in: layer/base.ts:107


colormap

colormap: string = "gray"

Defined in: layer/base.ts:108


displayColor?

optional displayColor: string

Defined in: layer/base.ts:109


blending

blending: BlendingMode = "translucent"

Defined in: layer/base.ts:110


geometryVersion

geometryVersion: number = 0

Defined in: layer/base.ts:131

Incremented when geometry changes (e.g. shape entries updated)


colormapVersion

colormapVersion: number = 0

Defined in: layer/base.ts:133

Incremented when colormap changes (triggers texture re-upload)


transformVersion

transformVersion: number = 0

Defined in: layer/base.ts:135

Incremented when model matrix changes


modelMatrix

modelMatrix: Float32Array<ArrayBuffer>

Defined in: layer/base.ts:140

Model matrix (4×4, column-major Float32Array). Default = identity.


invModelMatrix

invModelMatrix: Float32Array<ArrayBuffer>

Defined in: layer/base.ts:148

Inverse model matrix for ray transformations (volume raycasting)


shaderCode

protected shaderCode: string = ""

Defined in: layer/base.ts:205

WGSL source for this layer. Subclasses set this in their constructor (or as a class field) so the default getShader() returns { code: shaderCode, vertex: "vs_main", fragment: "fs_main" }. Layers with non-standard entry points (e.g. NetworkLayer's vs_node/fs_node, SurfaceLayer's per-shadingMode dispatch) override getShader() directly and may leave this as the default empty string.


levelRange?

readonly optional levelRange: [number, number]

Defined in: layer/base.ts:254

Pyramid level range [min, max] for tiled layers (undefined for non-tiled).


dataVersion

dataVersion: number = 0

Defined in: layer/base.ts:262

Monotonic "data identity" version. Bumped by tiled layers when the underlying source / selection / slice index changes so the view-side LayerRenderer can drop its TilePool residency. Geometry changes use geometryVersion instead.

Accessors

isReady

Get Signature

get isReady(): boolean

Defined in: layer/base.ts:265

Whether data is ready for rendering

Returns

boolean

Methods

setColormap()

setColormap(name): void

Defined in: layer/base.ts:112

Parameters

name

string

Returns

void


setDisplayColor()

setDisplayColor(color?): void

Defined in: layer/base.ts:120

Set optional single-color ramp override

Parameters

color?

string

Returns

void


setTransform()

setTransform(desc?): void

Defined in: layer/base.ts:156

Compute model matrix from a Transform. M = Affine × Translate × Rotate × Scale

Parameters

desc?

Transform

Returns

void


getGeometry()

abstract getGeometry(): Geometry

Defined in: layer/base.ts:194

Returns

Geometry


getParams()

abstract getParams(): LayerParams

Defined in: layer/base.ts:195

Returns

LayerParams


getShader()

getShader(): Shader

Defined in: layer/base.ts:208

Default shader descriptor — subclasses may override for non-standard entry points.

Returns

Shader


getStorageData()

getStorageData(): null | { data: Float32Array; label: string; }

Defined in: layer/base.ts:217

Get storage buffer data (e.g. point positions). Returns null if not applicable.

Returns

null | { data: Float32Array; label: string; }


getWorldAABB()

getWorldAABB(): undefined | { min: Vec3; max: Vec3; }

Defined in: layer/base.ts:227

Returns bounding box in world space. Layers without intrinsic geometry bounds (points / vectors / shapes / planes / segmentation / network / tracks / slice) return undefined so view scene-bounds logic skips them. Layers with real bounds (e.g. SurfaceLayer, VolumeLayer) override.

Returns

undefined | { min: Vec3; max: Vec3; }


requestRender()

protected requestRender(): void

Defined in: layer/base.ts:239

Returns

void


attach()

attach(ctx): void

Defined in: layer/base.ts:242

Attach to a render-request channel. Called by the view on layer registration.

Parameters

ctx
requestRender

() => void

Returns

void


detach()

detach(): void

Defined in: layer/base.ts:247

Detach the render-request channel. Called by the view on layer removal.

Returns

void


initAsync()

initAsync(): Promise<void>

Defined in: layer/base.ts:275

Async data initialization (e.g. fetch + parse a mesh). Called once by the view after the GPU device is ready. Default is a no-op; override in layers that need to load data before they can render. Resolves once the layer is ready; the view re-renders on resolution.

Returns

Promise<void>


getTileSpec()

getTileSpec(): null | TileSpec

Defined in: layer/base.ts:285

Tiled-image descriptor. Returns a TileSpec when this layer is a tiled image source ready for residency allocation; returns null for non-tiled layers, or for tiled layers whose source is not yet set.

GPU residency (the TilePool and its surrounding TileManager) is owned by the view-side LayerRenderer; the layer itself never touches the GPU.

Returns

null | TileSpec


planTiles()

planTiles(_target, _effectiveScale, _options?): null | TileFramePlan<TilePlacement>

Defined in: layer/base.ts:296

Per-frame tile request. Returns the desired TilePlan (one tile per grid cell), the TileLoader to resolve each tile to bytes/region, and an optional in-bounds filter. Returns null when nothing should be loaded this frame (e.g. no source). The layer is also expected to update any internal state used by params (e.g. viewport) here.

Parameters

_target

number[]

_effectiveScale

number

_options?

unknown

Returns

null | TileFramePlan<TilePlacement>


getCurrentLevel()

getCurrentLevel(): number

Defined in: layer/base.ts:305

Get current pyramid level

Returns

number


setContrast()

setContrast(_min, _max): void

Defined in: layer/base.ts:310

Set contrast range

Parameters

_min

number

_max

number

Returns

void


setSource()

setSource(_source): void

Defined in: layer/base.ts:313

Update data source

Parameters

_source

Data

Returns

void


setSelection()

setSelection(_key, _value): void

Defined in: layer/base.ts:316

Set a non-spatial selection key (e.g. channel c, timepoint t).

Parameters

_key

string

_value

number

Returns

void


setTimepoint()

setTimepoint(t): void

Defined in: layer/base.ts:319

Convenience: set timepoint via the t selection key.

Parameters

t

number

Returns

void


prepareFrame()

prepareFrame(_state, _siblings): void

Defined in: layer/base.ts:336

Per-frame hook invoked by the View after applyConfig and before render. Override to update state that depends on the current camera / sibling layers (e.g. ShapesLayer recomputing entries for the current slice plane).

Default is a no-op. To request a render after async work completes, call this.requestRender() (the inherited render channel wired by attach).

Parameters

_state

State

_siblings

Map<string, { desc: LayerConfig; layer: BaseLayer; }>

Returns

void


applyConfig()

applyConfig(desc, physical?): void

Defined in: layer/base.ts:362

Apply a LayerConfig to this layer's render/option state. Called each frame before rendering. Subclasses normally override one of the targeted hooks below (applyRenderConfig, applyTransformConfig, applyOptions, applyDataSource) instead of overriding this method.

Skips work when both desc and physical are reference-equal to the previous call — render-only triggers (e.g. tile uploads via Galavi.requestRender()) reuse the same state refs and need no re-apply.

G1 invariant: applyDataSource must call setSource(desc.data) exactly once when desc.data is present. Re-fetch is prevented downstream by sourceChanged() guards inside layers that fetch external resources (SurfaceLayer, ShapesLayer). Do NOT bypass this single dispatch path.

Parameters

desc

LayerConfig

physical?

PhysicalSpace

Returns

void


applyRenderConfig()

protected applyRenderConfig(desc): void

Defined in: layer/base.ts:373

Render-related properties: visible, opacity, blending, colormap, color, contrast.

Parameters

desc

LayerConfig

Returns

void


applyTransformConfig()

protected applyTransformConfig(desc, physical?): void

Defined in: layer/base.ts:390

Model transform: explicit affine from data.transform, else physical.spatial.size.

Parameters

desc

LayerConfig

physical?

PhysicalSpace

Returns

void


applyOptions()

protected applyOptions(desc): void

Defined in: layer/base.ts:405

Generic options dispatch. Handles selection and timepoint (forwarded via setSelection / setTimepoint, no-ops on layers that do not implement them). Subclasses extend by calling super.applyOptions(desc) and then dispatching their type-specific keys (e.g. sliceIndex for SliceLayer, points/size/color for PointsLayer).

Parameters

desc

LayerConfig

Returns

void


applyDataSource()

protected applyDataSource(desc): void

Defined in: layer/base.ts:420

Data source dispatch. G1: must call setSource(desc.data) exactly once when present. The sourceChanged() guard inside concrete setSource implementations is the only thing preventing per-frame re-fetches.

Parameters

desc

LayerConfig

Returns

void

Released under the GPL-3.0 License.