the correct way to implement OSD in games is to hook the directx functions of games and when the game is done with all its drawing calls and calls present() you draw your own stuff on top of that. the best performance and safest way to implement this is as a vector graphic for the numbers so you dont need textures or anything else.

the fastest way to get an OSD in your game is by feeding data to rivatuner's statistics server.