My program is slow

Started by
2 comments, last by ade-the-heat 17 years, 10 months ago
In one test scene in my game I have 6 Draw calls, 10 700 vertexes and 18 500 tris per frame. I have 38 fps on a RADEON 9800 Pro - 2.2 GHz. This seams really slow? I don't use VBOs, I use normal glDrawElements calls. I know program is NOT fill rate limited or some other non-geometry bottleneck. The amount of vertex data is proportional to my fps. Here comes the strange part, if I render my surfaces in 2 passes instead of one the fps goes to 34 fps, should it not be half of 38 fps? (I know I am still not fill rate limited) If I bind all my OpenGL calls to null functions I see that almost all the CPU time is spent inside OpenGL and the driver. What should I do to make it faster? I know I could start using VBOs. What performance gain can I expect with VBOs? But even if I use VBO I think is strange that my game goes extremely so slow without it.
Advertisement
Make sure that your vertex, color, and normal data is 'packed' (ie. no gaps between elements). OpenGL can zip right through your arrays if each one is kept separately and the elements in each are right next to each other, without any extraneous data.

Another method, along the same lines, would be to use interleaved arrays (still with no extra data between elements). Some people have mixed results using interleaved arrays, but in my previous projects, it yielded sizeable performance gains.

What are you doing to texture and light your geometry? Are you having OpenGL calculate normals every frame? Are your textures' dimensions not powers of two?

That's all I can think of, off the top of my head. Hope that helps.

err just in case you haven't done this:

1. frustum cull everything
2. occlusion cull complicated objects
3. draw objects in order nearest to furthest
4. VBOs will up the rate a lot more maybe from 20% upwards
5. display lists ?
6. draw distant objects/terrain sectors with less vertices - level of detail, eg a person 200 yards away can be drawn as little more than matchsticks
7. mipmap your textures - choosing the most suitable mimap method made a gain of about 30% in my game - with a little lower quality
8. the wgl command - how many bits per pixel have you set - I found the fastest for me was 24 (as I'm using rgb channels with 8 bits for each) - 32 will give best quality but slower, 16 bits will slow it right down.

all the above are pretty easy to do

hope this helps

ade
I forgot to add:

a) reduce the max distance see-able - the less far you can see the more you will cull in frustum culling

b) narrow the angle see-able - think this is in setting the camera position, eg if you can see at angle of 45 degrees you'll be seeing an area almost 1/3 times the coverage of if the angle is 75 degree - this means 3 times more items being culled.

This topic is closed to new replies.

Advertisement