-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathglview.h
95 lines (74 loc) · 2.42 KB
/
glview.h
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#ifndef GLVIEW_H
#define GLVIEW_H
#include <QOpenGLWidget>
#include <QOpenGLFramebufferObject>
#include <QColorDialog>
#include <QTimer>
#include <QTime>
#include <QOpenGLDebugLogger>
#include <QOpenGLBuffer>
#include <QOpenGLVertexArrayObject>
#include "transformable.h"
#include "camera.h"
#include "shader.h"
#include "mesh.h"
#include "constants.h"
#define PAINT_FBO_WIDTH 2048
class GLView : public QOpenGLWidget
{
Q_OBJECT
public:
explicit GLView(QWidget *parent = 0);
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
void drawScene();
void drawOutlinedText(QPainter* painter, int x, int y, QString text, QColor bgColor, QColor fgColor);
void drawBrush();
virtual QString getViewLabel() = 0;
// whether vertices are render with 3D positions or uvs
virtual MeshPropType meshVertexSpace() = 0;
void mousePressEvent(QMouseEvent* event);
void mouseDoubleClickEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
void mouseDragEvent(QMouseEvent* event);
void leaveEvent(QEvent* event);
void resizeEvent(QResizeEvent *event);
void keyPressEvent(QKeyEvent* event);
signals:
public slots:
void messageTimerUpdate();
void brushSizeChanged();
void brushColorChanged(QColor oldColor, QColor newColor);
void onMeshAdded();
void onMeshesRemoved(QList<Mesh*> removed);
void onMeshesAltered(QList<Mesh*> altered);
protected:
// shared GL resources
QOpenGLFramebufferObject* drawFbo();
QOpenGLFramebufferObject* transferFbo();
QOpenGLFramebufferObject* paintFbo();
QOpenGLFramebufferObject* _drawFbo = 0;
QOpenGLFramebufferObject* _transferFbo = 0;
QOpenGLFramebufferObject* _paintFbo = 0;
// non-shared GL resources
QGLShaderProgram* _meshShader;
QGLShaderProgram* _bakeShader;
QGLShaderProgram* _paintDebugShader;
Camera* _camera;
CameraScratch _cameraScratch;
static QList<GLView*> _glViews;
void drawPaintStrokes();
void drawPaintLayer();
void setBusyMessage(QString message, int duration);
private:
void bakePaintLayer();
QList<Point2> _strokePoints;
bool _paintLayerIsDirty;
QTimer _messageTimer;
QString _busyMessage = "";
QTime _messageFinished;
QOpenGLDebugLogger* _logger;
};
#endif // GLVIEW_H