Skip to content
Snippets Groups Projects
Select Git revision
  • 39adb9f2800a45f098cdec1feca0fcab1fb4ea30
  • master default protected
  • devel
  • hruska-feature-clients-api
  • malostik-#5066-deduplicate-idea-ids
  • warden-postgresql-port
  • hruska-feature-#6799-filter-keys
  • hruska-feature-5066-duplicateIdeaID
  • warden-client-3.0-beta3
  • warden-server-3.0-beta3
  • warden-client-2.2-final
  • warden-server-2.2-final
  • warden-client-3.0-beta2
  • warden-server-3.0-beta2
  • warden-client-2.2
  • warden-server-2.2-patch3
  • warden-client-3.0-beta1
  • warden-server-3.0-beta1
  • warden-server-2.2-patch1
  • warden-client-3.0-beta0
  • warden-server-3.0-beta0
  • warden-server-2.2
  • warden-server-2.1-patch1
  • warden-client-2.1
  • warden-server-2.1
  • warden-server-2.1-beta6
  • warden-server-2.1-beta5
  • warden-server-2.1-beta4
28 results

INSTALL

Blame
  • mesh.ts 3.32 KiB
    /**
     * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
     *
     * @author Alexander Rose <alexander.rose@weirdbyte.de>
     */
    
    import { ValueCell } from 'mol-util/value-cell'
    import { ColorData } from 'mol-geo/util/color-data';
    
    import { Renderable, BaseProps } from '../renderable'
    import { getBaseDefs, getBaseValues, getBaseDefines, updateBaseValues } from './util'
    import { MeshShaderCode, addShaderDefines } from '../shader-code'
    import { Context } from '../webgl/context';
    import { createRenderItem, RenderItemProps, RenderItemState } from '../webgl/render-item';
    import { deepEqual } from 'mol-util';
    
    type Mesh = 'mesh'
    
    namespace Mesh {
        export type Props = {
            position: ValueCell<Float32Array>
            normal: ValueCell<Float32Array | undefined>
            id: ValueCell<Float32Array>
    
            color: ColorData
            transform: ValueCell<Float32Array>
            index: ValueCell<Uint32Array>
    
            indexCount: number
            instanceCount: number
            elementCount: number
            positionCount: number
        } & BaseProps
    
        function getDefs(props: Props) {
            const defines = getBaseDefines(props)
            if (props.flatShaded) defines.FLAT_SHADED = ''
            if (props.doubleSided) defines.DOUBLE_SIDED = ''
            if (props.flipSided) defines.FLIP_SIDED = ''
    
            const defs: RenderItemProps = {
                ...getBaseDefs(props),
                shaderCode: addShaderDefines(defines, MeshShaderCode),
                drawMode: 'triangles',
                elementsKind: 'uint32'
            }
            return defs
        }
    
        function getVals(props: Props) {
            const vals: RenderItemState = {
                ...getBaseValues(props),
                drawCount: ValueCell.create(props.indexCount * 3),
                instanceCount: ValueCell.create(props.instanceCount),
                elements: props.index.ref.value
            }
            return vals
        }
    
        function updateVals(vals: RenderItemState, props: Props) {
            updateBaseValues(vals, props)
            if (props.instanceCount !== vals.instanceCount.ref.value) {
                ValueCell.update(vals.instanceCount, props.instanceCount)
            }
            const drawCount = props.indexCount * 3
            if (drawCount !== vals.drawCount.ref.value) {
                ValueCell.update(vals.drawCount, drawCount)
            }
        }