Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Major Bug, Sprite Atlas created in XCAssets Folder does not support batch rendering

I started using the new Sprite Atlas in the XCAssets folder instead of having my atlases in the project folder. However I noticed that when I did this my nodes were no longer being batch rendered which resulted in a large number of inefficient draw calls. This completely defeats the purpose of using an atlas!

To be clear this is the code I used to get the atlas.

let atlas = SKTextureAtlas(named: "Sprites")

"Sprites" is a Sprite Atlas created in the XCAssets Folder.

Does anyone have a workaround or am I stuck making Sprite Kit Atlases in the project folder.

I'm using Xcode 7.2 beta.

The reason why I want to use the new Sprite Kit Atlases is because of this issue.

like image 718
Epic Byte Avatar asked Nov 28 '15 21:11

Epic Byte


2 Answers

I found one workaround as I was typing the question. You can create a SKTextureAtlas programmatically from images inside the XCAssets folder like so:

let atlas = SKTextureAtlas(dictionary: ["Head":UIImage(named: "Head")!, "Body":UIImage(named: "Body")!])

This is obviously just a workaround. Hopefully Apple fixes this in later versions of Sprite Kit. This is a pretty serious performance bug that all developers should be aware of. Even Apple's sample project uses the new Sprite Atlases so you think they would have batch rendering working.

Update 1 Response from Apple:

Thanks for letting us know about this issue. We are currently investigating the cause, and will be incorporating a fix in future iOS updates. In the mean time, there are two workarounds you can apply: 1. Create and use texture atlas in a .atlas folder. 2. Continuing using texture atlas in the asset catalog, but with deployment target set to iOS 8.0.

Update 2 Apple said may have been fixed in iOS 10. Going to investigate.

like image 114
Epic Byte Avatar answered Nov 09 '22 09:11

Epic Byte


This appears to be fixed in iOS 10. The only annoying thing is that you can't have two images that have the same name even if they are in separate atlases.

Edit: this is only fixed in iOS 10. If you're running in iOS 9, there's a massive memory leak that will crash the app.

like image 37
claassenApps Avatar answered Nov 09 '22 11:11

claassenApps