Hi, there.
I am unable to reach SFML site for some reason I don't know so I'll ask it here, I know there are some SFML pros here too!
I am facing a memory issue here. My project is not that complex logic-wise, but it uses full HD image files (1920x1080 px) that are resized to the player's desktop resolution during runtime. It's taking around 450MB of RAM which I think is unacceptable (or I am wrong here?).
Recompiling and running the game with all my Resource Manager class constructor code commented drops the consumption to around 80 MB (because there are still some other classes that "ask" for resources from the resource manager without it being on his constructor). This value does not increase over time.
One thing I think it could help is that I use separated PNG files for each frame of every animation in the game. Is this an issue? If I change it for a single sprite sheet with all frames, will it save me considerable memory even with the size of the file obviously increased? I am asking this because I have a lot of animations so it's the strongest cause in my opinion and I would like some opinions before I start the tedious work (joining the frames of every animation).
Memory consumption (SFML)
CJ
====================================
Chesster - the ultimate match-3/puzzle game!
Meme Match
Veggie Snake
Skirmish
====================================
Chesster - the ultimate match-3/puzzle game!
Meme Match
Veggie Snake
Skirmish
Ehh? I don't think that your problem is SFML, but it seems that you are using lot of images which naturally consumes lot of memory. A single full hd image(RGBA) is only ~8MB, therefore what are you doing ? You have sprite sheets, a lot of them ? It is a 2d game ? Have you considered, that a packed image file, which has just a few kbytes on the hdd, still could need several MB when unpacked in memory ?
So, tell us first, what images, and how many images do you use ? Is 450 mb the expected memory consumption or do you expect less ? Do you need help to compress your image data or find a bug , maybe a memory leak ?
So, tell us first, what images, and how many images do you use ? Is 450 mb the expected memory consumption or do you expect less ? Do you need help to compress your image data or find a bug , maybe a memory leak ?
It's a 2D game. The full HD images are the backgrounds only and there are 4 of them (around 3MB each on disk), the frames of animations are of smaller dimensions but there are several of them (100+). Sorry, maybe all the info was unnecessary I actually only wanted to know if joining the frames into one single PNG will reduce the memory consumption.
CJ
====================================
Chesster - the ultimate match-3/puzzle game!
Meme Match
Veggie Snake
Skirmish
====================================
Chesster - the ultimate match-3/puzzle game!
Meme Match
Veggie Snake
Skirmish
Size on disk doesn't map out well to size in ram. The images may be compressed, or not in the same color space. Also, if you end up using compression on the images at runtime (like say DXT) they will take up another amount altogether.
Taking compression out of the picture, putting all your PNGs into a bigger one will take about the same amount of memory as having them all separate. This technique is not done to save memory, it's done to save on texture and material changes at runtime.
At 32bpp, every pixel will take up 4 bytes of ram. Doesn't matter how many images they are spread across. 4 32x32 images and 1 64x64 image still equal 4096 pixels and 16384 bytes. You can use runtime texture compression formats to reduce your memory consumption however.
http://en.wikipedia.org/wiki/S3_Texture_Compression
Taking compression out of the picture, putting all your PNGs into a bigger one will take about the same amount of memory as having them all separate. This technique is not done to save memory, it's done to save on texture and material changes at runtime.
At 32bpp, every pixel will take up 4 bytes of ram. Doesn't matter how many images they are spread across. 4 32x32 images and 1 64x64 image still equal 4096 pixels and 16384 bytes. You can use runtime texture compression formats to reduce your memory consumption however.
http://en.wikipedia.org/wiki/S3_Texture_Compression
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement