Direct2d is a pain in the ass for games. If EndDraw() returns ERROR_RECREATE you have to recreate the render target, and that means you have to recreate ALL of your bitmaps. Apparently you can't create the render target and expect it to survive the lifetime of your app. As for DirectDraw... hasn't that been deprecated? I suggest opengl or some library that uses it, because opengl is much easier to use for 2d rendering than directx and its COM stuff.