render-object.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { PointRenderable, MeshRenderable, RenderableState } from './renderable'
  7. import { RenderableValues } from './renderable/schema';
  8. import { idFactory } from 'mol-util/id-factory';
  9. import { Context } from './webgl/context';
  10. import { MeshValues } from './renderable/mesh';
  11. import { PointValues } from './renderable/point';
  12. const getNextId = idFactory(0, 0x7FFFFFFF)
  13. export interface BaseRenderObject { id: number, type: string, values: RenderableValues, state: RenderableState }
  14. export interface MeshRenderObject extends BaseRenderObject { type: 'mesh', values: MeshValues }
  15. export interface PointRenderObject extends BaseRenderObject { type: 'point', values: PointValues }
  16. export type RenderObject = MeshRenderObject | PointRenderObject
  17. export function createMeshRenderObject(values: MeshValues, state: RenderableState): MeshRenderObject {
  18. return { id: getNextId(), type: 'mesh', values, state }
  19. }
  20. export function createPointRenderObject(values: PointValues, state: RenderableState): PointRenderObject {
  21. return { id: getNextId(), type: 'point', values, state }
  22. }
  23. export function createRenderable(ctx: Context, o: RenderObject) {
  24. switch (o.type) {
  25. case 'mesh': return MeshRenderable(ctx, o.id, o.values, o.state)
  26. case 'point': return PointRenderable(ctx, o.id, o.values, o.state)
  27. }
  28. }