1 #pragma once |
1 #pragma once |
2 #include <QOpenGLWidget> |
2 #include <QOpenGLWidget> |
3 #include <QOpenGLFunctions> |
3 #include <QOpenGLFunctions> |
4 #include <QQuaternion> |
4 #include <QQuaternion> |
|
5 #include <QOpenGLVertexArrayObject> |
|
6 #include <QOpenGLBuffer> |
|
7 #include <QOpenGLShader> |
|
8 #include <QOpenGLShaderProgram> |
5 #include "main.h" |
9 #include "main.h" |
6 #include "gl/common.h" |
10 #include "gl/common.h" |
7 #include "gl/compiler.h" |
11 #include "gl/compiler.h" |
8 |
12 |
9 class PartRenderer : public QOpenGLWidget, protected QOpenGLFunctions |
13 class PartRenderer : public QOpenGLWidget, protected QOpenGLFunctions |
10 { |
14 { |
11 Q_OBJECT |
15 Q_OBJECT |
12 public: |
16 public: |
13 PartRenderer(Model* model, DocumentManager* documents, QWidget* parent = nullptr); |
17 PartRenderer(Model* model, DocumentManager* documents, const ColorTable& colorTable, QWidget* parent = nullptr); |
|
18 ~PartRenderer() override; |
14 protected: |
19 protected: |
15 void initializeGL() override; |
20 void initializeGL() override; |
16 void resizeGL(int width, int height) override; |
21 void resizeGL(int width, int height) override; |
17 void paintGL() override; |
22 void paintGL() override; |
18 void mouseMoveEvent(QMouseEvent* event) override; |
23 void mouseMoveEvent(QMouseEvent* event) override; |
21 void setRenderStyle(const gl::RenderStyle newStyle); |
26 void setRenderStyle(const gl::RenderStyle newStyle); |
22 private: |
27 private: |
23 void renderScene(); |
28 void renderScene(); |
24 Model* const model; |
29 Model* const model; |
25 DocumentManager* const documents; |
30 DocumentManager* const documents; |
|
31 const ColorTable& colorTable; |
26 QPointF lastMousePosition; |
32 QPointF lastMousePosition; |
27 QQuaternion rotation; |
33 QQuaternion rotation; |
28 gl::Compiler* compiler; |
34 gl::Compiler* compiler; |
29 gl::RenderStyle renderStyle = gl::RenderStyle::Normal; |
35 gl::RenderStyle renderStyle = gl::RenderStyle::Normal; |
|
36 struct |
|
37 { |
|
38 QOpenGLShaderProgram* program = nullptr; |
|
39 QOpenGLBuffer buffer{QOpenGLBuffer::VertexBuffer}; |
|
40 QOpenGLVertexArrayObject vertexArray; |
|
41 } objects; |
30 bool initialized = false; |
42 bool initialized = false; |
31 void initializeLighting(); |
43 void initializeLighting(); |
|
44 void renderVao(const gl::ArrayClass arrayClass); |
|
45 void checkForGLErrors(); |
32 }; |
46 }; |