Pheonix73 - You're learning important things. Hard rule of thumb for poly and Textures? I don't have one. Developing on a "slower" PC is a good thing for writing tighter code in general - and you're right about optimizations like textures and poly having dramatic impact.
Basically - Once your gfx data in the video card exceeds the video cards RAM - problems with speed and sometimes display (appearance) result.
This gets deep bro - (and using DarkGDK its kinda far removed but read this anyway) and depends how the "gfx system" that your using ties into the video hardware - for example - direct x has three main modes for "individual" gfx things (mesh and textures) One in VRAM period (fastest) - One In a system area that happens to have az "fast wired connection to the vram) (Slow) and a special mode where dx keeps it in regular system ram - and tries to manage it for you (slowest).
In short - when the VRAM is full - direct stuff - well - no wiggle room - the other 2 methods - basically try to swap out "unused ram" and swap in the stuff its trying to render - and the lest "room" in the vram to allow this sort of "smart management" during a render - the SLOWER it gets.
To Summerize - those setting you mention - and why they are in games - is simply that - fill the VRAM - SLOW game - overburden the GPU with to many shaders and special effects - Slower Game - Giving users options? Allows them to find their own sweet spot.
One Could Calculate their gfx and textures and stuff and see if the vram is getting stuffed - but sometimes this is just to much work - and its easier to make a reasonabley light weight "gfx" base - (lower poly models - no effects - then the user can "turn up" like we were just discussing to get them that balance.
Ok - NEw TOPIC! GFX card work - from another point of view.
Objects in GDK that are not on screen - are still "rendered" even though you don't see them. This is a dumbed down explanation of what's going on - but if an object isn't on the screen - then if you can "Exclude" that object - then you eliminate some work for the video card during the render (dbSetObjectExcludeOn(ID) is more performance advantageous the simply dbObjectHide or whatever. Note - exclude doesn't work on instanced objects ... and if you exclude the "main" objects other instances are based on - they disaappear also!)
So - how do you know if an object is on the "screen"? How about dbObjectInScreen()??? Nope - that work VERY lame! Very flawed - don't waste your time. What you need is something called frustrum culling - this is where you basically get the "coords" of the view area - and test objects if they are in it - and if they are not - exclude em - if they are - un-exclude them, and your frame rates increase!
Caveat - if you are trying to check 500+ objects in the frustrum code - then the work involved testing the frustrum "in or out" thing - well - you lose the gfx speed gain in cpu processing time! So - there are various "means" to try and deal with this - and you should do some searching on things like: Frustrum culling, occlusion culling (can't be done correctly in DarkGDK), backface culling (not exactly related but youshould know if you don't already ...what it is..)
Lost in thought ported some DBPro code from a OpenGL app for frustrum culling - and it even works on "limbed" objects (static ones that don't move around - like buildings made of various "chunks" or limbs for example...)
I ported this to GDK - and I have code for this sort of thing in this lib:
http://code.google.com/p/darkgdkoop/
good luck man! You're learning and doing the right kind of testing and benchmarking etc - performance stuff - all important things to consider before you spend monthes getting the game right then it crawls and your like ...WHAAA????
Keep up the good work!
--Jason