How many draw calls, if targetting iPhone 3G+?

How many draw calls does one need to stay under to maintain 30fps on an iPhone 3G and later iDevices?

I’ve seen people say <=30 draw calls, but that was without reference to a particular device or framerate. On my iPod 3rd Gen with iOS 3.x I get over 30fps even with 100 draw calls, so the device type is a big factor! I searched the documentation and the forums but couldn’t find a good pre-existing answer to this.

(And no, I don’t have an iPhone 3G in hand just now, although one of my testers does.)

3G isn’t a “later device”, its just as bad and weak as the ipod touch 2nd gen (its all the same, just a slightly faster cpu which gives it some slightly better performance but nothing in comparision to the armv7 cpus and the new gpu on the 3GS+) or 1st generation devices.

There is either 3GS+ or “all”

If its all, then 20-25 drawcalls, 7000-10000 tris onscreen

Thanks. Then to support older platforms without robbing people with newer platforms, I may need a low / high graphics setting toggle to turn on/off effects. I guess that’s not so unusual in modern games.

It is unusual.

On the iOS its expected that the application does that on its own, don’t offer options to the user that don’t make any sense (there is no 100 configurations to cover, only 4 - old devices, 3GS, itouch 4th gen, iphone 4 - iPad)

Doesnt the G3 (PowerVR SGX535 GPU) have a different graphics processor than the Ipod Touch 2G (PowerVR MBX Lite 3D GPU)

http://en.wikipedia.org/wiki/List_of_iOS_devices

the iPhone 3G has the same SGX530 as the iPod touch 2nd generation

3GS+ is on SGX535 (all devices available to date that are 3GS or newer / ipad actually)

Thats what the wiki page there tells you too

No one seems to have thoroughly answered the original question. What is the optimal draw calls to stay under for 3G, vs 3GS or iPhone 4? So far we have:

3G: 25-30 draw calls, 7K-10K tris
3GS: 100 draw calls, ?? tris
4G: 100+ draw calls, ?? tris
iPad: 100+?, ?? tris?

I dont think drawcall + tris is the only part of the equation, there is way more parameters other than that who can break you down, like time spent on physics, skinned mesh on screen , animation , the overall perf of your script etc…then if you use quite a bit of transparency on screen also that will give you also trouble, audio…etc …

So you may use these number as general idea but everybody game context is different, if I was you, I will test out by myself doing some stress test based on your app and see what it give , then from that get the info you need to optimize where you need.

I think Dreamora is correct with this. You can poll the device to find out what it is, and if you are going to go thru the effort to have options for each device, you can let the device set these options internally. If you’re feeling guilty that someone with an older phone gets lower resolution, then you can mention it in the docs! (~.^)

You can also consider going dynamic in some cases… What did the crescent moon folks do with Ravensword? Poll the device for fps, and then decrease the clipping plane and increase the fog to cover this up? I can’t remember the details (put the giant M on the search light and call for Mighty Russ…)

I agree with giyomu

Drawcalls and tris is one part, but just as impacting is the calculations you have otherwise ongoing, physics and collisions, blending etc.
You will have to balance out the whole packet, cause I can easily write you an ipad app with less than 500 polygons and not remotely enough drawcalls that runs at less than 5FPS (and that without putting an infinite loop in :P)

Heh! That’s what I call the “resource budget”. You just have to spend it wisely! But I can understand Ostagar’s interest. If you are looking at some benchmark numbers, they seem to be in this thread. Beyond that, you need to spend wisely and know what is the primary area to spend your resource budget on. Each game is different.

As I stated previously, I don’t have a 3G or iPod 2nd Generation on hand, although some of my beta testers do. At the moment I’m interested in a practical ceiling for draw calls for the 3G so we can target for that, not in how many other ways folks can slow down their applications (eg, collision processing).

Aye. Once you have a target defined, you can begin to aim for it. :slight_smile:

For 3G support, if dreamora’s right and its limit’s similar to early phones, the target is <=30 draw calls for 30fps

Has anyone gone beyond 30 draw-calls on the 3G while maintaining 30fps? If so, how far did you go?

What I may do is spin 3G beta testers an image with separate (30draw-max), (30draw-avg), and (45draw-avg) modes and vote on which they prefer. I would hate to restrict visual quality unnecessarily.

Mini Gore has a toggle option for 3G effects, you can do the same. It’s mostly shaders and particle effects that are different on 3G and non-3G. You don’t want to do something like swap the models anyway.

[deleted]

As for the 3G device or any of the first 2 generations aside of 2nd gen itouch (which only is slightly better cause its cpu is 25% faster than the other 3): Aim at 20-25 drawcalls normally. Its true that the new drivers of iOS4 help on that end a bit, but its just as true that apple invested far less time in opting it for the old generations which is responsible for the performance breakin on 4.0
I am still hoping that U3.2 will finally bring the ARMV7 only targeting so you can target the new devices without the 15mb++ punishment from the ARMV6 code (iPad especially for me as I’m primarily doing own projects / prototypes for it, not my itouch 3GS or itouch 4th gen)

I’ve an iTouch 1st gen (running 3.1.3) and an iPhone 3G in iTouch Mode (ie no SIM :wink: running 4.2.1) round here if anyone has anything he would like to get a ballpark number back, just adhoc build it with the profiler on or alike with the device ids which I can send you through pm.