1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /**
- * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- import { RenderableState, Renderable } from './renderable';
- import { idFactory } from '../mol-util/id-factory';
- import { WebGLContext } from './webgl/context';
- import { DirectVolumeValues, DirectVolumeRenderable } from './renderable/direct-volume';
- import { MeshValues, MeshRenderable } from './renderable/mesh';
- import { PointsValues, PointsRenderable } from './renderable/points';
- import { LinesValues, LinesRenderable } from './renderable/lines';
- import { SpheresValues, SpheresRenderable } from './renderable/spheres';
- import { TextValues, TextRenderable } from './renderable/text';
- import { TextureMeshValues, TextureMeshRenderable } from './renderable/texture-mesh';
- import { ImageValues, ImageRenderable } from './renderable/image';
- import { CylindersRenderable, CylindersValues } from './renderable/cylinders';
- import { GraphicsRenderVariant } from './webgl/render-item';
- const getNextId = idFactory(0, 0x7FFFFFFF);
- export const getNextMaterialId = idFactory(0, 0x7FFFFFFF);
- export interface GraphicsRenderObject<T extends RenderObjectType = RenderObjectType> {
- readonly id: number,
- readonly type: T,
- readonly values: RenderObjectValues<T>,
- readonly state: RenderableState,
- readonly materialId: number
- }
- export type RenderObjectType = 'mesh' | 'points' | 'spheres' | 'cylinders' | 'text' | 'lines' | 'direct-volume' | 'image' | 'texture-mesh'
- export type RenderObjectValues<T extends RenderObjectType> =
- T extends 'mesh' ? MeshValues :
- T extends 'points' ? PointsValues :
- T extends 'spheres' ? SpheresValues :
- T extends 'cylinders' ? CylindersValues :
- T extends 'text' ? TextValues :
- T extends 'lines' ? LinesValues :
- T extends 'direct-volume' ? DirectVolumeValues :
- T extends 'image' ? ImageValues :
- T extends 'texture-mesh' ? TextureMeshValues : never
- //
- export function createRenderObject<T extends RenderObjectType>(type: T, values: RenderObjectValues<T>, state: RenderableState, materialId: number): GraphicsRenderObject<T> {
- return { id: getNextId(), type, values, state, materialId } as GraphicsRenderObject<T>;
- }
- export function createRenderable<T extends RenderObjectType>(ctx: WebGLContext, o: GraphicsRenderObject<T>, variants: GraphicsRenderVariant[]): Renderable<any> {
- switch (o.type) {
- case 'mesh': return MeshRenderable(ctx, o.id, o.values as MeshValues, o.state, o.materialId, variants);
- case 'points': return PointsRenderable(ctx, o.id, o.values as PointsValues, o.state, o.materialId, variants);
- case 'spheres': return SpheresRenderable(ctx, o.id, o.values as SpheresValues, o.state, o.materialId, variants);
- case 'cylinders': return CylindersRenderable(ctx, o.id, o.values as CylindersValues, o.state, o.materialId, variants);
- case 'text': return TextRenderable(ctx, o.id, o.values as TextValues, o.state, o.materialId, variants);
- case 'lines': return LinesRenderable(ctx, o.id, o.values as LinesValues, o.state, o.materialId, variants);
- case 'direct-volume': return DirectVolumeRenderable(ctx, o.id, o.values as DirectVolumeValues, o.state, o.materialId, variants);
- case 'image': return ImageRenderable(ctx, o.id, o.values as ImageValues, o.state, o.materialId, variants);
- case 'texture-mesh': return TextureMeshRenderable(ctx, o.id, o.values as TextureMeshValues, o.state, o.materialId, variants);
- }
- throw new Error('unsupported type');
- }
|