blob: f7310aee56d9c785ef5b86dadcd979ce8e3b9409 (
plain)
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
|
#pragma once
#include <QTime>
#include <QThread>
#include <QSemaphore>
#include <QPair>
#include <QGLWidget>
#include "util/performancetimer.h"
class VSyncThread : public QThread {
Q_OBJECT
public:
enum VSyncMode {
ST_TIMER = 0,
ST_MESA_VBLANK_MODE_1,
ST_SGI_VIDEO_SYNC,
ST_OML_SYNC_CONTROL,
ST_FREE,
ST_COUNT // Dummy Type at last, counting possible types
};
VSyncThread(QObject* pParent);
~VSyncThread();
void run();
bool waitForVideoSync(QGLWidget* glw);
int elapsed();
int toNextSyncMicros();
void setSyncIntervalTimeMicros(int usSyncTimer);
void setVSyncType(int mode);
int droppedFrames();
void setSwapWait(int sw);
int fromTimerToNextSyncMicros(const PerformanceTimer& timer);
void vsyncSlotFinished();
void getAvailableVSyncTypes(QList<QPair<int, QString > >* list);
void setupSync(QGLWidget* glw, int index);
void waitUntilSwap(QGLWidget* glw);
signals:
void vsyncRender();
void vsyncSwap();
private:
bool m_bDoRendering;
bool m_vSyncTypeChanged;
int m_syncIntervalTimeMicros;
int m_waitToSwapMicros;
enum VSyncMode m_vSyncMode;
bool m_syncOk;
int m_droppedFrames;
int m_swapWait;
PerformanceTimer m_timer;
QSemaphore m_semaVsyncSlot;
double m_displayFrameRate;
int m_vSyncPerRendering;
};
|