From fa44b526844fb64aecfe33fb0b7a7e636e78c5af Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Wed, 28 Nov 2018 03:12:19 +0100 Subject: [PATCH] mol-canvas3d: updated render method --- src/mol-canvas3d/canvas3d.ts | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index 4edbf744d..918837a18 100644 --- a/src/mol-canvas3d/canvas3d.ts +++ b/src/mol-canvas3d/canvas3d.ts @@ -179,7 +179,7 @@ namespace Canvas3D { } } - function render(variant: RenderVariant, force: boolean) { + function render(variant: 'pick' | 'draw', force: boolean) { if (isPicking || isUpdating) return false let didRender = false @@ -190,20 +190,22 @@ namespace Canvas3D { if (force || cameraChanged) { switch (variant) { - case 'pickObject': objectPickTarget.bind(); break; - case 'pickInstance': instancePickTarget.bind(); break; - case 'pickGroup': groupPickTarget.bind(); break; + case 'pick': + objectPickTarget.bind(); + renderer.render(scene, 'pickObject'); + instancePickTarget.bind(); + renderer.render(scene, 'pickInstance'); + groupPickTarget.bind(); + renderer.render(scene, 'pickGroup'); + break; case 'draw': webgl.unbindFramebuffer(); renderer.setViewport(0, 0, canvas.width, canvas.height); + renderer.render(scene, variant); + lastRenderTime = now() + pickDirty = true break; } - - renderer.render(scene, variant) - if (variant === 'draw') { - lastRenderTime = now() - pickDirty = true - } didRender = true } @@ -230,18 +232,18 @@ namespace Canvas3D { const t = now(); camera.transition.tick(t); draw(false) - if (t - lastRenderTime > 200) { - if (pickDirty) pick() + if (t - lastRenderTime > 1000 / 12 /** picking at 12 fps */ && pickDirty) { + // TODO would it not be better to call pick in identify? + // because currently for example highlighting something + // sets pickDirty = true that is not true + // there should definitely be a better "dirty" mechanism + pick(); } window.requestAnimationFrame(animate) } function pick() { - render('pickObject', pickDirty) - render('pickInstance', pickDirty) - render('pickGroup', pickDirty) - webgl.gl.finish() - + render('pick', pickDirty) pickDirty = false } -- GitLab