ae7ff59d09
* Implemented shuffling for point batches * Points are now drawn indexed. This is needed in order to implement shuffling for point batches, to allow for best runtime performance in scenarios where the baches are split into multiple non-flat-able draw groups * Implemented draw range flattening before sending over to be set in batches. This reduces execution time significantly especially in scenarios where a lot of objects need to change material at once. Implemented batching of draw ranges in SelectionExtension when reseting a selection. This makes un-selecting significatly faster when a lot of objects are involved * Added a note
66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
import { Box3, Material, Object3D, WebGLRenderer } from 'three'
|
|
import { FilterMaterialOptions } from '../materials/Materials'
|
|
import { NodeRenderView } from '../tree/NodeRenderView'
|
|
import { DrawGroup } from './InstancedMeshBatch'
|
|
|
|
export enum GeometryType {
|
|
MESH,
|
|
LINE,
|
|
POINT,
|
|
POINT_CLOUD,
|
|
TEXT
|
|
}
|
|
|
|
/** 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 vertCount(): number
|
|
|
|
getCount(): number
|
|
setBatchMaterial(material: Material): void
|
|
setBatchBuffers(...range: BatchUpdateRange[]): void
|
|
setVisibleRange(...range: BatchUpdateRange[])
|
|
getVisibleRange(): BatchUpdateRange
|
|
setDrawRanges(...ranges: BatchUpdateRange[])
|
|
resetDrawRanges()
|
|
buildBatch()
|
|
getRenderView(index: number): NodeRenderView
|
|
getMaterialAtIndex(index: number): Material
|
|
getMaterial(rv: NodeRenderView): Material
|
|
getOpaque(): BatchUpdateRange
|
|
getTransparent(): BatchUpdateRange
|
|
getStencil(): BatchUpdateRange
|
|
onUpdate(deltaTime: number)
|
|
onRender(renderer: WebGLRenderer)
|
|
purge()
|
|
}
|
|
|
|
export interface BatchUpdateRange {
|
|
offset: number
|
|
count: number
|
|
material?: Material
|
|
materialOptions?: FilterMaterialOptions
|
|
}
|
|
|
|
export const NoneBatchUpdateRange = {
|
|
offset: 0,
|
|
count: 0
|
|
} as BatchUpdateRange
|
|
|
|
export const AllBatchUpdateRange = {
|
|
offset: 0,
|
|
count: Infinity
|
|
} as BatchUpdateRange
|