/
CalibPlugin.cpp
70 lines (62 loc) · 2.45 KB
/
CalibPlugin.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "CalibPlugin.h"
CalibPlugin::CalibPlugin()
: StimPlugin("CalibPlugin")
{
Connect(this, SIGNAL(refreshRateCalibrated(unsigned)), StimApp::instance(), SLOT(calibratedRefresh(unsigned)));
}
void CalibPlugin::stop(bool doSave, bool use_gui, bool softStop)
{
const bool wasEnabled = stimApp()->spikeGLNotifyParams.enabled;
stimApp()->spikeGLNotifyParams.enabled = false; // suppress for this plugin
StimPlugin::stop(doSave, use_gui, softStop);
stimApp()->spikeGLNotifyParams.enabled = wasEnabled;
}
bool CalibPlugin::start(bool startUnpaused)
{
const bool wasEnabled = stimApp()->spikeGLNotifyParams.enabled;
stimApp()->spikeGLNotifyParams.enabled = false; // suppress for this plugin
StimPlugin::start(startUnpaused);
stimApp()->spikeGLNotifyParams.enabled = wasEnabled;
return true;
}
void CalibPlugin::drawFrame()
{
// calibration code -- no trivial painting done of num x num random rectangles
const float meanintensity = 0.5f, variance = 0.05f;
const int num = 1;
int w = width(), h = height(), x = 0, y = 0, xincr = w/num, yincr = h/num;
for (;;) {
glColor3f( meanintensity + ran1Gen.range(-variance,variance), meanintensity + ran1Gen.range(-variance,variance), meanintensity + ran1Gen.range(-variance,variance) );
glRecti( x, y, x+xincr, y+yincr );
if ( (x += xincr) + xincr > w ) x = 0, y += yincr;
if ( y + yincr > h ) break;
}
static const unsigned calibTot = 240;
Debug() << "Frame " << frameNum << " fpsnow " << fps << " avg " << fpsAvg << " hwframe " << getHWFrameCount();
if (frameNum >= calibTot) {
stop();
emit refreshRateCalibrated(static_cast<unsigned>(qRound(fpsAvg)));
emit finished();
}
}
bool CalibPlugin::init()
{
#if 0
if (!StimApp::instance()->busy()) {
Error() << "Calib plugin can only be started once, at app initialization. Sorry!";
return false;
}
#endif
wasDebugMode = StimApp::instance()->isDebugMode();
StimApp::instance()->setDebugMode(false); // force debug mode off to minimize console printing
StimApp::lockMouseKeyboard();
Log() << "Calib plugin locked mouse and keyboard to minimize paint events (please wait)";
return true;
}
void CalibPlugin::cleanup()
{
StimPlugin::cleanup();
StimApp::releaseMouseKeyboard();
StimApp::instance()->setDebugMode(wasDebugMode); // re-enable debug mode if it was set
Log() << "Calib plugin released mouse and keyboard";
}