PDA

View Full Version : Want better FPS



Kamaz
07-07-2004, 08:08 AM
If I am correct, this is the place where one can get some help with PowerDraw, Asphyre [now?] components?

If that's so, here's my problem -
I use PowerDraw 3.x version to draw an isomap.
Isomap statistics -
tile width 64
tile height 46
tiled object width 64
tiled object height 128
Scr_resolution 800x600
x tiles per screen ~17
y tiles per screen ~34
tiled object per screen 419
bit-depth bd16

and machin -


AMD 1600XP 1450Mhz 256 DDR 256MHz GeForce Ti4200 128 MB DDR Golden Ed. (:))
and the problem is I am having low framerate. I mean, 87-88 FPS (without VSync, of course). Considering my hardware, that is not quite bleeding edge stuff, of course, but, on the other hand, 800x600 bd16 also is nothing too resource-consuming, I think I should be having [way] better results and that really worries me, because it is game I am writing and it should run as smoothly as possible (VSync) on as much computers as possible.

I ran all the included sample projects on my PC and their FPS is about 200-250 frames per second(except for one project, Demo1, I guess, which runs on 45fps I dunno why). What freaks me out. Of course, most of those projects werent much of complicity, but there is iso-map example which processes even a wave - much more calculations than I do. So I dont know whats wrong with me. I went through my code looking for any optimization, but this far I have earned only some 10 FPS what is good, of course, but not satisfactional. Maybe its alpha that slows down the thing, but, hey, I thought PowerDraw uses Direct3D for alpha/rotating that boosts up those drammatically.
Anyways, maybe I am not doing the blitting the right way? I just do usual TextureMap and that's all - first I draw a land-tiles, then tiled-objects and then cursor. Can anyone help me? I would be damn thankfull.

Harry Hunt
07-07-2004, 11:40 AM
I'm not familiar with PowerDraw, but I've written iso-engines before and I can tell you that what will speed up your engine the most is if you make sure you only draw what's actually visible on the screen.

Kamaz
07-07-2004, 12:21 PM
The problem is that I think I am doing it allready. I listed you the graphical objects that are actually drawn on screen every iteration, in fact, the count of tiled-objects will slightly increase, but it doesnt metter, I just dont know is such framerate normal or bad for such grahics.

Harry Hunt
07-07-2004, 03:17 PM
well, I remember my iso-engine running at ~100 FPS on a P400, 32 MB RAM, TNT2 with 16 MB under DirectDraw with alpha blending.

(I used very big tiles though so there were only like 200 tiles on the screen plus a bunch of sprites and the alpha blending was only used to blend walls in front of the player)

LP
07-07-2004, 04:09 PM
1) Check if "Hardware" is set to "True". In other case, all redering will be made in Software.
2) Try to optimize the rendering order, i.e. render the same tiles first and then another type of tiles. This also applies to "Figure" type (i.e. render images first, then lines, then rectangles, etc)
3) Try to avoid rendering too much regular lines - since PowerDraw draws them pixel-by-pixel (due to LastPixel issue in Direct3D), it causes additional overhead.

Edit: Also try to match the bit depth of the device with the "native" depth of your video card, sample applies to bit depth of your textures. For instance, there're cards that support hardware acceleration for 16 bit depth only, or 32.
In addition, you might want to modify "MaxVertexSize" constant defined in PowerDraw3.pas, try chaging it to something like 2048 (which normally reduces the performance, but in your case might be different...)

Kamaz
09-07-2004, 08:49 AM
Thnx for tips, I solved the problem by myself but those advices just could help me even more.
Now I am running 233 FPS in the same situation and that is agreeable. I can get even 700 fps when drawing only the landscape tiles so I guess, it is ok.

Where was the problem? Well, I admit that was kinda foolish mistake - I used ImageList Items as a single graphic objects. Then I accidentally draw the map only with 1 Image and got 250 fps... I was stunished and, after a while, modificated the tile engine so that it just draws patterns of images rather the images itself. It got less comfortable to design, but increase in perfomance is awsome. I think it has to do with optimal TextureSize maybe...Maybe some1 could explain? I know that in DirectX applications using one big bitmap (graphic source) is allways faster than lots of small ones, but in PD can I make the textures as big as I want? I know the optimal size is about 256X256, but how that could influence my perfomance? I will need to draw bigger images than that 256px, soon, and I'd like to keep perfomance as high as possible.