Skip to content
Snippets Groups Projects
Select Git revision
  • febb2e464def692d0cd862661d0fd6a7de23b6ec
  • master default protected
  • e-infra2
  • ci-megalinter-speedup
  • egi-fixes
  • e-infra
  • envri-hub-new-aai
  • egi-b2drop-no-collapse
  • lfs
  • gpu_staging
  • resurrect-testing-ownloud
  • experiments/collab
  • update_claim_group_keys
  • envri-hub
  • enable_rtc
  • eosc-ui
  • future/jupyterhub-5.x
  • versioning
  • eosc-templating
  • staging1-raw-image
  • token-exchange
21 results

cloud-init.yaml

Blame
  • renderer.ts 2.71 KiB
    /**
     * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
     *
     * @author Alexander Rose <alexander.rose@weirdbyte.de>
     */
    
    import { Vec3, Mat4 } from 'mol-math/linear-algebra'
    import { Viewport } from 'mol-view/camera/util';
    import { Camera } from 'mol-view/camera/base';
    
    import * as glContext from './context'
    import Scene, { RenderObject } from './scene';
    
    interface Renderer {
        add: (o: RenderObject) => void
        remove: (o: RenderObject) => void
        clear: () => void
        draw: () => void
    
        setViewport: (viewport: Viewport) => void
    
        dispose: () => void
    }
    
    const extensions = [
        'OES_element_index_uint',
        'ANGLE_instanced_arrays'
    ]
    const optionalExtensions = [
        'EXT_disjoint_timer_query'
    ]
    
    namespace Renderer {
        export function create(canvas: HTMLCanvasElement, camera: Camera): Renderer {
            const regl = glContext.create({ canvas, extensions, optionalExtensions, profile: true })
            const scene = Scene.create(regl)
    
            const baseContext = regl({
                context: {
                    model: Mat4.identity(),
                    transform: Mat4.identity(),
                    view: camera.view,
                    projection: camera.projection,
                },
                uniforms: {
                    model: regl.context('model' as any),
                    transform: regl.context('transform' as any),
                    view: regl.context('view' as any),
                    projection: regl.context('projection' as any),
                    'light.position': Vec3.create(0, 0, -100),
                    'light.color': Vec3.create(1.0, 1.0, 1.0),
                    'light.ambient': Vec3.create(0.5, 0.5, 0.5),
                    'light.falloff': 0,
                    'light.radius': 500
                }
            })
    
            const draw = () => {
                regl.poll() // updates timers and viewport
                camera.update()
                baseContext(state => {
                    regl.clear({ color: [0, 0, 0, 1] })
                    // TODO painters sort, filter visible, filter picking, visibility culling?
                    scene.forEach(r => {
                        r.draw()
                    })
                })
            }
    
            // TODO animate, draw, requestDraw
            return {
                add: (o: RenderObject) => {
                    scene.add(o)
                    draw()
                },
                remove: (o: RenderObject) => {
                    scene.remove(o)
                    draw()
                },
                clear: () => {
                    scene.clear()
                    draw()
                },
                draw,
                setViewport: (viewport: Viewport) => {
                    regl({ viewport })
                },
                dispose: () => {
                    regl.destroy()
                }
            }
        }
    }
    
    export default Renderer