@pmndrs/uikit
Version:
Build performant 3D user interfaces with Three.js and yoga.
63 lines (62 loc) • 2.71 kB
TypeScript
import { InstancedBufferAttribute, Object3D } from 'three';
import { MaterialClass } from './panel-material.js';
import { InstancedPanel } from './instanced-panel.js';
import { OrderInfo, WithReversePainterSortStableCache } from '../order.js';
import { Signal } from '@preact/signals-core';
import { MergedProperties } from '../properties/merged.js';
import { RootContext } from '../context.js';
export type ShadowProperties = {
receiveShadow?: boolean;
castShadow?: boolean;
};
export type RenderProperties = {
depthWrite?: boolean;
depthTest?: boolean;
renderOrder?: number;
};
export type PanelGroupProperties = {
panelMaterialClass?: MaterialClass;
} & ShadowProperties & RenderProperties;
export declare function computedPanelGroupDependencies(propertiesSignal: Signal<MergedProperties>): import("@preact/signals-core").ReadonlySignal<Required<PanelGroupProperties>>;
export declare class PanelGroupManager {
private readonly root;
private readonly objectRef;
private map;
constructor(root: WithReversePainterSortStableCache & Pick<RootContext, 'onFrameSet' | 'requestFrame' | 'requestRender' | 'pixelSize'>, objectRef: {
current?: Object3D | null;
});
init(abortSignal: AbortSignal): void;
private traverse;
getGroup(majorIndex: number, properties: Required<PanelGroupProperties>): InstancedPanelGroup;
}
export declare class InstancedPanelGroup {
private readonly object;
readonly root: WithReversePainterSortStableCache & Pick<RootContext, 'requestFrame' | 'requestRender' | 'pixelSize'>;
private readonly orderInfo;
private readonly panelGroupProperties;
private mesh?;
instanceMatrix: InstancedBufferAttribute;
instanceData: InstancedBufferAttribute;
instanceClipping: InstancedBufferAttribute;
private readonly instanceMaterial;
private buckets;
private elementCount;
private bufferElementSize;
instanceDataOnUpdate: InstancedBufferAttribute['addUpdateRange'];
private nextUpdateTime;
private nextUpdateTimeoutRef;
private activateElement;
private setElementIndex;
private bufferCopyWithin;
private clearBufferAt;
constructor(object: Object3D, root: WithReversePainterSortStableCache & Pick<RootContext, 'requestFrame' | 'requestRender' | 'pixelSize'>, orderInfo: OrderInfo, panelGroupProperties: Required<PanelGroupProperties>);
private updateCount;
private requestUpdate;
private requestUpdateNextFrame;
insert(bucketIndex: number, panel: InstancedPanel): void;
delete(bucketIndex: number, elementIndex: number | undefined, panel: InstancedPanel): void;
onFrame(): void;
private update;
private resize;
destroy(): void;
}