Skip to content
Snippets Groups Projects
Select Git revision
  • bff750bc3b709bd4d9061658f30f89a244470a70
  • 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.sh

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