Hi to all.
After a long break I'm writing a little library for my projects: its goal is to manage every resource I load.
But I'm thinking on its working way. Here it's a little extract
The program itself is very stupid: in this case I want to load an Image and I use the .ResLoadImage() function I created. The reference is returned to main program and stored in the tresource_list.
My problem is: when I call tresource.ClearAll() it DOESN'T DESTROY the resource because there is myimage still live...
How do you resolve this, if possibile? Yes I know I'm lazy, and that the best solution is to keep track 'by hand' of all the resources used...
This is the second way (not very easy to manage). It's the same thing, but I return to main program a TResource reference, that I need to cast manually as I need.
This works like I want, but the price is to 'cast' to the right object the reference passed...
PS: I wrote different module for my projects (particle, sprite, animated background and so on) so there are many resources involved, and a system like this I think is useful...
After a long break I'm writing a little library for my projects: its goal is to manage every resource I load.
But I'm thinking on its working way. Here it's a little extract
Type tresource Field tipo:Int Field file:Object Field handle:Object Global tresource_list:TList=New TList Function ResLoadImage:timage(url:Object,parameter=-1) DebugLog "GCMemAlloced "+GCMemAlloced() Local temp_image:timage=LoadImage(url,parameter) If temp_image=Null DebugLog "NO image! "+String(url);Return Addresource(url,temp_image) Print "Load image" Return temp_image End Function Function AddResource(url:Object,handle:Object) If url=Null Or handle=Null Return Local tres:tresource=New tresource tres.file=url tres.handle=handle tresource_list.addlast(tres) DebugLog "ADD RESOURCE:["+GCMemAlloced()+"]" End Function Function ClearAll(fine:Int=0) GCCollect DebugLog "Clear resource"+GCMemAlloced() For Local i:tresource=EachIn tresource_list i.handle=Null Next ClearList tresource_list If fine=1 tresource_list=Null GCCollect DebugLog "FREED: ["+GCMemAlloced()+"]" End Function End Type Graphics 640,480 Global myimage:timage=tresource.ResLoadImage("gfx/back3.png") DrawImage myimage,0,0 Global myimage:timage=tresource.ResLoadImage("gfx/back3.png") DrawImage myimage,0,0 Flip WaitKey tresource.ClearAll() 'myimage=Null <--- with this I'm OK Cls DrawImage myimage,0,0 Flip WaitKey End
The program itself is very stupid: in this case I want to load an Image and I use the .ResLoadImage() function I created. The reference is returned to main program and stored in the tresource_list.
My problem is: when I call tresource.ClearAll() it DOESN'T DESTROY the resource because there is myimage still live...
How do you resolve this, if possibile? Yes I know I'm lazy, and that the best solution is to keep track 'by hand' of all the resources used...
This is the second way (not very easy to manage). It's the same thing, but I return to main program a TResource reference, that I need to cast manually as I need.
Type tresource Field tipo:Int Field file:Object Field handle:Object Global tresource_list:TList=New TList Function ResLoadImage:tresource(url:Object,parameter=-1) DebugLog "GCMemAlloced "+GCMemAlloced() Local temp_image:timage=LoadImage(url,parameter) If temp_image=Null DebugLog "NO image! "+String(url);Return Local han:tresource=Addresource(url,temp_image) Print "Load image" Return han End Function Function AddResource:tresource(url:Object,handle:Object) If url=Null Or handle=Null Return Local tres:tresource=New tresource tres.file=url tres.handle=handle tresource_list.addlast(tres) DebugLog "ADD RESOURCE:["+GCMemAlloced()+"]" Return tres End Function Function ClearAll(fine:Int=0) GCCollect DebugLog "Clear resource"+GCMemAlloced() For Local i:tresource=EachIn tresource_list i.handle=Null Next ClearList tresource_list If fine=1 tresource_list=Null GCCollect DebugLog "FREED: ["+GCMemAlloced()+"]" End Function End Type Graphics 640,480 Global myimage:tresource=tresource.ResLoadImage("gfx/back3.png") DrawImage timage(myimage.handle),0,0' I need to cast it manually... Flip WaitKey Print GCMemAlloced() tresource.ClearAll() 'myimage=Null Cls DrawImage timage(myimage.handle),0,0 Flip WaitKey End
This works like I want, but the price is to 'cast' to the right object the reference passed...
PS: I wrote different module for my projects (particle, sprite, animated background and so on) so there are many resources involved, and a system like this I think is useful...