using std::mutex over boost, debug prints for touch input in touchmodule

This commit is contained in:
Jonathan Bosson
2017-02-18 22:11:48 -07:00
parent 92b480f708
commit 2d223dc250
5 changed files with 74 additions and 50 deletions

View File

@@ -82,6 +82,12 @@ namespace TUIO2 {
*/
TuioObject (unsigned int s_id);
/**
* Copy constructor takes a reference of a TuioObject
* @param t the reference TuioObject to assign
*/
//TuioObject(const TuioObject &t);
/**
* This constructor takes a TuioTime and the Session ID
* @param ttime the TuioTime to assign

View File

@@ -31,7 +31,7 @@
#include <modules/touch/ext/libTUIO2/TUIO2/TcpReceiver.h>
#include <math.h>
#include <vector>
#include <boost/thread/mutex.hpp>
#include <mutex>
using namespace TUIO2;
@@ -52,13 +52,14 @@ class TuioEar : public TuioListener {
std::vector<TuioObject*> getInput();
void clearInput();
void unlock() { _mx.unlock(); };
private:
TuioClient *_tuioClient;
OscReceiver *_oscReceiver;
std::vector<TuioObject*> _list;
boost::mutex _mx;
std::mutex _mx;
};
#endif // __OPENSPACE_MODULE_TOUCH___TOUCHWRAPPER___H__

View File

@@ -33,7 +33,7 @@
#include <openspace/rendering/screenspacerenderable.h>
#include <ghoul/logging/logmanager.h>
#include <boost/thread/mutex.hpp>
#include <mutex>
namespace {
const std::string _loggerCat = "TuioEar";
@@ -41,28 +41,30 @@ namespace {
void TuioEar::tuioAdd(TuioObject *tobj) {
if (tobj->containsNewTuioPointer()) {
boost::lock_guard<boost::mutex> lock(_mx);
_mx.lock();
_list.push_back(tobj);
LINFO("add ptr " << tobj->getTuioPointer()->getSessionID() << ", size: " << _list.size() << "\n");
//LINFO("add ptr " << tobj->getTuioPointer()->getSessionID() << ", size: " << _list.size() << "\n");
}
if (tobj->containsNewTuioToken()) LINFO("add tok " << tobj->getTuioToken()->getSessionID() << "\n");
if(tobj->containsNewTuioBounds()) LINFO("add bnd " << tobj->getTuioBounds()->getSessionID() << "\n");
if(tobj->containsNewTuioSymbol()) LINFO("add sym " << tobj->getTuioSymbol()->getSessionID() << "\n");
//std::cout << "add obj " << tobj->getSymbolID() << " (" << tobj->getSessionID() << "/"<< tobj->getTuioSourceID() << ") "<< tobj->getX() << " " << tobj->getY() << " " << tobj->getAngle() << std::endl;
_mx.unlock();
}
void TuioEar::tuioUpdate(TuioObject *tobj) {
if (tobj->containsTuioPointer()) {
boost::lock_guard<boost::mutex> lock(_mx);
_mx.lock();
_list.push_back(tobj);
LINFO("set ptr " << tobj->getTuioPointer()->getSessionID() << ", size: " << _list.size() << "\n");
//LINFO("set ptr " << tobj->getTuioPointer()->getSessionID() << ", size: " << _list.size() << "\n");
}
if (tobj->containsTuioToken()) LINFO("set tok " << tobj->getTuioToken()->getSessionID() << "\n");
if (tobj->containsTuioBounds()) LINFO("set bnd " << tobj->getTuioBounds()->getSessionID() << "\n");
if (tobj->containsTuioSymbol()) LINFO("set sym " << tobj->getTuioSymbol()->getSessionID() << "\n");
//std::cout << "set obj " << tobj->getSymbolID() << " (" << tobj->getSessionID() << "/"<< tobj->getTuioSourceID() << ") "<< tobj->getX() << " " << tobj->getY() << " " << tobj->getAngle() << " " << tobj->getMotionSpeed() << " " << tobj->getRotationSpeed() << " " << tobj->getMotionAccel() << " " << tobj->getRotationAccel() << std::endl;
_mx.unlock();
}
void TuioEar::tuioRemove(TuioObject *tobj) {
@@ -76,17 +78,18 @@ void TuioEar::tuioRemove(TuioObject *tobj) {
}
void TuioEar::tuioRefresh(TuioTime frameTime) {
LINFO("refresh " << frameTime.getFrameID() << " "<< frameTime.getTotalMilliseconds() << "\n");
//LINFO("refresh " << frameTime.getFrameID() << " "<< frameTime.getTotalMilliseconds() << "\n");
}
std::vector<TuioObject*> TuioEar::getInput() {
boost::lock_guard<boost::mutex> lock(_mx);
_mx.lock();
return _list;
}
void TuioEar::clearInput() {
boost::lock_guard<boost::mutex> lock(_mx);
_mx.lock();
_list.clear();
_mx.unlock();
}
TuioEar::TuioEar() {

View File

@@ -36,6 +36,10 @@
#include <vector>
#include <glm/glm.hpp>
#include <sstream>
#include <string>
#include <iostream>
namespace openspace {
TuioEar TouchModule::*ear;
@@ -46,68 +50,78 @@ TouchModule::TouchModule()
OsEng.registerModuleCallback(
OpenSpaceEngine::CallbackOption::Initialize,
[]() {
[&]() {
LDEBUGC("TouchModule", "Initializing TuioEar");
ear = new TuioEar();
}
);
OsEng.registerModuleCallback(
OpenSpaceEngine::CallbackOption::Deinitialize,
[]() {
[&]() {
LDEBUGC("TouchModule", "Deinitialize TuioEar");
delete ear;
}
);
OsEng.registerModuleCallback(
OpenSpaceEngine::CallbackOption::PostSyncPreDraw,
[]() {
WindowWrapper& wrapper = OsEng.windowWrapper();
if (OsEng.isMaster() && wrapper.isRegularRendering()) {
std::vector<TuioObject*> list = ear->getInput();
std::vector<TuioObject*>::iterator it = list.begin();
// step through the list (from the start) and find each unique id tuioobject
std::vector<TuioObject*> group;
for (auto &&i : list) {
bool sameId = false;
glm::vec2 centroid = glm::vec2(0.0f, 0.0f);
if (i->containsTuioPointer()) {
int id = i->getSessionID();
for (auto &&j : group) // change to lambda/find function
if (j->getSessionID() == id)
sameId = true; // step out of for
if (sameId) { // calculate a centroid
for (auto &&j : group) {
centroid.x += j->getTuioPointer()->getX();
centroid.y += j->getTuioPointer()->getY();
}
centroid.x /= group.size();
centroid.y /= group.size();
}
else
group.push_back(i);
}
}
// group
OsEng.registerModuleCallback( // maybe call ear->clearInput() here rather than postdraw
OpenSpaceEngine::CallbackOption::PreSync,
[&]() {
std::vector<TuioObject*> list = ear->getInput();
std::vector<TuioObject*> group;
glm::vec2 centroid;
ear->unlock();
std::string s = "";
//print list for debugging
const std::string _loggerCat = "TouchModule";
std::ostringstream os;
for (auto &&j : list) {
os << " (" << j->getTuioPointer()->getX() << "," << j->getTuioPointer()->getY() << ") ";
}
if (list.size() > 0)
LINFO("List size: " << list.size() << os.str() << "\n");
os.clear();
// step through the list (from the start) and find each unique id TuioObject
for (auto &&i : list) {
bool sameId = false;
centroid = glm::vec2(0.0f, 0.0f);
if (i->containsTuioPointer()) { // sanity check
int id = i->getSessionID();
for (auto &&j : group) // change to lambda/find function
if (j->getSessionID() == id)
sameId = true; // step out of for
if (sameId) { // calculate a centroid
for (auto &&j : group) {
centroid.x += j->getTuioPointer()->getX();
centroid.y += j->getTuioPointer()->getY();
}
centroid.x /= group.size();
centroid.y /= group.size();
}
else
group.push_back(i);
}
}
//if (centroid.x + centroid.y != 0.0f)
//LINFO("List size: " << list.size() << ", Centroid: (" << centroid.x << ", " << centroid.y << ")\n");
// group
}
);
OsEng.registerModuleCallback(
OpenSpaceEngine::CallbackOption::PostDraw,
[]() {
[&]() {
WindowWrapper& wrapper = OsEng.windowWrapper();
if (OsEng.isMaster() && wrapper.isRegularRendering()) {
ear->clearInput();
}
}
);
}
} // namespace openspace

View File

@@ -34,7 +34,7 @@ class TouchModule : public OpenSpaceModule {
public:
TouchModule();
static TuioEar *ear;
TuioEar *ear;
};
} // namespace openspace