I ask for a screenmode that’s 800x600x16x60Hz. If I don’t get 16bit I’ll use 32bit. If I don’t get 60Hz I use the highest available frequency. If you’ve got the title screen up then we know this part works OK.
Next, if ARB_multitexture is supported and ARB_texture_env_dot3 is supported, you get the bumpmapped background rendered in two passes.
If ARB_multitexture is supported otherwise, you get a statically bumpmapped background rendered in one pass.
If neither is supported you’ll get the “cheapass” renderer (hint: try typing cheapass at the dropdown console and then go to options and change one of the checkboxes). The cheapass renderer draws a static bumpmapped background using two passes and no tricks at all.
If NV_vertex_array_range or NV_vertex_array_range2 is present I reserve some AGP ram if I can, and put all my vertex data in it, and create fences here and there and use VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV client state.
Otherwise if it’s not Nvidia and EXT_compiled_vertex_array is present I use glLockArraysEXT().
If EXT_draw_range_elements is present I’ll use glDrawRangeElements; otherwise I use just glDrawElements.
If WGL_EXT_swap_interval is present and I’ve got a 60Hz mode I’ll use a 1 frame swap interval; otherwise I sleep according to the hires timer every frame to get 60Hz.
That’s the sum total of extensions and how I use them.
Cas