<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hey everyone. I'm having an issue with a memory leak when dealing with DAEs. At first I thought it was the same problem that older builds of PV3D had with dictionary objects not using weak references (Seb fixed those a few months ago:<a href="http://www.sebleedelisle.com/?p=309)">http://www.sebleedelisle.com/?p=309)</a>, but after running side by side tests of adding and deleting primitives and DAEs, the memory creep was only present with DAE files.<br><br>For my current application I have the need to load and unload several DAE models and apply the same texture to all of them. In theory, something like this should work:<br>Code:<br><br>import org.papervision3d.materials.ColorMaterial;<br>import org.papervision3d.materials.utils.MaterialsList;<br>import org.papervision3d.objects.parsers.DAE;<br>import org.papervision3d.view.Viewport3D;<br>import org.papervision3d.render.BasicRenderEngine;<br>import org.papervision3d.cameras.Camera3D;<br>import org.papervision3d.scenes.Scene3D;<br>import org.papervision3d.events.FileLoadEvent;<br>import org.papervision3d.view.stats.StatsView;<br><br>public var SCENE:Scene3D = new Scene3D();<br>public var CAMERA:Camera3D = new Camera3D();<br>public var RENDERER:BasicRenderEngine = new BasicRenderEngine();<br>public var VIEWPORT:Viewport3D = new Viewport3D(640,480);<br>public var COLLADA:DAE;<br>public var MATERIALS:MaterialsList = new MaterialsList();<br>public var COLOR_MAT:ColorMaterial = new ColorMaterial();<br><br>public function init():void<br>{<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//add the viewport to the stage<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>stage.addChild(VIEWPORT);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//set up material list<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>MATERIALS.addMaterial(COLOR_MAT, 'TextureName');<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//create collada<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>loadCollada();<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//set up mouse event to unload the current dae and load another<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>stage.addEventListener(MouseEvent.CLICK, unloadCollada);<br>}<br><br>public function loadCollada():void<br>{<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA = new DAE();<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA.load('dae/yourFileName.dae', MATERIALS);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA.addEventListener(FileLoadEvent.LOAD_COMPLETE, daeLoaded);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA.scale = 3500;<br>}<br><br>public function unloadCollada(e:MouseEvent):void<br>{<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//remove the collada from the scene and set everything to null<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>SCENE.removeChild(COLLADA);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA.geometry = null;<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA.materials = null;<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA.document = null;<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA = null;<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//load the collada again<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>loadCollada();<br>}<br><br>public function daeLoaded(e:FileLoadEvent):void<br>{<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//remove event listener<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>COLLADA.removeEventListener(FileLoadEvent.LOAD_COMPLETE, daeLoaded);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//add collada to the scene<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>SCENE.addChild(COLLADA);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>//set up and start render timer<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>var TIMER:Timer = new Timer(20);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>TIMER.addEventListener(TimerEvent.TIMER, renderScene);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>TIMER.start();<br>}<span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span><br><br>public function renderScene(e:TimerEvent):void<br>{<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>RENDERER.renderScene(SCENE, CAMERA, VIEWPORT);<br>}<br><br><br>If you were to compile this, you'd see that the memory keeps building every time you click the stage. If I replaced the DAE with a Cube, there isn't any memory leak. Any ideas?<br><br>Ryan<br><br><br></body></html>