mesh.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 { ValueCell } from 'mol-util/value-cell'
  7. import { ColorData } from 'mol-geo/util/color-data';
  8. import { Renderable } from '../renderable'
  9. import { getBaseDefs, getBaseValues, getBaseDefines } from './util'
  10. import { MeshShaderCode, addShaderDefines } from '../shader-code'
  11. import { Context } from '../webgl/context';
  12. import { createRenderItem, RenderItemProps, RenderItemState } from '../webgl/render-item';
  13. type Mesh = 'mesh'
  14. namespace Mesh {
  15. export type Props = {
  16. objectId: number
  17. position: ValueCell<Float32Array>
  18. normal?: ValueCell<Float32Array>
  19. id: ValueCell<Float32Array>
  20. color: ColorData
  21. transform: ValueCell<Float32Array>
  22. index: ValueCell<Uint32Array>
  23. indexCount: number
  24. instanceCount: number
  25. elementCount: number
  26. positionCount: number
  27. }
  28. export function create(ctx: Context, props: Props): Renderable<Props> {
  29. const defs: RenderItemProps = {
  30. ...getBaseDefs(props),
  31. shaderCode: addShaderDefines(getBaseDefines(props), MeshShaderCode),
  32. drawMode: 'triangles',
  33. elementsKind: 'uint32'
  34. }
  35. const values: RenderItemState = {
  36. ...getBaseValues(props),
  37. drawCount: props.indexCount * 3,
  38. instanceCount: props.instanceCount,
  39. elements: props.index.ref.value
  40. }
  41. let renderItem = createRenderItem(ctx, defs, values)
  42. // let curProps = props
  43. return {
  44. draw: () => {
  45. renderItem.draw()
  46. },
  47. name: 'mesh',
  48. get program () { return renderItem.program },
  49. update: (newProps: Props) => {
  50. console.log('Updating mesh renderable')
  51. },
  52. dispose: () => {
  53. renderItem.destroy()
  54. }
  55. }
  56. }
  57. }
  58. export default Mesh