REMOVED: the DrawModel function from classifierInterface (they all do exactly the...
[mldemos:baraks-mldemos.git] / Core / glwidget.h
1 #ifndef GLWIDGET_H\r
2 #define GLWIDGET_H\r
3 \r
4 #include "glUtils.h"\r
5 #include <canvas.h>\r
6 #include <vector>\r
7 #include <QtOpenGL>\r
8 #include <QGLWidget>\r
9 #include <QMatrix4x4>\r
10 \r
11 class QMatrix;\r
12 class QMatrix4x4;\r
13 class QGLShaderProgram;\r
14 class QGLShader;\r
15 \r
16 #ifdef WIN32\r
17 class GLWidget : public QGLWidget, protected QGLFunctions\r
18 #else\r
19 class GLWidget : public QGLWidget\r
20 #endif\r
21 {\r
22     Q_OBJECT\r
23 \r
24 public:\r
25     GLWidget(Canvas *canvas, QWidget *parent = 0);\r
26     ~GLWidget();\r
27     void clearLists();\r
28     void generateObjects();\r
29     void DrawObject(GLObject &o);\r
30     void DrawSamples(GLObject &o);\r
31     void DrawParticles(GLObject &o);\r
32     void DrawLines(GLObject &o);\r
33     void DrawSurfaces(GLObject &o);\r
34     void LoadShader(QGLShaderProgram **program_, QString vshader, QString fshader);\r
35     static inline void glSample(fvec sample, QColor c, int xIndex, int yIndex, int zIndex)\r
36     {\r
37         glColor3f(c.redF(), c.greenF(), c.blueF());\r
38         float sX=0,sY=0,sZ=0;\r
39         if(xIndex >= 0) sX = sample[xIndex];\r
40         if(yIndex >= 0) sY = sample[yIndex];\r
41         if(zIndex >= 0) sZ = sample[zIndex];\r
42         glVertex3f(sX,sY,sZ);\r
43     }\r
44 \r
45     static inline void glLine(fvec p1, fvec p2, int xIndex=0, int yIndex=1, int zIndex=2)\r
46     {\r
47         glVertex3f(p1[xIndex], p1[yIndex], zIndex >= 0 ? p1[zIndex] : 0.f);\r
48         glVertex3f(p2[xIndex], p2[yIndex], zIndex >= 0 ? p2[zIndex] : 0.f);\r
49     }\r
50 \r
51 public slots:\r
52     void setXRotation(int angle);\r
53     void setYRotation(int angle);\r
54     void setZRotation(int angle);\r
55     void setXPosition(float pos);\r
56     void setYPosition(float pos);\r
57     void setZPosition(float pos);\r
58 \r
59 signals:\r
60     void xRotationChanged(int angle);\r
61     void yRotationChanged(int angle);\r
62     void zRotationChanged(int angle);\r
63     void xPositionChanged(float pos);\r
64     void yPositionChanged(float pos);\r
65     void zPositionChanged(float pos);\r
66 \r
67 protected:\r
68     void initializeGL();\r
69     void paintGL();\r
70     void resizeGL(int width, int height);\r
71     void zoom(int delta);\r
72     void mousePressEvent(QMouseEvent *event);\r
73     void mouseMoveEvent(QMouseEvent *event);\r
74     void wheelEvent(QWheelEvent *event);\r
75     void resizeEvent(QResizeEvent *);\r
76     void timerEvent(QTimerEvent *);\r
77 \r
78 private:\r
79     void normalizeAngle(int *angle);\r
80     void RenderFBO(QGLFramebufferObject *fbo, QGLShaderProgram *program);\r
81     void RenderShadowMap(QGLFramebufferObject *fbo, GLLight light, std::vector<GLObject> objects);\r
82 \r
83     QMatrix4x4 perspectiveMatrix;\r
84     QMatrix4x4 modelViewMatrix;\r
85     QMatrix4x4 modelViewProjectionMatrix;\r
86     QMatrix3x3 normalMatrix;\r
87     QVector4D viewport;\r
88     int xRot, yRot, zRot;\r
89     float xPos, yPos, zPos;\r
90 \r
91     float zoomFactor;\r
92     int width, height;\r
93 \r
94     QPoint lastPos;\r
95 \r
96     std::map<QString, QGLShaderProgram*> shaders;\r
97 \r
98 public:\r
99     QMutex *mutex;\r
100     Canvas *canvas;\r
101     std::vector<GLuint> drawSampleLists;\r
102     std::vector<GLuint> drawLists;\r
103     std::map<GLuint, fvec> drawSampleListCenters;\r
104     std::vector<GLObject> objects;\r
105     std::vector<GLLight> lights;\r
106     bool bDisplaySamples, bDisplayLines, bDisplaySurfaces, bDisplayTransparency, bDisplayBlurry;\r
107     bool bRotateCamera;\r
108 \r
109     static const GLint texWidth = 128;\r
110     static const GLint texHeight = 128;\r
111     static const float texHalfWidth = 64.0f;\r
112     static const float texHalfHeight = 64.0f;\r
113     static const float texRadius = texWidth*0.9;\r
114     static const int textureCount = 2; // 0: samples, 1: wide circle\r
115     static GLuint *textureNames;\r
116     static unsigned char **textureData;\r
117 \r
118     QGLFramebufferObject *render_fbo;\r
119     QGLFramebufferObject *texture_fbo;\r
120     QGLFramebufferObject *light_fbo;\r
121 };\r
122 \r
123 #endif\r