Maybe I want alpha channels, maybe I want to draw an antialiased line. There are lots of things GDI just is not capable of doing. Now, true, I could do this with the aid of GDI+ which can do this in software before passing the bitmap off to GDI, but it's incredibly slow, and doesn't help at all if GDI is being called indirectly by, say, the button control.What restrictions?
If I wanted a picture on that with a transparent (per pixel) background, I'd have to essentially rewrite the button control myself to use GDI+, and 200 lines of code later I'd have something that should really only take one line in a modern GUI framework.
Yes, and it really was sorely needed when you consider that it only takes one incorrect line of code in a game's shader to crash the GPU.Also, note that the driver is now hybrid with viddeo both in user mode and in kernel mode. If your video driver crashes, Vista will just reboot the subsytem and the user will get a notification that the driver has reset. No more BSOD.
But the consequence of these changes is that if you paint a circle with GDI now, you're calling the GDI library which then calls the GDI kernel driver, which then calls the DWM which converts the GDI bitmap into a Direct3D texture and then calls an intermediate API (that it shares with WPF) which then calls Direct3D which calls the driver that displays it on the screen.
What is needed is a new API designed to take advantage of the 3D hardware to make all the drawing operatings as fast as possible, and then a new GUI framework that sits on top of this API. It also needs to be simple to use and high-level, so you can get the job done quickly without being a masochist.