|
317 | 317 | return control; |
318 | 318 | } |
319 | 319 |
|
| 320 | + JSROOT.Painter.DisposeThreejsObject = function(obj) { |
| 321 | + if (!obj) return; |
| 322 | + |
| 323 | + if (obj.children) { |
| 324 | + for (var i = 0; i < obj.children.length; i++) |
| 325 | + JSROOT.Painter.DisposeThreejsObject(obj.children[i]); |
| 326 | + } |
| 327 | + if (obj.geometry) { |
| 328 | + obj.geometry.dispose(); |
| 329 | + obj.geometry = undefined; |
| 330 | + } |
| 331 | + if (obj.material) { |
| 332 | + if (obj.material.map) { |
| 333 | + obj.material.map.dispose(); |
| 334 | + obj.material.map = undefined; |
| 335 | + } |
| 336 | + obj.material.dispose(); |
| 337 | + obj.material = undefined; |
| 338 | + } |
| 339 | + obj = undefined; |
| 340 | + } |
| 341 | + |
320 | 342 | JSROOT.Painter.HPainter_Create3DScene = function(arg) { |
321 | 343 |
|
322 | 344 | if ((arg!==undefined) && (arg<0)) { |
|
325 | 347 | this.TestAxisVisibility(null, this.toplevel); |
326 | 348 |
|
327 | 349 | this.clear_3d_canvas(); |
| 350 | + |
| 351 | + JSROOT.Painter.DisposeThreejsObject(this.scene); |
| 352 | + |
328 | 353 | delete this.size3d; |
329 | 354 | delete this.scene; |
330 | 355 | delete this.toplevel; |
| 356 | + delete this.tooltip_mesh; |
331 | 357 | delete this.camera; |
332 | 358 | delete this.pointLight; |
333 | 359 | delete this.renderer; |
|
342 | 368 | if ('toplevel' in this) { |
343 | 369 | // it is indication that all 3D object created, just replace it with empty |
344 | 370 |
|
345 | | - var newtop = new THREE.Object3D(); |
346 | | - |
347 | 371 | this.scene.remove(this.toplevel); |
| 372 | + JSROOT.Painter.DisposeThreejsObject(this.toplevel); |
| 373 | + delete this.toplevel; |
| 374 | + delete this.tooltip_mesh; |
348 | 375 |
|
| 376 | + var newtop = new THREE.Object3D(); |
349 | 377 | this.scene.add(newtop); |
350 | | - |
351 | 378 | this.toplevel = newtop; |
352 | 379 |
|
353 | 380 | return; |
|
382 | 409 | this.webgl = JSROOT.Painter.TestWebGL(); |
383 | 410 |
|
384 | 411 | this.renderer = this.webgl ? new THREE.WebGLRenderer({ antialias : true, alpha: true }) : |
385 | | - new THREE.CanvasRenderer({ antialias : true, alpha: true }); |
| 412 | + new THREE.CanvasRenderer({ antialias : true, alpha: true }); |
386 | 413 | //renderer.setClearColor(0xffffff, 1); |
387 | 414 | // renderer.setClearColor(0x0, 0); |
388 | 415 | this.renderer.setSize(this.scene_width, this.scene_height); |
|
0 commit comments