« Return to Thread: Object deletion and Memory Issue
kay w. wrote:hey seb,
thanks for your quick response.
i looked for dictionary in MaterialManager and MaterialObject3D and finally i added a new function in MaterialObject3D:
public function dispose( do3d:DisplayObject3D ):void{
//unregister do3d from objects dictionary
unregisterObject( do3d );
//unregister from materialmanager
destroy();
//reset some attributes
//maybe not necessary
renderLayer = null;
interactive = false;
}
i have build a little test.
if you click on the first button ten spheres with listeners will create and store in an array.
-----------------------
private function removeCreateClick(event : MouseEvent) : void {
//array not empty, clear it
clickRemove();
//create spheres
for( var i : int = 0; i < 10; i ++){
var mat : ColorMaterial = new ColorMaterial( 0xff0000, .3 );
mat.interactive = true;
mat.addEventListener( MouseEvent.CLICK, mousehandleClick );
mat.addEventListener( MouseEvent.MOUSE_OUT, mousehandleOut);
mat.addEventListener( MouseEvent.MOUSE_OVER, mousehandleOver );
var obj : Sphere = new Sphere( mat, 100, 16, 12 );
obj.x = RandomNumber.generate(-1000, 1000);
obj.y = RandomNumber.generate(-1000, 1000);
obj.z = RandomNumber.generate(-1000, 1000);
obj.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleClick );
obj.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleOut);
obj.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleOver );
objectWrapper.addChild(obj);
aObjects.push(obj);
}
}
-----------------------
if the array not empty, the exist objects will delete befor:
----------------------
private function clickRemove( event : MouseEvent = null ) : void {
for( var j : int = 0; j < aObjects.length; j++){
objectWrapper.removeChild( aObjects[j] as Sphere );
( aObjects[j] as Sphere ).removeEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleClick );
( aObjects[j] as Sphere ).removeEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleOut);
( aObjects[j] as Sphere ).removeEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleOver );
( aObjects[j] as Sphere ).material.removeEventListener( MouseEvent.CLICK, mousehandleClick );
( aObjects[j] as Sphere ).material.removeEventListener( MouseEvent.MOUSE_OUT, mousehandleOut);
( aObjects[j] as Sphere ).material.removeEventListener( MouseEvent.MOUSE_OVER, mousehandleOver );
// this is my magical line ;)
( ( aObjects[j] as Sphere ).material as MaterialObject3D ).dispose( aObjects[j] as DisplayObject3D );
aObjects[j] = null;
}
aObjects = new Array();
}
---------------------
before: http://beta.mit.de/kwiegand/performancetest/memtest_Bad.html
after: http://beta.mit.de/kwiegand/performancetest/memtest_allGood.html
it seems working good.
BUT.... ONE PROBLEM :(
with bitmapassetmaterial und bitmapmaterial i have some issue.
first dispose is ok, but the second use of the matial doesn't work. i get this error:
ArgumentError: Error #2015: Ungültiges BitmapData.
at flash.display::BitmapData/get width()
at org.papervision3d.materials::BitmapMaterial/transformUV()
at org.papervision3d.materials::BitmapMaterial/drawTriangle()
at org.papervision3d.core.render.command::RenderTriangle/render()
at org.papervision3d.render::BasicRenderEngine/org.papervision3d.render:BasicRenderEngine::doRender()
at org.papervision3d.render::BasicRenderEngine/renderScene()
at MemoryTest/renderLoop()
any idea?
regards
kay
« Return to Thread: Object deletion and Memory Issue
| Free embeddable forum powered by Nabble | Forum Help |