GLBasic forum

Main forum => GLBasic - en => Topic started by: Qube on 2010-Dec-29

Title: iPad 3D Speed
Post by: Qube on 2010-Dec-29
Is there anything that can be done to speed up the 3D speed on the iPad? - Even using a simple 1500 polygon model and no background the frame rate is a mere 37fps - However if I compile for iPhone only then the same app runs at 60fps on the iPad.

There are a lot of 3D apps on the AppStore which run at higher frame rates with much more complicated scenes, like Galaxy of Fire II for example.

Is anyone else experiencing slow frame rates with 3D on the iPad (even with simple objects)? - If not then perhaps you could provide an example to compare?

*note* I have the latest GLB + iOS 4.2 + latest XCode
Title: Re: iPad 3D Speed
Post by: matchy on 2010-Dec-29
Simple 1500 polygon model? That's a lot just for just a presumed spaceship.
A cube (12 tri poly) runs at 60fps on iPad.
Title: Re: iPad 3D Speed
Post by: erico on 2010-Dec-29
Quote from: Qube on 2010-Dec-29
There are a lot of 3D apps on the AppStore which run at higher frame rates with much more complicated scenes, like Galaxy of Fire II for example.

1500 polygons is a lot... I checked a video on Galaxy of fire II, only really low poly objects in there, most of them boxes attached together with nice maps. I like the  laser fest though...

That seems quite possible to come up with glbasic, you can also consider reducing complex objects as they are far from camera, use of squares with textures may help here and there and bump map may heal the extra polygons you may need.

Just ideas though, I programmed nothing on 3d yet...
Title: Re: iPad 3D Speed
Post by: Qube on 2010-Dec-29
I cant even get 3 cubes to spin at anything above 37fps on the iPad which is just silly :/ - Something must be wrong :'(
Title: Re: iPad 3D Speed
Post by: matchy on 2010-Dec-29
There's only one way to find out if it's hardware or code...sample code to test please.
Title: Re: iPad 3D Speed
Post by: Qube on 2010-Dec-29
Well, even the cellshadding 3d example (modified code below) runs slow in the iPad yet when compiled for iPhone and ran on the iPad it runs full frame rate.

Now you can't seriously say that the ipad can't handle a simple thing like this?  :S

Code (glbasic) Select


SETSCREEN 1024, 768, 1
CreateTorus(1, 5, 10, 22, 22, 2, 2)
LOADSPRITE      "image.bmp", 0

DIMDATA cheap[], .5, 1
DIMDATA nice[], .3, .6, .6, .6, .6, .6, .6, .7, 1, 1, 1, 1, 1, 1, 1, 1

WHILE TRUE
phi=phi+GETTIMER()/30
X_SETCELSHADES cheap[]
Render(phi)


dtime = GETTIMER()
fps = ((1000.0/dtime)+fps)/2
delay=delay+dtime
IF delay>1000 // 1/2 sec
delay=0
ShowFPS=fps
ENDIF
X_MAKE2D
PRINT "FPS: "+FORMAT$(0,1,ShowFPS), 100, 0 // + dtime, 0,0

SHOWSCREEN
WEND


// ------------------------------------------------------------- //
// Zeichnet einen Donut
// Renders a Donut
// ------------------------------------------------------------- //
FUNCTION Render: phi
X_MAKE3D 1, 250, 45
X_CAMERA 0, 10, 50, 0,0,0
// Licht Nr. -2 is Cel-Shading Postition / Light no -1 is cel shading position
X_SPOT_LT -2, 0, 0,0,100, 0,0,0,90
X_CULLMODE 1 // niemals 0 verwenden bei toons / Never use 0 with toon shading
X_SETTEXTURE 0, -1 // 0=Tex
X_ROTATION 80, 1,0,0
X_ROTATION phi, 0, 1, 0.1
X_DRAWOBJ 1, 0
ENDFUNCTION


// ------------------------------------------------------------- //
// -=#  CREATETORUS  #=-
// Donut Objekt machen / Make a donut object
//
// By Samuel R. Buss
// http://math.ucsd.edu/~sbuss/MathCG
// ------------------------------------------------------------- //
FUNCTION CreateTorus: num, MinorRadius, MajorRadius, NumWraps, NumPerWrap, TextureWrapVert, TextureWrapHoriz
LOCAL i, di, j, wrapFrac, wrapFracTex, phi, thetaFrac, thetaFracTex, theta
LOCAL x, y, z, r

X_AUTONORMALS 2 // smooth
X_OBJSTART num
FOR di=0 TO NumWraps-1
FOR j=0 TO NumPerWrap
FOR i=di+1 TO di STEP -1
wrapFrac = MOD(j, NumPerWrap)/NumPerWrap
wrapFracTex = j/NumPerWrap
phi = 360*wrapFrac
thetaFrac = (MOD(i, NumWraps)+wrapFracTex)/NumWraps
thetaFracTex = (i+wrapFracTex)/NumWraps
theta = 360*thetaFrac
r = MajorRadius + MinorRadius*COS(phi)
x = SIN(theta)*r
z = COS(theta)*r
y = MinorRadius*SIN(phi)
X_OBJADDVERTEX x,y,z,  thetaFracTex*TextureWrapVert, 1-wrapFracTex*TextureWrapHoriz, _
RGB(0xff,0xff,0xff)
NEXT
NEXT
X_OBJNEWGROUP
NEXT
X_OBJEND
ENDFUNCTION // y
Title: Re: iPad 3D Speed
Post by: Leginus on 2010-Dec-29
Are you running the latest version of glbasic??  And does the 2d stuff run at full speed?
I know the 2d used to run about 30ish frames per second, but was recently fixed to run at full speed, so I wondered if that was still ok or something that needed looking at

Title: Re: iPad 3D Speed
Post by: Qube on 2010-Dec-29
As stated in my first post  :P I am running the latest version of GLB & Xcode & iOS :)

Yes, 2D runs fine and I have no problems with speed. It's just the 3D side that is slow and there seems to be something wrong especially as I can compile for iPhone and run it on the iPad at full speed (even x2 mode).
Title: Re: iPad 3D Speed
Post by: matchy on 2010-Dec-30
Thanks for the test code and I'll test it later. Do you really need your first iPad game to require shaders? 
Title: Re: iPad 3D Speed
Post by: Qube on 2010-Dec-30
I'll not be using shaders, no, but the example was the easiest one to come up with from the GLB examples folder and shows that compiling for iPad runs slow but compiling for iPhone and running on iPad (or iPhone) runs full speed.

Title: Re: iPad 3D Speed
Post by: Qube on 2011-Jan-01
Has anyone tried the above example yet and confirmed 3D slowness on iPad :whistle: - Or you can even stick a few spinning boxes on the iPad and frame rate drops :rant:

p.s. Happy New Year  :booze:
Title: Re: iPad 3D Speed
Post by: Leginus on 2011-Jan-01
Blame santa (in a wife's dress), alas no ipad :(
mmm....not sure that came out right....but i think you get the idea.
Title: Re: iPad 3D Speed
Post by: Qube on 2011-Jan-02
I think the best course if action here will be to do a super simple 3D sample for iPhone and iPad (no textures or anything) to show the vast difference and post the results as an iPad bug in the bugs report forum.

Must get the iPad 3d side sorted out  :'(
Title: Re: iPad 3D Speed
Post by: Qube on 2011-Jan-03
I've posted this in the bug reports forum as this proves that when it comes to 3D speed on the iPhone / iPad, the iPad is dropping to almost half it's frame rate.

Tested with latest iOS + XCode + GLB versions.

The simple one spinning cube below works at 60FPS on iPhone & iPhone mode on the iPad but when compiled for iPad alone the frame rate drops to a mere 35FPS.

Code (glbasic) Select

SETSCREEN 1024, 768, 1
LIMITFPS 60

GLOBAL colWhite =RGB(255,255,255)

X_AUTONORMALS 1

CreateCube(1, 3, colWhite)

LOCAL angle#
LOCAL timeThen% = GETTIMERALL()
LOCAL timeNow%  = GETTIMERALL()
LOCAL FPSCounter%
LOCAL FPS%


WHILE TRUE
timeNow = GETTIMERALL()
IF timeNow >= timeThen + 1000
FPS = FPSCounter
timeThen = timeNow
FPSCounter = 0
ENDIF

X_MAKE3D 1, 40, 65
X_CAMERA 0, 0, 0, 0, 0, 40
X_CULLMODE 1
X_SPOT_LT 1, colWhite, 0, 0, 0, 0, 0, 40, 50

X_MOVEMENT 0, 0, 17
X_SCALING 1, 1, 1
X_ROTATION angle, -1, 0, -1
X_DRAWOBJ 1,  0

X_MAKE2D
PRINT FPS, 0,0

INC angle
INC FPSCounter

SHOWSCREEN
WEND

FUNCTION CreateCube: num, size, col
X_OBJSTART num
// Front Face
X_OBJADDVERTEX  size, -size,  size, 1, 0, col
X_OBJADDVERTEX -size, -size,  size, 0, 0, col
X_OBJADDVERTEX  size,  size,  size, 1, 1, col
X_OBJADDVERTEX -size,  size,  size, 0, 1, col
X_OBJNEWGROUP
// Back Face
X_OBJADDVERTEX -size,  size, -size, 1, 1, col
X_OBJADDVERTEX -size, -size, -size, 1, 0, col
X_OBJADDVERTEX  size,  size, -size, 0, 1, col
X_OBJADDVERTEX  size, -size, -size, 0, 0, col
X_OBJNEWGROUP
// Top Face
X_OBJADDVERTEX -size,  size,  size, 0, 0, col
X_OBJADDVERTEX -size,  size, -size, 0, 1, col
X_OBJADDVERTEX  size,  size,  size, 1, 0, col
X_OBJADDVERTEX  size,  size, -size, 1, 1, col
X_OBJNEWGROUP
// Bottom Face
X_OBJADDVERTEX  size, -size, -size, 0, 1, col
X_OBJADDVERTEX -size, -size, -size, 1, 1, col
X_OBJADDVERTEX  size, -size,  size, 0, 0, col
X_OBJADDVERTEX -size, -size,  size, 1, 0, col
X_OBJNEWGROUP
// Right face
X_OBJADDVERTEX  size,  size, -size, 1, 1, col
X_OBJADDVERTEX  size, -size, -size, 1, 0, col
X_OBJADDVERTEX  size,  size,  size, 0, 1, col
X_OBJADDVERTEX  size, -size,  size, 0, 0, col
X_OBJNEWGROUP
// Left Face
X_OBJADDVERTEX -size, -size,  size, 1, 0, col
X_OBJADDVERTEX -size, -size, -size, 0, 0, col
X_OBJADDVERTEX -size,  size,  size, 1, 1, col
X_OBJADDVERTEX -size,  size, -size, 0, 1, col
X_OBJNEWGROUP
X_OBJEND

ENDFUNCTION
Title: Re: iPad 3D Speed
Post by: Kitty Hello on 2011-Jan-04
Are you using the very latest SDK from Apple? There was a great speed boost with that.
Title: Re: iPad 3D Speed
Post by: Qube on 2011-Jan-04
Quote from: Kitty Hello on 2011-Jan-04
Are you using the very latest SDK from Apple? There was a great speed boost with that.

Yes, very latest of all things :) - No problems with the 2D side of things, that's fast, but the 3D side is slow  :'(
Title: Re: iPad 3D Speed
Post by: Kitty Hello on 2011-Jan-05
OK, don't use coloured vertices. Don't use fancy stuff like fog, cel shading or others. Did you try with no lights?
Title: Re: iPad 3D Speed
Post by: matchy on 2011-Jan-05
Lights and culling doesn't make a big difference.