Oggi parliamo di OIS una libreria per l'input multipiattaforma (più precisamente Linux, Window e MacOS anche se quest'ultimo solo parzialmente supportato), gestisce svariate periferiche (tastiera, mouse, joystick, wiimote, etc.) e dispositivi dotati di forcefeedback, è scritta in c++ ed è orientata ad oggetti.
Nota: negli esempi tratto la compilazione e/o utilizzo per Linux, ma non ci sono sostanziali differenze dall'utilizzo su Windows, in ogni caso nel pacchetto dei sorgenti di OIS è presente il file "readme.txt" con tutte le informazioni necessarie.
L'utilizzo neanche a dirlo è semplicissimo, iniziamo con lo scaricare i sorgenti da qui:
http://sourceforge.net/projects/wgois/files/
una volta scompattato l'archivio in una directory a scelta, eseguiremo la compilazione con:
./bootstrap
./configure
./make && make install
ovviamente, per eseguire il 
make install dovremo avere il privilegi di root.
Per utilizzare OIS nel nostro programma dovremo includere il suo header: 
#include "OIS/OIS.h"
Creare una lista di parametri con le nostre preferenze da utilizzare per la creazione dell'inputManahger, e cosa molto importante dovremo passare ad OIS l'id di una finestra già aperta su cui agganciare l'input (nel caso di Window un HWND): 
char windowIdStr[40]; 
sprintf(windowIdStr, "%u", windowId); 
OIS::ParamList pl;  
pl.insert(std::make_pair(std::string("WINDOW"), std::string(windowIdStr))); 
#if defined OIS_WIN32_PLATFORM     
pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND" ))); 
pl.insert(std::make_pair(std::string("w32_mouse"), std::string( hideMouse ? "DISCL_EXCLUSIVE" : "DISCL_NONEXCLUSIVE" ))); 
pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND"))); 
pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_NONEXCLUSIVE"))); 
#elif defined OIS_LINUX_PLATFORM 
pl.insert(std::make_pair(std::string("x11_mouse_grab"), std::string( grabInput ? "true" : "false" ))); 
pl.insert(std::make_pair(std::string("x11_mouse_hide"), std::string( hideMouse ? "true" : "false" ))); 
pl.insert(std::make_pair(std::string("x11_keyboard_grab"), std::string( grabInput ? "true" : "false" ))); 
pl.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("true"))); 
#endif 
 
OIS::InputManager* oisInputManager  = OIS::InputManager::createInputSystem( pl ); 
In sostanza i vari paramentri sono sia per la versione Win32 che per linux e servono per specificare se effettuare il grab della tastiera e del mouse e se nascondere il puntatore del mouse.
To be continued...
Read more...