Quote Originally Posted by Chebmaster
there is "Loading creatures" when creature's animations are prepared. This means loading VRML files, creating intermediate animation frames by interpolating between two models, and then creating a display list for each animation frame.
You are crazy. The normal people interpolate the animation on the fly. ATI cards, probably, are unable to cope with using the display lists the way they were not designed to.

How many polygons your monsters have and *what* are you trying to accelerate by using display lists?
Interpolating on the fly is good when you have really low-poly models and they are constructed of a few parts that are constant, and are simply transformed differently in each animation frame. In such case I will use only one display list, not create display list for each animation frame, so I handle this case efficiently.

However, when models have more triangles and animation means deforming the mesh (actually, it can mean deforming anything --- you can e.g. change things such as materials during animation), interpolating the things on the fly is not doable --- it would take too long. So vertices must be precalculated, and then each animation frame is stored in a separate display list. Display lists are needed so that every vertex (this includes it's normal vector, possibly material setting, possibly texture coord etc.) is already stored in precalculated state. I could replace using display lists with other OpenGL buffers, but it would lead to the same situation anyway --- the vertices have to be stored along with their information.

How many vertices do my models have ? As far as I remember the largest one that is animated using deforming has 4200 vertices. Tests shown that it needs about 16 * 5 display lists. So that's 80 * 4200 vertices info in display lists. That's *not* something that the OpenGL implementation shouldn't be capable of handling, and NVidia shows this, as all the animations of this model took about 20 MB memory. That's pretty acceptable (and note that this the largest creature, others have 2000 or 500 vertices). All creature animations eat 130 MB memory with NVidia (I'm speaking here about latest version on my page, 0.6.3). So, as you see, these are not some terrible counts.

IOW, it's true that my models use more vertices than in usual FPSes and they are sometimes animated using more complex method. I *know* that this is the cause of my problems But the fact is that the memory (and loading time) overhead is perfectly acceptable on NVidia cards. And calculating how much memory the vertices should take, the overhead *should* be acceptable. So the only question is, what do I do wrong that the overhead on Radeon is so large ? Possibly Radeon is trying to immediately pull all these display list info into some resource-limited area on the card.