lunedì 24 agosto 2009

Input multipiattaforma con OIS - 1a parte

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...

0 commenti:

Posta un commento

About This Blog

  © Blogger template PingooIgloo by Ourblogtemplates.com 2009

Back to TOP