src/glrenderer.cpp

Thu, 07 Jun 2018 23:24:02 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Thu, 07 Jun 2018 23:24:02 +0300
changeset 1393
f0fe7ea82b81
parent 1391
5fa4bf1fc781
child 1404
16eb4257e662
permissions
-rw-r--r--

changed rotation matrix to quaternion in GLRenderer

655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 * LDForge: LDraw parts authoring CAD
1326
69a90bd2dba2 Happy new year 2018
Teemu Piippo <teemu@hecknology.net>
parents: 1323
diff changeset
3 * Copyright (C) 2013 - 2018 Teemu Piippo
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 * This program is free software: you can redistribute it and/or modify
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 * the Free Software Foundation, either version 3 of the License, or
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8 * (at your option) any later version.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 * GNU General Public License for more details.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
14 *
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17 */
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
19 #define GL_GLEXT_PROTOTYPES
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
20 #include <GL/glu.h>
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
21 #include <GL/glext.h>
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
22 #include <QContextMenuEvent>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 #include <QToolTip>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24 #include <QTimer>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
25 #include <GL/glu.h>
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
26 #include "main.h"
1145
02264bf0108d Renamed ldDocument.cpp → lddocument.cpp
Teemu Piippo <teemu@hecknology.net>
parents: 1144
diff changeset
27 #include "lddocument.h"
1144
4f226fd97826 Renamed glRenderer.cpp → glrenderer.cpp
Teemu Piippo <teemu@hecknology.net>
parents: 1135
diff changeset
28 #include "glrenderer.h"
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
29 #include "colors.h"
962
a4b463a7ee82 Rename MainWindow files
Teemu Piippo <crimsondusk64@gmail.com>
parents: 958
diff changeset
30 #include "mainwindow.h"
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
31 #include "editHistory.h"
1146
bb728c124d47 Renamed glCompiler.cpp → glcompiler.cpp
Teemu Piippo <teemu@hecknology.net>
parents: 1145
diff changeset
32 #include "glcompiler.h"
827
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
33 #include "primitives.h"
998
5be0ce31ce60 Now compiles again
Teemu Piippo <crimsondusk64@gmail.com>
parents: 986
diff changeset
34 #include "documentmanager.h"
1023
9450ac3cd930 Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1017
diff changeset
35 #include "grid.h"
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
36
1106
7541b0209057 Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents: 1105
diff changeset
37 const QPen GLRenderer::thinBorderPen {QColor {0, 0, 0, 208}, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin};
7541b0209057 Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents: 1105
diff changeset
38
1151
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
39 // Transformation matrices for the fixed cameras.
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
40 const GLRotationMatrix GLRenderer::topCameraMatrix = GLRotationMatrix {};
1177
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1173
diff changeset
41 const GLRotationMatrix GLRenderer::frontCameraMatrix = {1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1};
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1173
diff changeset
42 const GLRotationMatrix GLRenderer::leftCameraMatrix = {0, -1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 1};
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1173
diff changeset
43 const GLRotationMatrix GLRenderer::bottomCameraMatrix = {1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1};
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1173
diff changeset
44 const GLRotationMatrix GLRenderer::backCameraMatrix = {-1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1};
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1173
diff changeset
45 const GLRotationMatrix GLRenderer::rightCameraMatrix = {0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1};
1151
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
46
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
47 // Conversion matrix from LDraw to OpenGL coordinates.
1177
8661b9237ed5 Added support for ideal co-ordinates, which should make writing editing tools a lot easier. For some reason they don't yet work with the back and right cameras.
Teemu Piippo <teemu@hecknology.net>
parents: 1173
diff changeset
48 const GLRotationMatrix GLRenderer::ldrawToGLAdapterMatrix = {1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1};
1151
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
49
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
50 /*
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
51 * Constructs a GL renderer.
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
52 */
1109
a55b2608a395 Made GLRenderer's Model pointer const
Teemu Piippo <teemu@hecknology.net>
parents: 1108
diff changeset
53 GLRenderer::GLRenderer(const Model* model, QWidget* parent) :
1097
9a9e6ce0c5dc Made a new renderer be created for each document, instead of reusing the same renderer for all documents.
Teemu Piippo <teemu@hecknology.net>
parents: 1096
diff changeset
54 QGLWidget {parent},
9a9e6ce0c5dc Made a new renderer be created for each document, instead of reusing the same renderer for all documents.
Teemu Piippo <teemu@hecknology.net>
parents: 1096
diff changeset
55 HierarchyElement {parent},
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
56 m_model {model},
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
57 m_cameras {
1151
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
58 {"Top camera", {topCameraMatrix, X, Z, false, false, false}}, // top
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
59 {"Front camera", {frontCameraMatrix, X, Y, false, true, false}}, // front
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
60 {"Left camera", {leftCameraMatrix, Z, Y, true, true, false}}, // left
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
61 {"Bottom camera", {bottomCameraMatrix, X, Z, false, true, true}}, // bottom
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
62 {"Back camera", {backCameraMatrix, X, Y, true, true, true}}, // back
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
63 {"Right camera", {rightCameraMatrix, Z, Y, false, true, true}}, // right
1130
17f92eb2a30c Moved camera names to GLCamera, other adjustments
Teemu Piippo <teemu@hecknology.net>
parents: 1129
diff changeset
64 {"Free camera", GLCamera::FreeCamera}, // free
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
65 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
66 {
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
67 m_camera = (Camera) config::camera();
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
68 m_compiler = new GLCompiler (this);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
69 m_toolTipTimer = new QTimer (this);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
70 m_toolTipTimer->setSingleShot (true);
790
fe1b83f6ba82 - added primitives toolbox
Santeri Piippo <crimsondusk64@gmail.com>
parents: 789
diff changeset
71 setAcceptDrops (true);
1131
03aa7091cb4a Simplified camera tooltip code.
Teemu Piippo <teemu@hecknology.net>
parents: 1130
diff changeset
72 connect (m_toolTipTimer, SIGNAL (timeout()), this, SLOT (showCameraIconTooltip()));
1098
0b837bed121d LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.
Teemu Piippo <teemu@hecknology.net>
parents: 1097
diff changeset
73 resetAllAngles();
0b837bed121d LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.
Teemu Piippo <teemu@hecknology.net>
parents: 1097
diff changeset
74 m_needZoomToFit = true;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
75
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
76 // Init camera icons
1036
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1035
diff changeset
77 for (Camera camera : iterateEnum<Camera>())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
78 {
1036
993c46d7eb75 Replaced the ugly for_enum macro with a generator class
Teemu Piippo <teemu@compsta2.com>
parents: 1035
diff changeset
79 const char* cameraIconNames[EnumLimits<Camera>::Count] =
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
80 {
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
81 "camera-top", "camera-front", "camera-left",
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
82 "camera-bottom", "camera-back", "camera-right",
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
83 "camera-free"
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
84 };
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
85
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
86 CameraIcon* info = &m_cameraIcons[static_cast<int>(camera)];
1157
1d6d244bdabd Moved GetIcon and makeSettings into the MainWindow namespace as static methods.
Teemu Piippo <teemu@hecknology.net>
parents: 1151
diff changeset
87 info->image = MainWindow::getIcon (cameraIconNames[static_cast<int>(camera)]);
1035
8a60250175ba Further improved enum handling
Teemu Piippo <teemu@compsta2.com>
parents: 1034
diff changeset
88 info->camera = camera;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
89 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90
1372
641060842b92 fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
91 connect(
641060842b92 fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
92 this->m_compiler,
641060842b92 fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
93 &GLCompiler::sceneChanged,
641060842b92 fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
94 this,
641060842b92 fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
95 qOverload<>(&GLRenderer::update)
641060842b92 fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
96 );
641060842b92 fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
97
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
98 calcCameraIcons();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
100
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
101 /*
1169
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
102 * Destructs the GL renderer.
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
103 */
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
104 GLRenderer::~GLRenderer()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 {
1169
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
106 freeAxes();
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
107 }
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
108
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
109 /*
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
110 * Deletes the axes VBOs
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
111 */
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
112 void GLRenderer::freeAxes()
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
113 {
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
114 if (m_axesInitialized)
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
115 {
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
116 glDeleteBuffers(1, &m_axesVbo);
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
117 glDeleteBuffers(1, &m_axesColorVbo);
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
118 m_axesInitialized = false;
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
119 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
121
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
122 /*
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
123 * Calculates the camera icon locations.
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
124 */
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
125 void GLRenderer::calcCameraIcons()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
126 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
127 int i = 0;
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
128 const int columns = 3;
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
129 const int firstAtLastRow = countof(m_cameras) - (countof(m_cameras) % columns);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
130
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
131 for (CameraIcon& cameraIcon : m_cameraIcons)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
132 {
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
133 int row = i / columns;
1132
825dd975588d Fixed the free camera icon not showing up anymore.
Teemu Piippo <teemu@hecknology.net>
parents: 1131
diff changeset
134 int column = i % columns;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
135
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
136 // Do right-justifying on the last row.
1132
825dd975588d Fixed the free camera icon not showing up anymore.
Teemu Piippo <teemu@hecknology.net>
parents: 1131
diff changeset
137 if (i >= firstAtLastRow)
825dd975588d Fixed the free camera icon not showing up anymore.
Teemu Piippo <teemu@hecknology.net>
parents: 1131
diff changeset
138 column += columns - (countof(m_cameras) % columns);
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
139
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
140 int x1 = width() - 48 + (column * 16) - 1;
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
141 int y1 = (row * 16) + 1;
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
142
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
143 cameraIcon.sourceRect = {0, 0, 16, 16};
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
144 cameraIcon.targetRect = {x1, y1, 16, 16};
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
145 cameraIcon.hitRect = {
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
146 cameraIcon.targetRect.x(),
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
147 cameraIcon.targetRect.y(),
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
148 cameraIcon.targetRect.width() + 1,
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
149 cameraIcon.targetRect.height() + 1
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
150 };
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
151
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
152 ++i;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
153 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
154 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
155
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
156 /*
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
157 * Returns the camera currently in use.
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
158 */
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
159 GLCamera& GLRenderer::currentCamera()
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
160 {
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
161 return m_cameras[static_cast<int>(camera())];
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
162 }
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
163
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
164 /*
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
165 * Returns the camera currently in use.
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
166 */
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
167 const GLCamera& GLRenderer::currentCamera() const
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
168 {
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
169 return m_cameras[static_cast<int>(camera())];
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
170 }
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
171
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
172 /*
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
173 * Prepares the GL context for rendering.
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
174 */
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
175 void GLRenderer::initGLData()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
176 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
177 glEnable (GL_BLEND);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
178 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
179 glEnable (GL_POLYGON_OFFSET_FILL);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
180 glPolygonOffset (1.0f, 1.0f);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
181 glEnable (GL_DEPTH_TEST);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
182 glShadeModel (GL_SMOOTH);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
183 glEnable (GL_MULTISAMPLE);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
184
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
185 if (config::antiAliasedLines())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
186 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
187 glEnable (GL_LINE_SMOOTH);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
188 glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
189 }
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
190 else
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
191 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
192 glDisable (GL_LINE_SMOOTH);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
193 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
194 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
195
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
196 /*
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
197 * Returns the object currently highlighted by the cursor.
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
198 */
1247
7e1ce2fc066b converted highlighting to mvc
Santeri Piippo
parents: 1246
diff changeset
199 QPersistentModelIndex GLRenderer::objectAtCursor() const
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
200 {
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
201 return m_objectAtCursor;
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
202 }
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
203
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
204 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
205 //
738
16b63398aa1f - resetAngles still needs to request a zoom to fit or the ctrl-0 action doesn't zoom to fit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 737
diff changeset
206 void GLRenderer::needZoomToFit()
16b63398aa1f - resetAngles still needs to request a zoom to fit or the ctrl-0 action doesn't zoom to fit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 737
diff changeset
207 {
1098
0b837bed121d LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.
Teemu Piippo <teemu@hecknology.net>
parents: 1097
diff changeset
208 m_needZoomToFit = true;
738
16b63398aa1f - resetAngles still needs to request a zoom to fit or the ctrl-0 action doesn't zoom to fit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 737
diff changeset
209 }
16b63398aa1f - resetAngles still needs to request a zoom to fit or the ctrl-0 action doesn't zoom to fit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 737
diff changeset
210
16b63398aa1f - resetAngles still needs to request a zoom to fit or the ctrl-0 action doesn't zoom to fit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 737
diff changeset
211 // =============================================================================
16b63398aa1f - resetAngles still needs to request a zoom to fit or the ctrl-0 action doesn't zoom to fit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 737
diff changeset
212 //
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
213 void GLRenderer::resetAngles()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
214 {
1095
cb58a160bed3 - Use a QGenericMatrix to store the matrix, instead of a C array
Teemu Piippo <teemu@hecknology.net>
parents: 1094
diff changeset
215 if (m_initialized)
cb58a160bed3 - Use a QGenericMatrix to store the matrix, instead of a C array
Teemu Piippo <teemu@hecknology.net>
parents: 1094
diff changeset
216 {
1393
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
217 m_rotation = QQuaternion::fromAxisAndAngle({1, 0, 0}, 30);
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
218 m_rotation *= QQuaternion::fromAxisAndAngle({0, 1, 0}, 330);
1095
cb58a160bed3 - Use a QGenericMatrix to store the matrix, instead of a C array
Teemu Piippo <teemu@hecknology.net>
parents: 1094
diff changeset
219 }
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
220 currentCamera().setPanning(0, 0);
738
16b63398aa1f - resetAngles still needs to request a zoom to fit or the ctrl-0 action doesn't zoom to fit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 737
diff changeset
221 needZoomToFit();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
222 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
223
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
224 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
225 //
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
226 void GLRenderer::resetAllAngles()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
227 {
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
228 Camera oldCamera = camera();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
229
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
230 for (Camera camera : iterateEnum<Camera>())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
231 {
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
232 setCamera(camera);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
233 resetAngles();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
234 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
235
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
236 setCamera(oldCamera);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
237 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
238
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
239 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
240 //
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
241 void GLRenderer::initializeGL()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
242 {
855
e16f1587ef44 - fixed compilation on windows systems
Santeri Piippo <crimsondusk64@gmail.com>
parents: 851
diff changeset
243 initializeOpenGLFunctions();
1391
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1376
diff changeset
244
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1376
diff changeset
245 if (glGetError() != GL_NO_ERROR)
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1376
diff changeset
246 {
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1376
diff changeset
247 abort();
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1376
diff changeset
248 }
5fa4bf1fc781 added work done on cylinders
Teemu Piippo <teemu@hecknology.net>
parents: 1376
diff changeset
249
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
250 setBackground();
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
251 glLineWidth (config::lineThickness());
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
252 glLineStipple (1, 0x6666);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
253 setAutoFillBackground (false);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
254 setMouseTracking (true);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
255 setFocusPolicy (Qt::WheelFocus);
1133
47f6db5ea24d Some documentation and cleanup in GLRenderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1132
diff changeset
256 m_compiler->initialize();
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
257 initializeAxes();
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
258 initializeLighting();
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
259 m_initialized = true;
1095
cb58a160bed3 - Use a QGenericMatrix to store the matrix, instead of a C array
Teemu Piippo <teemu@hecknology.net>
parents: 1094
diff changeset
260 // Now that GL is initialized, we can reset angles.
cb58a160bed3 - Use a QGenericMatrix to store the matrix, instead of a C array
Teemu Piippo <teemu@hecknology.net>
parents: 1094
diff changeset
261 resetAllAngles();
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
262 }
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
263
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
264 void GLRenderer::initializeLighting()
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
265 {
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
266 GLfloat materialShininess[] = {5.0};
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
267 GLfloat lightPosition[] = {1.0, 1.0, 1.0, 0.0};
1248
8059668a2cf3 made lighting more subtle
Santeri Piippo
parents: 1247
diff changeset
268 GLfloat ambientLightingLevel[] = {0.5, 0.5, 0.5, 1.0};
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
269 glShadeModel(GL_SMOOTH);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
270 glMaterialfv(GL_FRONT, GL_SHININESS, materialShininess);
1248
8059668a2cf3 made lighting more subtle
Santeri Piippo
parents: 1247
diff changeset
271 glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLightingLevel);
8059668a2cf3 made lighting more subtle
Santeri Piippo
parents: 1247
diff changeset
272 glLightfv(GL_LIGHT0, GL_DIFFUSE, ambientLightingLevel);
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
273 glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
274 glEnable(GL_LIGHTING);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
275 glEnable(GL_LIGHT0);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
276 glEnable(GL_COLOR_MATERIAL);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
277 glEnable(GL_DEPTH_TEST);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
278 }
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
279
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
280 // =============================================================================
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
281 //
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
282 void GLRenderer::initializeAxes()
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
283 {
1169
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
284 freeAxes();
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
285 float axisVertexData[3][6];
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
286 float axisColorData[3][6];
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
287
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
288 auto compileAxis = [&](Axis axis, QColor color, Vertex extrema)
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
289 {
1169
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
290 axisVertexData[axis][0] = extrema[X];
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
291 axisVertexData[axis][1] = extrema[Y];
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
292 axisVertexData[axis][2] = extrema[Z];
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
293 axisVertexData[axis][3] = -extrema[X];
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
294 axisVertexData[axis][4] = -extrema[Y];
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
295 axisVertexData[axis][5] = -extrema[Z];
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
296 axisColorData[axis][0] = axisColorData[axis][3] = color.red();
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
297 axisColorData[axis][1] = axisColorData[axis][4] = color.green();
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
298 axisColorData[axis][2] = axisColorData[axis][5] = color.blue();
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
299 };
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
300
1169
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
301 compileAxis(X, {192, 96, 96}, {10000, 0, 0});
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
302 compileAxis(Y, {48, 192, 48}, {0, 10000, 0});
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
303 compileAxis(Z, {48, 112, 192}, {0, 0, 10000});
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
304
1169
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
305 glGenBuffers(1, &m_axesVbo);
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
306 glBindBuffer(GL_ARRAY_BUFFER, m_axesVbo);
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
307 glBufferData(GL_ARRAY_BUFFER, sizeof axisVertexData, axisVertexData, GL_STATIC_DRAW);
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
308 glGenBuffers(1, &m_axesColorVbo);
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
309 glBindBuffer(GL_ARRAY_BUFFER, m_axesColorVbo);
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
310 glBufferData(GL_ARRAY_BUFFER, sizeof axisColorData, axisColorData, GL_STATIC_DRAW);
3da9287b4aff Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents: 1168
diff changeset
311 glBindBuffer(GL_ARRAY_BUFFER, 0);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
312 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
313
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
314 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
315 //
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
316 void GLRenderer::setBackground()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
317 {
1061
273333700685 refactor
Teemu Piippo <teemu@hecknology.net>
parents: 1057
diff changeset
318 if (not m_isDrawingSelectionScene)
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
319 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
320 // Otherwise use the background that the user wants.
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
321 QColor color = config::backgroundColor();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
322
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
323 if (color.isValid())
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
324 {
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
325 color.setAlpha(255);
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
326 m_useDarkBackground = luma(color) < 80;
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
327 m_backgroundColor = color;
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
328 qglClearColor(color);
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
329 }
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
330 }
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
331 else
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
332 {
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
333 // The picking scene requires a black background.
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
334 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
335 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
336 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
337
1106
7541b0209057 Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents: 1105
diff changeset
338 QColor GLRenderer::backgroundColor() const
7541b0209057 Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents: 1105
diff changeset
339 {
7541b0209057 Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents: 1105
diff changeset
340 return m_backgroundColor;
7541b0209057 Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents: 1105
diff changeset
341 }
7541b0209057 Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents: 1105
diff changeset
342
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
343 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
344 //
1111
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
345 void GLRenderer::resizeGL (int width, int height)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
346 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
347 calcCameraIcons();
1111
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
348 glViewport (0, 0, width, height);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
349 glMatrixMode (GL_PROJECTION);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
350 glLoadIdentity();
1369
1e2391b78d17 added cull depth support
Teemu Piippo <teemu@hecknology.net>
parents: 1326
diff changeset
351 gluPerspective (45.0f, (double) width / (double) height, near, far);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
352 glMatrixMode (GL_MODELVIEW);
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
353
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
354 // Unfortunately Qt does not provide a resized() signal so we have to manually feed the information.
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
355 for (GLCamera& camera : m_cameras)
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
356 camera.rendererResized(width, height);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
357 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
358
1393
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
359 /*
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
360 * Pads a 3×3 matrix into a 4×4 one by adding cells from the identity matrix.
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
361 */
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
362 GLRotationMatrix padMatrix(const QMatrix3x3& stub)
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
363 {
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
364 return {
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
365 stub(0, 0), stub(0, 1), stub(0, 2), 0,
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
366 stub(1, 0), stub(1, 1), stub(1, 2), 0,
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
367 stub(2, 0), stub(2, 1), stub(2, 2), 0,
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
368 0, 0, 0, 1
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
369 };
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
370 }
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
371
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
372 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
373 //
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
374 void GLRenderer::drawGLScene()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
375 {
1098
0b837bed121d LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.
Teemu Piippo <teemu@hecknology.net>
parents: 1097
diff changeset
376 if (m_needZoomToFit)
737
e58bdb21cc54 - more elegant version of ded0a9b, do not zoom to fit in setDocument, instead zoom to fit before rendering
Santeri Piippo <crimsondusk64@gmail.com>
parents: 733
diff changeset
377 {
1098
0b837bed121d LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.
Teemu Piippo <teemu@hecknology.net>
parents: 1097
diff changeset
378 m_needZoomToFit = false;
737
e58bdb21cc54 - more elegant version of ded0a9b, do not zoom to fit in setDocument, instead zoom to fit before rendering
Santeri Piippo <crimsondusk64@gmail.com>
parents: 733
diff changeset
379 zoomAllToFit();
e58bdb21cc54 - more elegant version of ded0a9b, do not zoom to fit in setDocument, instead zoom to fit before rendering
Santeri Piippo <crimsondusk64@gmail.com>
parents: 733
diff changeset
380 }
e58bdb21cc54 - more elegant version of ded0a9b, do not zoom to fit in setDocument, instead zoom to fit before rendering
Santeri Piippo <crimsondusk64@gmail.com>
parents: 733
diff changeset
381
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
382 if (config::drawWireframe() and not m_isDrawingSelectionScene)
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
383 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
384
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
385 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
386 glEnable(GL_DEPTH_TEST);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
387
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
388 if (config::lighting() and not m_isDrawingSelectionScene)
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
389 glEnable(GL_LIGHTING);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
390 else
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
391 glDisable(GL_LIGHTING);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
392
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
393 if (camera() != Camera::Free)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
394 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
395 glMatrixMode (GL_PROJECTION);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
396 glPushMatrix();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
397 glLoadIdentity();
1237
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
398 glMultMatrixf(currentCamera().realMatrix());
1151
0eddb5bcf25b Made fixed cameras matrix-based. This simplifies some math.
Teemu Piippo <teemu@hecknology.net>
parents: 1146
diff changeset
399 glMultMatrixf(ldrawToGLAdapterMatrix);
1178
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
400 drawFixedCameraBackdrop();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
401 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
402 else
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
403 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
404 glMatrixMode(GL_MODELVIEW);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
405 glPushMatrix();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
406 glLoadIdentity();
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
407 glTranslatef(0.0f, 0.0f, -2.0f);
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
408 glTranslatef(panning (X), panning (Y), -zoom());
1393
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
409 glMultMatrixf(padMatrix(m_rotation.toRotationMatrix()).constData());
1371
b8df4748d04e automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents: 1369
diff changeset
410 glTranslatef(-this->m_compiler->modelCenter());
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
411 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
412
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
413 glEnableClientState (GL_NORMAL_ARRAY);
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
414 glEnableClientState (GL_VERTEX_ARRAY);
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
415 glEnableClientState (GL_COLOR_ARRAY);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
416
1061
273333700685 refactor
Teemu Piippo <teemu@hecknology.net>
parents: 1057
diff changeset
417 if (m_isDrawingSelectionScene)
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
418 {
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
419 drawVbos (VboClass::Triangles, VboSubclass::PickColors);
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
420 drawVbos (VboClass::Quads, VboSubclass::PickColors);
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
421 drawVbos (VboClass::Lines, VboSubclass::PickColors);
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
422 drawVbos (VboClass::ConditionalLines, VboSubclass::PickColors);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
423 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
424 else
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
425 {
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
426 if (config::bfcRedGreenView())
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
427 {
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
428 glEnable (GL_CULL_FACE);
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
429 glCullFace (GL_BACK);
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
430 drawVbos (VboClass::Triangles, VboSubclass::BfcFrontColors);
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
431 drawVbos (VboClass::Quads, VboSubclass::BfcFrontColors);
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
432 glCullFace (GL_FRONT);
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
433 drawVbos (VboClass::Triangles, VboSubclass::BfcBackColors);
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
434 drawVbos (VboClass::Quads, VboSubclass::BfcBackColors);
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
435 glDisable (GL_CULL_FACE);
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
436 }
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
437 else
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
438 {
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
439 VboSubclass colors;
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
440
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
441 if (config::randomColors())
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
442 colors = VboSubclass::RandomColors;
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
443 else
1173
6cd85b28f43b Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents: 1172
diff changeset
444 colors = VboSubclass::RegularColors;
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
445
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
446 drawVbos (VboClass::Triangles, colors);
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
447 drawVbos (VboClass::Quads, colors);
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
448 }
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
449
1173
6cd85b28f43b Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents: 1172
diff changeset
450 drawVbos (VboClass::Lines, VboSubclass::RegularColors);
1376
83dd6cbd7f1a added an ini option to disable line stipple
Teemu Piippo <teemu@hecknology.net>
parents: 1372
diff changeset
451
83dd6cbd7f1a added an ini option to disable line stipple
Teemu Piippo <teemu@hecknology.net>
parents: 1372
diff changeset
452 if (config::useLineStipple())
83dd6cbd7f1a added an ini option to disable line stipple
Teemu Piippo <teemu@hecknology.net>
parents: 1372
diff changeset
453 glEnable (GL_LINE_STIPPLE);
83dd6cbd7f1a added an ini option to disable line stipple
Teemu Piippo <teemu@hecknology.net>
parents: 1372
diff changeset
454
1173
6cd85b28f43b Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents: 1172
diff changeset
455 drawVbos (VboClass::ConditionalLines, VboSubclass::RegularColors);
722
61e2d0ca0018 - conditional lines are now rendered with stippled lines again
Santeri Piippo <crimsondusk64@gmail.com>
parents: 720
diff changeset
456 glDisable (GL_LINE_STIPPLE);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
457
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
458 if (config::drawAxes())
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
459 {
1120
c3f07620494e Axes are not rendered with normals so the normals client state has to be disabled when drawing them.
Teemu Piippo <teemu@hecknology.net>
parents: 1119
diff changeset
460 glDisableClientState (GL_NORMAL_ARRAY);
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
461 glBindBuffer (GL_ARRAY_BUFFER, m_axesVbo);
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
462 glVertexPointer (3, GL_FLOAT, 0, NULL);
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
463 glBindBuffer (GL_ARRAY_BUFFER, m_axesVbo);
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
464 glColorPointer (3, GL_FLOAT, 0, NULL);
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
465 glDrawArrays (GL_LINES, 0, 6);
1120
c3f07620494e Axes are not rendered with normals so the normals client state has to be disabled when drawing them.
Teemu Piippo <teemu@hecknology.net>
parents: 1119
diff changeset
466 glEnableClientState (GL_NORMAL_ARRAY);
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 859
diff changeset
467 CHECK_GL_ERROR();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
468 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
469 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
470
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
471 glPopMatrix();
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
472 glBindBuffer (GL_ARRAY_BUFFER, 0);
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
473 glDisableClientState (GL_VERTEX_ARRAY);
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
474 glDisableClientState (GL_COLOR_ARRAY);
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
475 glDisableClientState (GL_NORMAL_ARRAY);
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 859
diff changeset
476 CHECK_GL_ERROR();
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
477 glDisable (GL_CULL_FACE);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
478 glMatrixMode (GL_MODELVIEW);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
479 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
480 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
481
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
482 /*
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
483 * Draws a set of VBOs onto the scene. Renders surfaces with appropriate normals and colors.
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
484 *
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
485 * Parameters:
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
486 * - surface determines what kind of surface to draw (triangles, quadrilaterals, edges or conditional edges)
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
487 * - colors determines what VBO subclass to use for colors
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
488 */
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
489 void GLRenderer::drawVbos(VboClass surface, VboSubclass colors)
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
490 {
815
efe34366e56a - added ability to filter out surfaces/edgelines/condlines from the viewport
Santeri Piippo <crimsondusk64@gmail.com>
parents: 795
diff changeset
491 // Filter this through some configuration options
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
492 if ((isOneOf(surface, VboClass::Quads, VboClass::Triangles) and config::drawSurfaces() == false)
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
493 or (surface == VboClass::Lines and config::drawEdgeLines() == false)
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
494 or (surface == VboClass::ConditionalLines and config::drawConditionalLines() == false))
815
efe34366e56a - added ability to filter out surfaces/edgelines/condlines from the viewport
Santeri Piippo <crimsondusk64@gmail.com>
parents: 795
diff changeset
495 {
efe34366e56a - added ability to filter out surfaces/edgelines/condlines from the viewport
Santeri Piippo <crimsondusk64@gmail.com>
parents: 795
diff changeset
496 return;
efe34366e56a - added ability to filter out surfaces/edgelines/condlines from the viewport
Santeri Piippo <crimsondusk64@gmail.com>
parents: 795
diff changeset
497 }
efe34366e56a - added ability to filter out surfaces/edgelines/condlines from the viewport
Santeri Piippo <crimsondusk64@gmail.com>
parents: 795
diff changeset
498
1167
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
499 GLenum type;
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
500
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
501 switch (surface)
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
502 {
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
503 case VboClass::_End:
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
504 case VboClass::Lines:
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
505 case VboClass::ConditionalLines:
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
506 type = GL_LINES;
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
507 break;
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
508
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
509 case VboClass::Triangles:
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
510 type = GL_TRIANGLES;
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
511 break;
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
512
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
513 case VboClass::Quads:
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
514 type = GL_QUADS;
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
515 break;
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
516 }
a348cee365e3 GLRenderer::drawVbos no longer needs to be told the GL type
Teemu Piippo <teemu@hecknology.net>
parents: 1161
diff changeset
517
1237
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
518 VboSubclass normals;
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
519
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
520 if (colors != VboSubclass::BfcBackColors)
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
521 normals = VboSubclass::Normals;
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
522 else
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
523 normals = VboSubclass::InvertedNormals;
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
524
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
525 int surfaceVboNumber = m_compiler->vboNumber(surface, VboSubclass::Surfaces);
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
526 int colorVboNumber = m_compiler->vboNumber(surface, colors);
1237
40bb00d82e2b moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents: 1235
diff changeset
527 int normalVboNumber = m_compiler->vboNumber(surface, normals);
1173
6cd85b28f43b Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents: 1172
diff changeset
528 m_compiler->prepareVBO(surfaceVboNumber);
6cd85b28f43b Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents: 1172
diff changeset
529 m_compiler->prepareVBO(colorVboNumber);
6cd85b28f43b Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents: 1172
diff changeset
530 m_compiler->prepareVBO(normalVboNumber);
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
531 GLuint surfaceVbo = m_compiler->vbo(surfaceVboNumber);
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
532 GLuint colorVbo = m_compiler->vbo(colorVboNumber);
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
533 GLuint normalVbo = m_compiler->vbo(normalVboNumber);
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
534 GLsizei count = m_compiler->vboSize(surfaceVboNumber) / 3;
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
535
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
536 if (count > 0)
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
537 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
538 glBindBuffer(GL_ARRAY_BUFFER, surfaceVbo);
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
539 glVertexPointer(3, GL_FLOAT, 0, nullptr);
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 859
diff changeset
540 CHECK_GL_ERROR();
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
541 glBindBuffer(GL_ARRAY_BUFFER, colorVbo);
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
542 glColorPointer(4, GL_FLOAT, 0, nullptr);
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 859
diff changeset
543 CHECK_GL_ERROR();
1119
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
544 glBindBuffer(GL_ARRAY_BUFFER, normalVbo);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
545 glNormalPointer(GL_FLOAT, 0, nullptr);
749fdf61b5cd Implemented lighting. Yay! Unfortunately, faces that show up the wrong way around in BFC red/green mode also show up with inverted lighting here.
Teemu Piippo <teemu@hecknology.net>
parents: 1116
diff changeset
546 CHECK_GL_ERROR();
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
547 glDrawArrays(type, 0, count);
861
83426c5fa732 - major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents: 859
diff changeset
548 CHECK_GL_ERROR();
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
549 }
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
550 }
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
551
823
1a2f593f0c02 - saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents: 821
diff changeset
552 QPen GLRenderer::textPen() const
1a2f593f0c02 - saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents: 821
diff changeset
553 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
554 return {m_useDarkBackground ? Qt::white : Qt::black};
823
1a2f593f0c02 - saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents: 821
diff changeset
555 }
1a2f593f0c02 - saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents: 821
diff changeset
556
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
557 bool GLRenderer::freeCameraAllowed() const
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
558 {
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
559 return true;
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
560 }
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
561
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
562 void GLRenderer::paintEvent(QPaintEvent*)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
563 {
1013
fa025ba493d8 Cleanup miscallenous.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1012
diff changeset
564 makeCurrent();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
565 initGLData();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
566 drawGLScene();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
567
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
568 if (isDrawingSelectionScene())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
569 return;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
570
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
571 QPainter painter {this};
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
572 painter.setRenderHint(QPainter::Antialiasing);
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
573 overpaint(painter);
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
574 }
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
575
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
576 void GLRenderer::overpaint(QPainter &painter)
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
577 {
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
578 // Draw a background for the selected camera
1106
7541b0209057 Moved more methods only used by canvas code from GLRenderer to Canvas. Thin border pen is now a static constant.
Teemu Piippo <teemu@hecknology.net>
parents: 1105
diff changeset
579 painter.setPen(thinBorderPen);
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
580 painter.setBrush(QBrush {QColor {0, 128, 160, 128}});
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
581 painter.drawRect(m_cameraIcons[static_cast<int>(camera())].hitRect);
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
582
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
583 // Draw the camera icons
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
584 for (const CameraIcon& info : m_cameraIcons)
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
585 {
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
586 // Don't draw the free camera icon when we can't use the free camera
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
587 if (info.camera == Camera::Free and not freeCameraAllowed())
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
588 continue;
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
589
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
590 painter.drawPixmap(info.targetRect, info.image, info.sourceRect);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
591 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
592
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
593 // Draw a label for the current camera in the bottom left corner
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
594 {
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
595 QFontMetrics metrics {QFont {}};
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
596 int margin = 4;
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
597 painter.setPen(textPen());
1130
17f92eb2a30c Moved camera names to GLCamera, other adjustments
Teemu Piippo <teemu@hecknology.net>
parents: 1129
diff changeset
598 painter.drawText(QPoint {margin, height() - margin - metrics.descent()}, currentCamera().name());
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
599 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
600 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
601
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
602 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
603 //
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
604 void GLRenderer::mouseReleaseEvent(QMouseEvent* event)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
605 {
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
606 bool wasLeft = (m_lastButtons & Qt::LeftButton) and not (event->buttons() & Qt::LeftButton);
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
607 m_panning = false;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
608
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
609 // Check if we selected a camera icon
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
610 if (wasLeft and not mouseHasMoved())
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
611 {
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
612 for (CameraIcon& info : m_cameraIcons)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
613 {
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
614 if (info.targetRect.contains (event->pos()))
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
615 {
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
616 setCamera (info.camera);
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
617 break;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
618 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
619 }
827
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
620 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
621
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
622 update();
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
623 m_totalMouseMove = 0;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
624 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
625
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
626 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
627 //
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
628 void GLRenderer::mousePressEvent(QMouseEvent* event)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
629 {
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
630 m_lastButtons = event->buttons();
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
631 m_totalMouseMove = 0;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
632 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
633
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
634 // =============================================================================
825
f7649c9bfd9a - more work on edit modes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 824
diff changeset
635 //
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
636 void GLRenderer::mouseMoveEvent(QMouseEvent* event)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
637 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
638 int xMove = event->x() - m_mousePosition.x();
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
639 int yMove = event->y() - m_mousePosition.y();
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
640 m_totalMouseMove += qAbs(xMove) + qAbs(yMove);
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
641 m_isCameraMoving = false;
828
7dd8f19159f7 - and now it works fine too
Santeri Piippo <crimsondusk64@gmail.com>
parents: 827
diff changeset
642
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
643 bool left = event->buttons() & Qt::LeftButton;
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
644 bool mid = event->buttons() & Qt::MidButton;
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
645 bool shift = event->modifiers() & Qt::ShiftModifier;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
646
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
647 if (mid or (left and shift))
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
648 {
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
649 currentCamera().pan(xMove, yMove);
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
650 m_panning = true;
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
651 m_isCameraMoving = true;
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
652 }
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
653 else if (left and camera() == Camera::Free and (xMove != 0 or yMove != 0))
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
654 {
1393
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
655 QQuaternion versor = QQuaternion::fromAxisAndAngle(yMove, xMove, 0, 0.6 * hypot(xMove, yMove));
f0fe7ea82b81 changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents: 1391
diff changeset
656 m_rotation = versor * m_rotation;
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
657 m_isCameraMoving = true;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
658 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
659
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
660 // Start the tool tip timer
1131
03aa7091cb4a Simplified camera tooltip code.
Teemu Piippo <teemu@hecknology.net>
parents: 1130
diff changeset
661 m_toolTipTimer->start (500);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
662
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
663 // Update 2d position
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
664 m_mousePosition = event->pos();
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
665 m_globalpos = event->globalPos();
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
666 m_mousePositionF = event->localPos();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
667
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
668 highlightCursorObject();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
669 update();
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
670 event->accept();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
671 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
672
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
673 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
674 //
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
675 void GLRenderer::keyPressEvent(QKeyEvent* event)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
676 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
677 m_currentKeyboardModifiers = event->modifiers();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
678 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
679
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
680 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
681 //
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
682 void GLRenderer::keyReleaseEvent(QKeyEvent* event)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
683 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
684 m_currentKeyboardModifiers = event->modifiers();
875
ce8e9b37d44f - finished line loop mode
Teemu Piippo <crimsondusk64@gmail.com>
parents: 869
diff changeset
685 update();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
686 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
687
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
688 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
689 //
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
690 void GLRenderer::wheelEvent(QWheelEvent* ev)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
691 {
1013
fa025ba493d8 Cleanup miscallenous.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1012
diff changeset
692 makeCurrent();
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
693 currentCamera().zoomNotch(ev->delta() > 0);
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
694 m_isCameraMoving = true;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
695 update();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
696 ev->accept();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
697 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
698
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
699 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
700 //
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
701 void GLRenderer::leaveEvent(QEvent*)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
702 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
703 m_toolTipTimer->stop();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
704 update();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
705 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
706
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
707 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
708 //
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
709 void GLRenderer::setCamera(Camera camera)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
710 {
823
1a2f593f0c02 - saving work done on edit mode revamp
Santeri Piippo <crimsondusk64@gmail.com>
parents: 821
diff changeset
711 // The edit mode may forbid the free camera.
1123
15e46ea3151f Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents: 1121
diff changeset
712 if (freeCameraAllowed() or camera != Camera::Free)
1023
9450ac3cd930 Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1017
diff changeset
713 {
9450ac3cd930 Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1017
diff changeset
714 m_camera = camera;
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
715 config::setCamera(static_cast<int>(camera));
1023
9450ac3cd930 Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1017
diff changeset
716 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
717 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
718
1110
ec3ee7da7806 Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents: 1109
diff changeset
719 /*
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
720 * Resolves a pixel pointer to an RGB color.
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
721 * pixel[0..2] must be valid.
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
722 */
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
723 static QRgb colorFromPixel(uint8_t* pixel)
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
724 {
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
725 return pixel[0] << 16 | pixel[1] << 8 | pixel[2] | 0xff000000;
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
726 }
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
727
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
728 /*
1110
ec3ee7da7806 Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents: 1109
diff changeset
729 * Returns the set of objects found in the specified pixel area.
ec3ee7da7806 Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents: 1109
diff changeset
730 */
1251
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
731 QItemSelection GLRenderer::pick(const QRect& range)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
732 {
1013
fa025ba493d8 Cleanup miscallenous.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1012
diff changeset
733 makeCurrent();
1251
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
734 QItemSelection result;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
735
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
736 // Paint the picking scene
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
737 setPicking(true);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
738 drawGLScene();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
739
827
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
740 int x0 = range.left();
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
741 int y0 = range.top();
828
7dd8f19159f7 - and now it works fine too
Santeri Piippo <crimsondusk64@gmail.com>
parents: 827
diff changeset
742 int x1 = x0 + range.width();
7dd8f19159f7 - and now it works fine too
Santeri Piippo <crimsondusk64@gmail.com>
parents: 827
diff changeset
743 int y1 = y0 + range.height();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
744
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
745 // Clamp the values to ensure they're within bounds
966
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 962
diff changeset
746 x0 = qMax (0, x0);
a834e43a57da Replaced Min/Max/Clamp/Abs with use of Qt versions of them.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 962
diff changeset
747 y0 = qMax (0, y0);
1111
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
748 x1 = qMin (x1, width());
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
749 y1 = qMin (y1, height());
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
750 const int areawidth = (x1 - x0);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
751 const int areaheight = (y1 - y0);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
752 const qint32 numpixels = areawidth * areaheight;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
753
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
754 // Allocate space for the pixel data.
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
755 QVector<unsigned char> pixelData;
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
756 pixelData.resize(4 * numpixels);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
757
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
758 // Read pixels from the color buffer.
1111
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
759 glReadPixels(x0, height() - y1, areawidth, areaheight, GL_RGBA, GL_UNSIGNED_BYTE, pixelData.data());
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
760
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
761 QSet<QRgb> pixelColors;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
762
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
763 // Go through each pixel read and add them to the selection.
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
764 // Each pixel maps to an LDObject injectively.
753
Santeri Piippo <crimsondusk64@gmail.com>
parents: 752
diff changeset
765 // Note: black is background, those indices are skipped.
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
766 for (int i : ::range(0, 4, pixelData.size() - 4))
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
767 {
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
768 QRgb color = colorFromPixel(&pixelData[i]);
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
769
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
770 if (color != BlackRgb)
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
771 pixelColors.insert(color);
752
b80ccc2a24e4 - optimized picking, black is background now in pick scenes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 742
diff changeset
772 }
b80ccc2a24e4 - optimized picking, black is background now in pick scenes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 742
diff changeset
773
1057
3c7782ec3753 Fixed additive range selection not working properly.
Teemu Piippo <teemu@hecknology.net>
parents: 1056
diff changeset
774 // For each index read, resolve the LDObject behind it and add it to the selection.
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
775 for (QRgb color : pixelColors)
752
b80ccc2a24e4 - optimized picking, black is background now in pick scenes
Santeri Piippo <crimsondusk64@gmail.com>
parents: 742
diff changeset
776 {
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
777 QModelIndex index = m_model->objectByPickingColor(color);
958
1dc890c73e01 Removed all asserts from the code. Removed assert handling and the bomb box dialog.
Teemu Piippo <crimsondusk64@gmail.com>
parents: 952
diff changeset
778
1251
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
779 if (index.isValid())
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
780 result.select(index, index);
1057
3c7782ec3753 Fixed additive range selection not working properly.
Teemu Piippo <teemu@hecknology.net>
parents: 1056
diff changeset
781 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
782
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
783 setPicking(false);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
784 repaint();
1251
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
785 return result;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
786 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
787
1110
ec3ee7da7806 Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents: 1109
diff changeset
788 /*
ec3ee7da7806 Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents: 1109
diff changeset
789 * Simpler version of GLRenderer::pick which simply picks whatever object on the cursor
ec3ee7da7806 Moved more business logic out of GLRenderer into Canvas. GLRenderer::pick(const QRange&) now returns a set of LDObjects without modifying them. Replaced the GLRenderer::pick(int, int) overload with GLRenderer::pickOneObject.
Teemu Piippo <teemu@hecknology.net>
parents: 1109
diff changeset
790 */
1251
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
791 QModelIndex GLRenderer::pick(int mouseX, int mouseY)
818
748ba8818af8 - added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents: 816
diff changeset
792 {
1013
fa025ba493d8 Cleanup miscallenous.cpp/.h
Teemu Piippo <crimsondusk64@gmail.com>
parents: 1012
diff changeset
793 makeCurrent();
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
794 setPicking(true);
818
748ba8818af8 - added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents: 816
diff changeset
795 drawGLScene();
1251
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
796 unsigned char pixel[4];
1111
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
797 glReadPixels(mouseX, height() - mouseY, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel);
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
798 QModelIndex result = m_model->objectByPickingColor(colorFromPixel(pixel));
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
799 setPicking(false);
818
748ba8818af8 - added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents: 816
diff changeset
800 repaint();
1251
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
801 return result;
818
748ba8818af8 - added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents: 816
diff changeset
802 }
748ba8818af8 - added the magic wand tool
Santeri Piippo <crimsondusk64@gmail.com>
parents: 816
diff changeset
803
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
804 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
805 //
1170
2045a395213a Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents: 1169
diff changeset
806 void GLRenderer::setPicking(bool picking)
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
807 {
1170
2045a395213a Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents: 1169
diff changeset
808 m_isDrawingSelectionScene = picking;
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
809 setBackground();
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
810
1061
273333700685 refactor
Teemu Piippo <teemu@hecknology.net>
parents: 1057
diff changeset
811 if (m_isDrawingSelectionScene)
772
e117509e1b51 - make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight
Santeri Piippo <crimsondusk64@gmail.com>
parents: 768
diff changeset
812 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
813 glDisable(GL_DITHER);
772
e117509e1b51 - make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight
Santeri Piippo <crimsondusk64@gmail.com>
parents: 768
diff changeset
814
e117509e1b51 - make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight
Santeri Piippo <crimsondusk64@gmail.com>
parents: 768
diff changeset
815 // Use particularly thick lines while picking ease up selecting lines.
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
816 glLineWidth(qMax<double>(config::lineThickness(), 6.5));
772
e117509e1b51 - make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight
Santeri Piippo <crimsondusk64@gmail.com>
parents: 768
diff changeset
817 }
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
818 else
772
e117509e1b51 - make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight
Santeri Piippo <crimsondusk64@gmail.com>
parents: 768
diff changeset
819 {
1056
27b7991b3bea Cleanup in GL renderer...
Teemu Piippo <teemu@hecknology.net>
parents: 1049
diff changeset
820 glEnable(GL_DITHER);
772
e117509e1b51 - make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight
Santeri Piippo <crimsondusk64@gmail.com>
parents: 768
diff changeset
821
e117509e1b51 - make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight
Santeri Piippo <crimsondusk64@gmail.com>
parents: 768
diff changeset
822 // Restore line thickness
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
823 glLineWidth(config::lineThickness());
772
e117509e1b51 - make pick scenes always use particularly thick lines so that the line picking behavior is relayed to the mouse-over highlight
Santeri Piippo <crimsondusk64@gmail.com>
parents: 768
diff changeset
824 }
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
825 }
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
826
1171
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
827 /*
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
828 * Returns an image containing the current render of the scene.
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
829 */
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
830 QImage GLRenderer::screenCapture()
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
831 {
1171
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
832 // Read the current render to a buffer of pixels. We use RGBA format even though the image should be fully opaque at all times.
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
833 // This is because apparently GL_RGBA/GL_UNSIGNED_BYTE is the only setting pair that is guaranteed to actually work!
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
834 // ref: https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glReadPixels.xml
1172
3defab8cfd93 Changed QByteArray to QVector to avoid that ugly reinterpret_cast.
Teemu Piippo <teemu@hecknology.net>
parents: 1171
diff changeset
835 QVector<unsigned char> pixelData;
1171
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
836 pixelData.resize(4 * width() * height());
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
837 glReadPixels(0, 0, width(), height(), GL_RGBA, GL_UNSIGNED_BYTE, pixelData.data());
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
838
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
839 // Prepare the image and return it. It appears that GL and Qt formats have red and blue swapped and the Y axis flipped.
1172
3defab8cfd93 Changed QByteArray to QVector to avoid that ugly reinterpret_cast.
Teemu Piippo <teemu@hecknology.net>
parents: 1171
diff changeset
840 QImage image {pixelData.constData(), width(), height(), QImage::Format_ARGB32};
1171
430ffa371d2a Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents: 1170
diff changeset
841 return image.rgbSwapped().mirrored();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
842 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
843
1131
03aa7091cb4a Simplified camera tooltip code.
Teemu Piippo <teemu@hecknology.net>
parents: 1130
diff changeset
844 /*
03aa7091cb4a Simplified camera tooltip code.
Teemu Piippo <teemu@hecknology.net>
parents: 1130
diff changeset
845 * Show a tooltip if the cursor is currently hovering over a camera icon.
03aa7091cb4a Simplified camera tooltip code.
Teemu Piippo <teemu@hecknology.net>
parents: 1130
diff changeset
846 */
03aa7091cb4a Simplified camera tooltip code.
Teemu Piippo <teemu@hecknology.net>
parents: 1130
diff changeset
847 void GLRenderer::showCameraIconTooltip()
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
848 {
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
849 for (CameraIcon & icon : m_cameraIcons)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
850 {
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
851 if (icon.targetRect.contains (m_mousePosition))
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
852 {
1131
03aa7091cb4a Simplified camera tooltip code.
Teemu Piippo <teemu@hecknology.net>
parents: 1130
diff changeset
853 QToolTip::showText(m_globalpos, m_cameras[static_cast<int>(icon.camera)].name());
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
854 update();
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
855 break;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
856 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
857 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
858 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
859
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
860 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
861 //
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
862 void GLRenderer::zoomToFit()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
863 {
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
864 currentCamera().setZoom(30.0f);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
865 bool lastfilled = false;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
866 bool firstrun = true;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
867 bool inward = true;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
868 int runaway = 50;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
869
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
870 // Use the pick list while drawing the scene, this way we can tell whether borders
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
871 // are background or not.
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
872 setPicking (true);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
873
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
874 while (--runaway)
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
875 {
840
d077dd19bf9a - changed `&&` and `||` operators to their named variants `and` and `or`
Teemu Piippo <crimsondusk64@gmail.com>
parents: 828
diff changeset
876 if (zoom() > 10000.0 or zoom() < 0.0)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
877 {
901
6e89eaa1df70 - zoom-to-fit now works.. better than before
Teemu Piippo <crimsondusk64@gmail.com>
parents: 897
diff changeset
878 // Nothing to draw if we get here.
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
879 currentCamera().setZoom(30.0);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
880 break;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
881 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
882
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
883 currentCamera().zoomNotch(inward);
1111
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
884 QVector<unsigned char> capture (4 * width() * height());
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
885 drawGLScene();
1111
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
886 glReadPixels (0, 0, width(), height(), GL_RGBA, GL_UNSIGNED_BYTE, capture.data());
471572db2fe1 Replaced GLRenderer::m_width and GLRenderer::m_height with width() and height() calls.
Teemu Piippo <teemu@hecknology.net>
parents: 1110
diff changeset
887 QImage image (capture.constData(), width(), height(), QImage::Format_ARGB32);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
888 bool filled = false;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
889
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
890 // Check the top and bottom rows
901
6e89eaa1df70 - zoom-to-fit now works.. better than before
Teemu Piippo <crimsondusk64@gmail.com>
parents: 897
diff changeset
891 for (int i = 0; i < image.width(); ++i)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
892 {
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
893 if (image.pixel (i, 0) != BlackRgb or image.pixel (i, height() - 1) != BlackRgb)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
894 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
895 filled = true;
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
896 break;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
897 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
898 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
899
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
900 // Left and right edges
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
901 if (filled == false)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
902 {
901
6e89eaa1df70 - zoom-to-fit now works.. better than before
Teemu Piippo <crimsondusk64@gmail.com>
parents: 897
diff changeset
903 for (int i = 0; i < image.height(); ++i)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
904 {
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
905 if (image.pixel (0, i) != BlackRgb or image.pixel (width() - 1, i) != BlackRgb)
706
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
906 {
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
907 filled = true;
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
908 break;
d79083b9f74d Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
909 }
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
910 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
911 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
912
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
913 if (firstrun)
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
914 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
915 // If this is the first run, we don't know enough to determine
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
916 // whether the zoom was to fit, so we mark in our knowledge so
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
917 // far and start over.
662
2f1bd9112408 - use the keyword 'not' in place of the exclamation mark for operator!, this is clearer. also converted uses of '== false' to this.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
918 inward = not filled;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
919 firstrun = false;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
920 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
921 else
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
922 {
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
923 // If this run filled the screen and the last one did not, the
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
924 // last run had ideal zoom - zoom a bit back and we should reach it.
840
d077dd19bf9a - changed `&&` and `||` operators to their named variants `and` and `or`
Teemu Piippo <crimsondusk64@gmail.com>
parents: 828
diff changeset
925 if (filled and not lastfilled)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
926 {
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
927 currentCamera().zoomNotch(false);
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
928 break;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
929 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
930
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
931 // If this run did not fill the screen and the last one did, we've
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
932 // now reached ideal zoom so we're done here.
840
d077dd19bf9a - changed `&&` and `||` operators to their named variants `and` and `or`
Teemu Piippo <crimsondusk64@gmail.com>
parents: 828
diff changeset
933 if (not filled and lastfilled)
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
934 break;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
935
662
2f1bd9112408 - use the keyword 'not' in place of the exclamation mark for operator!, this is clearer. also converted uses of '== false' to this.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 655
diff changeset
936 inward = not filled;
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
937 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
938
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
939 lastfilled = filled;
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
940 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
941
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
942 setPicking (false);
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
943 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
944
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
945 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
946 //
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
947 void GLRenderer::zoomAllToFit()
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
948 {
901
6e89eaa1df70 - zoom-to-fit now works.. better than before
Teemu Piippo <crimsondusk64@gmail.com>
parents: 897
diff changeset
949 zoomToFit();
655
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
950 }
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
951
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
952 // =============================================================================
b376645315ab - renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
953 //
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
954 void GLRenderer::highlightCursorObject()
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
955 {
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
956 if (not config::highlightObjectBelowCursor() and not objectAtCursor().isValid())
760
e4e585f464b3 - made the mouse-hover object highlight togglable from configuration
Santeri Piippo <crimsondusk64@gmail.com>
parents: 759
diff changeset
957 return;
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
958
1247
7e1ce2fc066b converted highlighting to mvc
Santeri Piippo
parents: 1246
diff changeset
959 QModelIndex newIndex;
7e1ce2fc066b converted highlighting to mvc
Santeri Piippo
parents: 1246
diff changeset
960 QModelIndex oldIndex = m_objectAtCursor;
760
e4e585f464b3 - made the mouse-hover object highlight togglable from configuration
Santeri Piippo <crimsondusk64@gmail.com>
parents: 759
diff changeset
961
1323
05b3e173c900 Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents: 1319
diff changeset
962 if (not m_isCameraMoving and config::highlightObjectBelowCursor())
760
e4e585f464b3 - made the mouse-hover object highlight togglable from configuration
Santeri Piippo <crimsondusk64@gmail.com>
parents: 759
diff changeset
963 {
e4e585f464b3 - made the mouse-hover object highlight togglable from configuration
Santeri Piippo <crimsondusk64@gmail.com>
parents: 759
diff changeset
964 setPicking (true);
e4e585f464b3 - made the mouse-hover object highlight togglable from configuration
Santeri Piippo <crimsondusk64@gmail.com>
parents: 759
diff changeset
965 drawGLScene();
e4e585f464b3 - made the mouse-hover object highlight togglable from configuration
Santeri Piippo <crimsondusk64@gmail.com>
parents: 759
diff changeset
966 setPicking (false);
e4e585f464b3 - made the mouse-hover object highlight togglable from configuration
Santeri Piippo <crimsondusk64@gmail.com>
parents: 759
diff changeset
967 unsigned char pixel[4];
1278
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
968 glReadPixels(
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
969 m_mousePosition.x(),
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
970 height() - m_mousePosition.y(),
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
971 1,
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
972 1,
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
973 GL_RGBA,
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
974 GL_UNSIGNED_BYTE,
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
975 &pixel[0]
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
976 );
6e1ea24e5a5e moved LDObject indices from a global array into Model
Santeri Piippo
parents: 1251
diff changeset
977 newIndex = model()->objectByPickingColor(colorFromPixel(pixel));
760
e4e585f464b3 - made the mouse-hover object highlight togglable from configuration
Santeri Piippo <crimsondusk64@gmail.com>
parents: 759
diff changeset
978 }
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
979
1247
7e1ce2fc066b converted highlighting to mvc
Santeri Piippo
parents: 1246
diff changeset
980 if (newIndex != oldIndex)
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
981 {
1247
7e1ce2fc066b converted highlighting to mvc
Santeri Piippo
parents: 1246
diff changeset
982 m_objectAtCursor = newIndex;
7e1ce2fc066b converted highlighting to mvc
Santeri Piippo
parents: 1246
diff changeset
983 emit objectHighlightingChanged(oldIndex, newIndex);
759
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
984 }
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
985
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
986 update();
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
987 }
038985b4a154 - added a selection hover effect to the renderer. selecting objects just became a lot more convenient...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 757
diff changeset
988
827
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
989 bool GLRenderer::mouseHasMoved() const
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
990 {
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
991 return m_totalMouseMove >= 10;
827
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
992 }
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
993
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
994 QPoint const& GLRenderer::mousePosition() const
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
995 {
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
996 return m_mousePosition;
82469b40567e - now compiles
Santeri Piippo <crimsondusk64@gmail.com>
parents: 825
diff changeset
997 }
855
e16f1587ef44 - fixed compilation on windows systems
Santeri Piippo <crimsondusk64@gmail.com>
parents: 851
diff changeset
998
869
7184f3bae695 - circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
999 QPointF const& GLRenderer::mousePositionF() const
7184f3bae695 - circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
1000 {
7184f3bae695 - circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
1001 return m_mousePositionF;
7184f3bae695 - circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
1002 }
7184f3bae695 - circle tool is now able to rotate the partial circular primitives spawned
Teemu Piippo <crimsondusk64@gmail.com>
parents: 866
diff changeset
1003
897
ef9e4469975a - pressing ctrl while drawing now locks the draw to cardinal directions
Teemu Piippo <crimsondusk64@gmail.com>
parents: 882
diff changeset
1004 Qt::KeyboardModifiers GLRenderer::keyboardModifiers() const
ef9e4469975a - pressing ctrl while drawing now locks the draw to cardinal directions
Teemu Piippo <crimsondusk64@gmail.com>
parents: 882
diff changeset
1005 {
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1006 return m_currentKeyboardModifiers;
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1007 }
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1008
1033
32153a1dbb15 - Refactoring...
Teemu Piippo <teemu@compsta2.com>
parents: 1032
diff changeset
1009 Camera GLRenderer::camera() const
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1010 {
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1011 return m_camera;
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1012 }
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1013
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1014 double GLRenderer::panning (Axis ax) const
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1015 {
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
1016 return (ax == X) ? currentCamera().panningX() : currentCamera().panningY();
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1017 }
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1018
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
1019 double GLRenderer::zoom()
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1020 {
1129
2b20261dc511 Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents: 1125
diff changeset
1021 return currentCamera().zoom();
986
525921eae58c Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents: 985
diff changeset
1022 }
1104
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1023
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1024 bool GLRenderer::isDrawingSelectionScene() const
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1025 {
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1026 return m_isDrawingSelectionScene;
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1027 }
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1028
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1029 Qt::MouseButtons GLRenderer::lastButtons() const
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1030 {
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1031 return m_lastButtons;
edddb9b0db9e Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents: 1103
diff changeset
1032 }
1108
90d6f4b7782e Moved more editing-related methods to Canvas.
Teemu Piippo <teemu@hecknology.net>
parents: 1107
diff changeset
1033
1113
5f3139c802bf Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents: 1111
diff changeset
1034 const Model* GLRenderer::model() const
5f3139c802bf Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents: 1111
diff changeset
1035 {
5f3139c802bf Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents: 1111
diff changeset
1036 return m_model;
1125
d8f94e56d42e Moved the definitions of all configuration options into a new text file and made the configuration collector read that.
Teemu Piippo <teemu@hecknology.net>
parents: 1123
diff changeset
1037 }
1178
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
1038
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
1039 /*
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
1040 * This virtual function lets derivative classes render something to the fixed camera
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
1041 * before the main brick is rendered.
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
1042 */
3a88e7a60b63 At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents: 1177
diff changeset
1043 void GLRenderer::drawFixedCameraBackdrop() {}
1244
68e126e8c629 begin model rework
Santeri Piippo
parents: 1238
diff changeset
1044
1251
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
1045 QItemSelectionModel* GLRenderer::selectionModel() const
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
1046 {
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
1047 return m_compiler->selectionModel();
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
1048 }
e75cc5bff076 Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents: 1248
diff changeset
1049
1246
0054d13ed614 used mvc selection models
Santeri Piippo
parents: 1244
diff changeset
1050 void GLRenderer::setSelectionModel(QItemSelectionModel* selectionModel)
1244
68e126e8c629 begin model rework
Santeri Piippo
parents: 1238
diff changeset
1051 {
1246
0054d13ed614 used mvc selection models
Santeri Piippo
parents: 1244
diff changeset
1052 this->m_compiler->setSelectionModel(selectionModel);
1244
68e126e8c629 begin model rework
Santeri Piippo
parents: 1238
diff changeset
1053 }
1306
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1278
diff changeset
1054
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1278
diff changeset
1055 void GLRenderer::fullUpdate()
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1278
diff changeset
1056 {
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1278
diff changeset
1057 this->m_compiler->fullUpdate();
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1278
diff changeset
1058 update();
be85306198a2 red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents: 1278
diff changeset
1059 }

mercurial