Do GapiDraw surfaces live in a totally different spot than GDI surfaces? And copying back and forth is always slow?
Yes, this is how it is. Reasons are that:
1. Surfaces might exist in video memory, meaning they will not be GDI compatible.
2. Display or framebuffer on the device might be rotated, meaning that the pitch values will not match X=2 bytes. Meaning surface is not GDI compatible.
3. Surfaces might be created without having a window open, using CreateOffscrenDisplay. This won't work if all surfaces should have a DC.
If you however do not use video memory, and you are only using DirectDraw where frame buffer is not rotated, and you do not rotate the display using GapiDraw, and you always have a main window open, then you could add some simple code to the GapiDraw source code to always create all surfaces as DC compatible DIB's. Will probably take just a few hours. The reasons we did not is just that it's so simple to add for those that need it, and if we added it as standard it would impose usability issues as described above.
Send me your email as a PM and we can continue the discussion from there.