Skip to content
Snippets Groups Projects
Commit fa44b526 authored by David Sehnal's avatar David Sehnal
Browse files

mol-canvas3d: updated render method

parent adb704c0
No related branches found
No related tags found
No related merge requests found
...@@ -179,7 +179,7 @@ namespace Canvas3D { ...@@ -179,7 +179,7 @@ namespace Canvas3D {
} }
} }
function render(variant: RenderVariant, force: boolean) { function render(variant: 'pick' | 'draw', force: boolean) {
if (isPicking || isUpdating) return false if (isPicking || isUpdating) return false
let didRender = false let didRender = false
...@@ -190,20 +190,22 @@ namespace Canvas3D { ...@@ -190,20 +190,22 @@ namespace Canvas3D {
if (force || cameraChanged) { if (force || cameraChanged) {
switch (variant) { switch (variant) {
case 'pickObject': objectPickTarget.bind(); break; case 'pick':
case 'pickInstance': instancePickTarget.bind(); break; objectPickTarget.bind();
case 'pickGroup': groupPickTarget.bind(); break; renderer.render(scene, 'pickObject');
instancePickTarget.bind();
renderer.render(scene, 'pickInstance');
groupPickTarget.bind();
renderer.render(scene, 'pickGroup');
break;
case 'draw': case 'draw':
webgl.unbindFramebuffer(); webgl.unbindFramebuffer();
renderer.setViewport(0, 0, canvas.width, canvas.height); renderer.setViewport(0, 0, canvas.width, canvas.height);
renderer.render(scene, variant);
lastRenderTime = now()
pickDirty = true
break; break;
} }
renderer.render(scene, variant)
if (variant === 'draw') {
lastRenderTime = now()
pickDirty = true
}
didRender = true didRender = true
} }
...@@ -230,18 +232,18 @@ namespace Canvas3D { ...@@ -230,18 +232,18 @@ namespace Canvas3D {
const t = now(); const t = now();
camera.transition.tick(t); camera.transition.tick(t);
draw(false) draw(false)
if (t - lastRenderTime > 200) { if (t - lastRenderTime > 1000 / 12 /** picking at 12 fps */ && pickDirty) {
if (pickDirty) pick() // 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) window.requestAnimationFrame(animate)
} }
function pick() { function pick() {
render('pickObject', pickDirty) render('pick', pickDirty)
render('pickInstance', pickDirty)
render('pickGroup', pickDirty)
webgl.gl.finish()
pickDirty = false pickDirty = false
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment