From: Joseph Coffland Date: Wed, 28 Nov 2018 12:37:56 +0000 (-0800) Subject: Only render 3D view as needed to save CPU X-Git-Url: https://git.buildbotics.com/?a=commitdiff_plain;h=ec15aa65a489de67fa8220a05d72701a37cbdb99;p=bbctrl-firmware Only render 3D view as needed to save CPU --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 78de09c..e583411 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ Buildbotics CNC Controller Firmware Changelog - Fixed problem with cached GCode file upload when file changed on disk. - Run simulation at low process priority. - Added ``Bug Report`` button to ``Admin`` -> ``General``. + - Only render 3D view as needed to save CPU. ## v0.4.1 - Fix toolpath view axes bug. diff --git a/src/js/path-viewer.js b/src/js/path-viewer.js index 38eca27..d3dac07 100644 --- a/src/js/path-viewer.js +++ b/src/js/path-viewer.js @@ -34,11 +34,6 @@ function get(obj, name, defaultValue) { } -function set_visible(target, visible) { - if (typeof target != 'undefined') target.visible = visible; -} - - var surfaceModes = ['cut', 'wire', 'solid', 'off']; @@ -51,6 +46,7 @@ module.exports = { return { enabled: false, loading: false, + dirty: true, snapView: cookie.get('snap-view', 'isometric'), small: cookie.get_bool('small-path-view', true), surfaceMode: 'cut', @@ -82,19 +78,19 @@ module.exports = { showPath: function (enable) { cookie.set_bool('show-path', enable); - set_visible(this.pathView, enable) + this.set_visible(this.pathView, enable) }, showTool: function (enable) { cookie.set_bool('show-tool', enable); - set_visible(this.toolView, enable) + this.set_visible(this.toolView, enable) }, showAxes: function (enable) { cookie.set_bool('show-axes', enable); - set_visible(this.axesView, enable) + this.set_visible(this.axesView, enable) }, @@ -106,8 +102,8 @@ module.exports = { showBBox: function (enable) { cookie.set_bool('show-bbox', enable); - set_visible(this.bboxView, enable); - set_visible(this.envelopeView, enable); + this.set_visible(this.bboxView, enable); + this.set_visible(this.envelopeView, enable); }, @@ -149,8 +145,8 @@ module.exports = { this.surfaceMaterial.needsUpdate = true; } - set_visible(this.surfaceMesh, mode == 'cut' || mode == 'wire'); - set_visible(this.workpieceMesh, mode == 'solid'); + this.set_visible(this.surfaceMesh, mode == 'cut' || mode == 'wire'); + this.set_visible(this.workpieceMesh, mode == 'solid'); }, @@ -172,6 +168,12 @@ module.exports = { }, + set_visible: function (target, visible) { + if (typeof target != 'undefined') target.visible = visible; + this.dirty = true; + }, + + get_dims: function () { var t = $(this.target); var width = t.innerWidth(); @@ -187,6 +189,7 @@ module.exports = { this.camera.aspect = dims.width / dims.height; this.camera.updateProjectionMatrix(); this.renderer.setSize(dims.width, dims.height); + this.dirty = true; }, @@ -222,6 +225,7 @@ module.exports = { axis_changed: function () { this.update_tool(); this.update_envelope(); + this.dirty = true; }, @@ -231,7 +235,6 @@ module.exports = { this.renderer = new THREE.WebGLRenderer({antialias: true, alpha: true}); this.renderer.setPixelRatio(window.devicePixelRatio); this.renderer.setClearColor(0, 0); - this.target.appendChild(this.renderer.domElement); } catch (e) { @@ -591,8 +594,11 @@ module.exports = { render: function () { window.requestAnimationFrame(this.render); if (typeof this.scene == 'undefined') return; - this.controls.update(); - this.renderer.render(this.scene, this.camera); + + if (this.controls.update() || this.dirty) { + this.dirty = false; + this.renderer.render(this.scene, this.camera); + } },