I’ve been looking at Direct3D and see that it has some very advanced features regarding the control of vertical sync.
More importantly when “D3DPRESENT_INTERVAL_ONE” is used, the CPU is able to idle properly with both the current ATI and nVidia drivers.
OpenGL has terrible problems at the moment with CPU usage, especially with the ATI drivers. This is important when OpenGL is used on the desktop with other applications, to preserve system resources.
This is important cause OpenGL is not just a 3D game API, it is also for desktop and internet browser applications. And OpenGL is perfectly suited to OpenGL graphics on the web cause it should work everywhere.
Therefore I think it is very important to have advanced control of vertical sync, especially to enable applications idle properly and minimize their CPU usage.
That means proper idling in the OpenGL drivers as part of the OpenGL standard, if the developer requires to do so.
At the moment this is not possible with OpenGL and Direct3D is way ahead of this already. This is very fundamental and should of been implemented years ago, cause the latest OpenGL 2.0 cards are very expensive. And who knows when this could be standardised.
The current workaround is to use “Sleep”, but the timings are too coarse. And if the timing resolution is increased, the CPU usage then greatly rises.
At the moment I am being forced to consider Direct3D, because it has much better support for these features. But unfortunately Direct3D will not work on every platform.