views:

79

answers:

2

Hi all,

I have a big performance problem on 32GB iPod touch model 3rd generation.

The App is a port of an DS 3D game. The rendering is done with OpenGL ES 1.1. It uses OpenAL for Audio and the MPMoviePlayerController for videos.

The performance on a 8GB iPod touch is fine, it runs constantly with more than 30 fps. Then I tested it on a 32GB model of the 3rd generation and was shocked how slowly it is. The first problem I noticed was the Intro cutscene. The video was fragmented and stucks, frames has been skipped.

In the 3D level the performance was about 15 fps. The scene has about 10000 vertices in a static vertex buffer and 7000 vertices in a dynamic vertex buffer. The dynamic vertices are updated each frame, not all of them, but that part that changed last frame for skeleton animation.

I played with the build settings, Thumb on/off, optimized for armv7 and so on, with no effort. On the 8GB model it keeps running very fast and on the 32GB model it sucks.

Then I tried an other 3D Game from App store (N.O.V.A) on the 32GB model. It runs with a good performance, the video too.

Now I am at an end with my ideas.

Can someone please give me a hint what the problem could be.

Thanks for that and best regards gentle

+2  A: 

There are three generations of the iPod Touch, with the latest generation similar specs to the iPhone 3GS, most notably, double the memory, a faster GPU, and a much better GPU than the 1st or 2nd generation.

You are comparing different hardware, since there has never been an 8GB 3rd gen model. So something your code is making it run worse on the newer hardware -- which is actually quite surprising. My guess: it's GPU-related.

Shaggy Frog
Yes I know that there was never a 3rd gen model of the 8GB ipod-touch. Thats what is me surprising so much, that it runs faster on a 2nd gen model than on a third gen model.You mean its GPU related, but I use normal OpenGL ES stuff. And it doesnt explain why it is so fast on the 8GB model (slower GPU).
Georg Leidinger
Without showing much more of your code, there's not much else we can speculate on.
Shaggy Frog
A: 

iPod touch second-generation has a GPU that runs OpenGLES1.1 natively.

iPod touch third-generation has a GPU that runs OpenGLES2.0 natively and is much faster, but runs OpenGLES1.1 instructions by converting them to OpenGLES2.0 instructions. Your application is likely using 1.1 instructions that are difficult for the GPU driver to emulate using 2.0 instructions

Note: this is a simplified explanation

rpetrich
Ok I used Instruments to show me the expensive processes on the 32Gb model. It shows me, that my UpdateDynamicVertexBuffer() needs the most time, but only on the 3rd gen. model.What I do in this method is the following:I have one big dynamic vertex buffer which holds all vertices that must be updated because they are animated. For each mesh I run through the vertices and multiply them with a transformation matrix.Then I upload the modified vertices to the graphics card with glBufferSubData.This seems to stall the rendering process in some way.Any solutions?
Georg Leidinger