@speckle/viewer
Version:
A 3d viewer for Speckle, based on threejs.
70 lines (69 loc) • 2.62 kB
TypeScript
import { Box3, Material, Object3D, WebGLRenderer } from 'three';
import { type FilterMaterialOptions } from '../materials/Materials.js';
import { NodeRenderView } from '../tree/NodeRenderView.js';
import { MeshBatch } from './MeshBatch.js';
import { InstancedMeshBatch } from './InstancedMeshBatch.js';
import TextBatch from './TextBatch.js';
export declare enum GeometryType {
MESH = 0,
LINE = 1,
POINT = 2,
POINT_CLOUD = 3,
TEXT = 4
}
export interface DrawGroup {
start: number;
count: number;
materialIndex: number;
}
/** TO DO: Unify point and mesh batch implementations */
export interface Batch {
id: string;
subtreeId: string;
renderViews: NodeRenderView[];
batchMaterial: Material;
renderObject: Object3D;
geometryType: GeometryType;
get bounds(): Box3;
get drawCalls(): number;
get minDrawCalls(): number;
get materials(): Material[];
get groups(): DrawGroup[];
get triCount(): number;
get pointCount(): number;
get lineCount(): number;
get vertCount(): number;
getCount(): number;
setBatchMaterial(material: Material): void;
setBatchBuffers(range: BatchUpdateRange[]): void;
setVisibleRange(range: BatchUpdateRange[]): void;
getVisibleRange(): BatchUpdateRange;
setDrawRanges(ranges: BatchUpdateRange[]): void;
resetDrawRanges(): void;
buildBatch(): Promise<void>;
getRenderView(index: number): NodeRenderView | null;
getMaterialAtIndex(index: number): Material | null;
getMaterial(rv: NodeRenderView): Material | null;
getOpaque(): BatchUpdateRange;
getTransparent(): BatchUpdateRange;
getStencil(): BatchUpdateRange;
getDepth(): BatchUpdateRange;
onUpdate(deltaTime?: number): void;
onRender?(renderer: WebGLRenderer): void;
purge(): void;
}
export interface BatchUpdateRange {
offset: number;
count: number;
material?: Material;
materialOptions?: FilterMaterialOptions;
}
export declare const NoneBatchUpdateRange: BatchUpdateRange;
export declare const AllBatchUpdateRange: BatchUpdateRange;
export declare const INSTANCE_TRANSFORM_BUFFER_STRIDE = 16;
export declare const INSTANCE_GRADIENT_BUFFER_STRIDE = 1;
export declare const getNextBatchIndex: () => number;
export type AcceleratedBatchTypes = MeshBatch | InstancedMeshBatch | TextBatch;
export declare function isAcceleratedBatchType(batch: Batch): batch is AcceleratedBatchTypes;
export declare function isNoneBatchUpdateRange(range: BatchUpdateRange): boolean;
export declare function isAllBatchUpdateRange(range: BatchUpdateRange, totalCount?: number): boolean;