Tue, 03 Apr 2018 17:37:33 +0300
refactor
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
1326 | 3 | * Copyright (C) 2013 - 2018 Teemu Piippo |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | * |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | * (at your option) any later version. |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | * |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | * GNU General Public License for more details. |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | * |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | */ |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | #define GL_GLEXT_PROTOTYPES |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
20 | #include <GL/glu.h> |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
21 | #include <GL/glext.h> |
1146
bb728c124d47
Renamed glCompiler.cpp → glcompiler.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1139
diff
changeset
|
22 | #include "glcompiler.h" |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
23 | #include "guiutilities.h" |
1012 | 24 | #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
|
25 | #include "grid.h" |
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
26 | #include "algorithms/invert.h" |
1319 | 27 | #include "generics/ring.h" |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
28 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
29 | void checkGLError(HierarchyElement* element, QString file, int line) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
31 | struct ErrorInfo |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
32 | { |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
33 | GLenum value; |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
34 | QString text; |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
35 | }; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
36 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
37 | static const ErrorInfo knownErrors[] = |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
38 | { |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
39 | { GL_NO_ERROR, "No error" }, |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
40 | { GL_INVALID_ENUM, "Unacceptable enumerator passed" }, |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
41 | { GL_INVALID_VALUE, "Numeric argument out of range" }, |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
42 | { GL_INVALID_OPERATION, "The operation is not allowed to be done in this state" }, |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
43 | { GL_INVALID_FRAMEBUFFER_OPERATION, "Framebuffer object is not complete"}, |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
44 | { GL_OUT_OF_MEMORY, "Out of memory" }, |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
45 | { GL_STACK_UNDERFLOW, "The operation would have caused an underflow" }, |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
46 | { GL_STACK_OVERFLOW, "The operation would have caused an overflow" }, |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
47 | }; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
48 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
49 | GLenum errorNumber = glGetError(); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
50 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
51 | if (errorNumber != GL_NO_ERROR) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
52 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
53 | QString errorMessage; |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
54 | |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
55 | for (const ErrorInfo& error : knownErrors) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
56 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
57 | if (error.value == errorNumber) |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
58 | { |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
59 | errorMessage = error.text; |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
60 | break; |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
61 | } |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
62 | } |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
63 | |
1332
1fffb24d4ffe
replaced remaining DIRSLASH, Dirname and Basename uses with Qt file info stuff
Teemu Piippo <teemu@hecknology.net>
parents:
1326
diff
changeset
|
64 | element->print("OpenGL ERROR: at %1:%2: %3", file, line, errorMessage); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
65 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
66 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
67 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
68 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
69 | * Constructs a GL compiler. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
70 | */ |
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
|
71 | GLCompiler::GLCompiler (GLRenderer* renderer) : |
971
c00f9665a9f8
Now compiles and links but crashes shortly after startup.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
970
diff
changeset
|
72 | HierarchyElement (renderer), |
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
|
73 | m_renderer (renderer) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
74 | { |
1245 | 75 | connect( |
76 | renderer->model(), | |
77 | SIGNAL(rowsInserted(QModelIndex, int, int)), | |
78 | this, | |
79 | SLOT(handleRowInsertion(QModelIndex, int, int)) | |
80 | ); | |
81 | connect( | |
82 | renderer->model(), | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
83 | SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), |
1245 | 84 | this, |
85 | SLOT(handleRowRemoval(QModelIndex, int, int)) | |
86 | ); | |
87 | connect( | |
88 | renderer->model(), | |
89 | SIGNAL(dataChanged(QModelIndex, QModelIndex, QVector<int>)), | |
90 | this, | |
91 | SLOT(handleDataChange(QModelIndex, QModelIndex)) | |
92 | ); | |
1247 | 93 | connect( |
94 | renderer, | |
95 | SIGNAL(objectHighlightingChanged(QModelIndex, QModelIndex)), | |
96 | this, | |
97 | SLOT(handleObjectHighlightingChanged(QModelIndex, QModelIndex)) | |
98 | ); | |
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:
1098
diff
changeset
|
99 | connect(m_window, SIGNAL(gridChanged()), this, SLOT(recompile())); |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
100 | |
1244 | 101 | for (QModelIndex index : renderer->model()->indices()) |
102 | { | |
103 | print("%1", index); | |
104 | stageForCompilation(index); | |
105 | } | |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
106 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
107 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
108 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
109 | * Initializes the VBOs after OpenGL is initialized. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
110 | */ |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
111 | void GLCompiler::initialize() |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
112 | { |
855
e16f1587ef44
- fixed compilation on windows systems
Santeri Piippo <crimsondusk64@gmail.com>
parents:
852
diff
changeset
|
113 | initializeOpenGLFunctions(); |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
114 | glGenBuffers(countof(m_vbo), &m_vbo[0]); |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
857
diff
changeset
|
115 | CHECK_GL_ERROR(); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
116 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
117 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
118 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
119 | * Destructs the VBOs when the compiler is deleted. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
120 | */ |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
121 | GLCompiler::~GLCompiler() |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
122 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
123 | glDeleteBuffers(countof(m_vbo), &m_vbo[0]); |
861
83426c5fa732
- major identifier renaming
Teemu Piippo <crimsondusk64@gmail.com>
parents:
857
diff
changeset
|
124 | CHECK_GL_ERROR(); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
125 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
126 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
127 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
128 | * Returns an index color for the LDObject ID given. This color represents the object in the picking scene. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
129 | */ |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
130 | QColor GLCompiler::indexColorForID (qint32 id) const |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
131 | { |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
132 | // Calculate a color based from this index. This method caters for |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
133 | // 16777216 objects. I don't think that will be exceeded anytime soon. :) |
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:
1098
diff
changeset
|
134 | int r = (id / 0x10000) % 0x100; |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
135 | int g = (id / 0x100) % 0x100; |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
136 | int b = id % 0x100; |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
137 | return {r, g, b}; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
138 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
139 | |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
140 | /* |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
141 | * Returns the suitable color for the polygon. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
142 | * - polygon is the polygon to colorise. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
143 | * - polygonOwner is the LDObject from which the polygon originated. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
144 | * - subclass provides context for the polygon. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
145 | */ |
1246 | 146 | QColor GLCompiler::getColorForPolygon( |
147 | LDPolygon& polygon, | |
148 | const QModelIndex& polygonOwnerIndex, | |
149 | VboSubclass subclass | |
150 | ) { | |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
151 | QColor color; |
1246 | 152 | LDObject* polygonOwner = m_renderer->model()->lookup(polygonOwnerIndex); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
153 | |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
154 | switch (subclass) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
155 | { |
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:
1122
diff
changeset
|
156 | case VboSubclass::Surfaces: |
15e46ea3151f
Reworked iterable enums: they all are enum classes now and the end value is marked with "_End"
Teemu Piippo <teemu@hecknology.net>
parents:
1122
diff
changeset
|
157 | case VboSubclass::Normals: |
1239 | 158 | case VboSubclass::InvertedNormals: |
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:
1122
diff
changeset
|
159 | case VboSubclass::_End: |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
160 | // Surface and normal VBOs contain vertex data, not colors. So we can't return anything meaningful. |
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:
1098
diff
changeset
|
161 | return {}; |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
162 | |
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:
1122
diff
changeset
|
163 | case VboSubclass::BfcFrontColors: |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
164 | // Use the constant green color for BFC front colors |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
165 | return {64, 192, 80}; |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
166 | |
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:
1122
diff
changeset
|
167 | case VboSubclass::BfcBackColors: |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
168 | // Use the constant red color for BFC back colors |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
169 | return {208, 64, 64}; |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
170 | |
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:
1122
diff
changeset
|
171 | case VboSubclass::PickColors: |
1278
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1276
diff
changeset
|
172 | // For the picking scene, use unique picking colors provided by the model. |
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1276
diff
changeset
|
173 | return m_renderer->model()->pickingColorForObject(polygonOwnerIndex); |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
174 | |
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:
1122
diff
changeset
|
175 | case VboSubclass::RandomColors: |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
176 | // For the random color scene, the owner object has rolled up a random color. Use that. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
177 | color = polygonOwner->randomColor(); |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
178 | break; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
179 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
180 | case VboSubclass::RegularColors: |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
181 | // For normal colors, use the polygon's color. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
182 | if (polygon.color == MainColor) |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
183 | { |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
184 | // If it's the main color, use the polygon owner's color. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
185 | if (polygonOwner->color() == MainColor) |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
186 | { |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
187 | // If that also is the main color, then we whatever the user has configured the main color to look like. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
188 | color = guiUtilities()->mainColorRepresentation(); |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
189 | } |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
190 | else |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
191 | { |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
192 | color = polygonOwner->color().faceColor(); |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
193 | } |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
194 | } |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
195 | else if (polygon.color == EdgeColor) |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
196 | { |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
197 | // Edge color is black, unless we have a dark background, in which case lines need to be bright. |
1323
05b3e173c900
Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1319
diff
changeset
|
198 | color = luma(config::backgroundColor()) > 40 ? Qt::black : Qt::white; |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
199 | } |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
200 | else |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
201 | { |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
202 | // Not main or edge color, use the polygon's color as is. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
203 | color = LDColor {polygon.color}.faceColor(); |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
204 | } |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
205 | break; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
206 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
207 | |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
208 | if (color.isValid()) |
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:
1098
diff
changeset
|
209 | { |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
210 | // We may wish to apply blending on the color to indicate selection or highlight. |
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:
1098
diff
changeset
|
211 | double blendAlpha = 0.0; |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
212 | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
213 | if (this->_selectionModel and this->_selectionModel->isSelected(polygonOwnerIndex)) |
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:
1098
diff
changeset
|
214 | blendAlpha = 1.0; |
1247 | 215 | else if (polygonOwnerIndex == m_renderer->objectAtCursor()) |
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:
1098
diff
changeset
|
216 | blendAlpha = 0.5; |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
217 | |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
218 | if (blendAlpha != 0.0) |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
219 | { |
1323
05b3e173c900
Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1319
diff
changeset
|
220 | QColor selectedColor = config::selectColorBlend(); |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
221 | double denominator = blendAlpha + 1.0; |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
222 | color.setRed((color.red() + (selectedColor.red() * blendAlpha)) / denominator); |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
223 | color.setGreen((color.green() + (selectedColor.green() * blendAlpha)) / denominator); |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
224 | color.setBlue((color.blue() + (selectedColor.blue() * blendAlpha)) / denominator); |
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:
1098
diff
changeset
|
225 | } |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
226 | } |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
227 | else |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
228 | { |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
229 | // The color was unknown. Use main color to make the polygon at least not appear pitch-black. |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
230 | if (polygon.num != 2 and polygon.num != 5) |
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
231 | color = guiUtilities()->mainColorRepresentation(); |
890
903ec1e46298
- backed out work done on bfc (re-committing later)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
889
diff
changeset
|
232 | else |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
233 | color = Qt::black; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
234 | |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
235 | // Warn about the unknown color, but only once. |
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:
1098
diff
changeset
|
236 | static QSet<int> warnedColors; |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
237 | if (not warnedColors.contains(polygon.color)) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
238 | { |
1159
6ad8cdcd88d9
print() is no longer a global function but is tied to HierarchyElement.
Teemu Piippo <teemu@hecknology.net>
parents:
1146
diff
changeset
|
239 | print(tr("Unknown color %1!\n"), polygon.color); |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
240 | warnedColors.insert(polygon.color); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
241 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
242 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
243 | |
1127
3ab9d11dc76e
Commented GLCompiler::getColorForPolygon
Teemu Piippo <teemu@hecknology.net>
parents:
1125
diff
changeset
|
244 | return color; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
245 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
246 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
247 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
248 | * Tells the compiler that a merge of VBOs is required. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
249 | */ |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
250 | void GLCompiler::needMerge() |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
251 | { |
1065
c8ecddbd99e9
Actually, let's call it countof(). Makes more sense.
Teemu Piippo <teemu@hecknology.net>
parents:
1063
diff
changeset
|
252 | for (int i = 0; i < countof (m_vboChanged); ++i) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
253 | m_vboChanged[i] = true; |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
254 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
255 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
256 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
257 | * Stages the given object for compilation. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
258 | */ |
1245 | 259 | void GLCompiler::stageForCompilation(const QModelIndex& index) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
260 | { |
1244 | 261 | m_staged.insert(index); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
262 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
263 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
264 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
265 | * Removes an object from the set of objects to be compiled. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
266 | */ |
1245 | 267 | void GLCompiler::unstage(const QModelIndex& index) |
721
4cf0f6c9082d
- now works with selection subfiling
Santeri Piippo <crimsondusk64@gmail.com>
parents:
717
diff
changeset
|
268 | { |
1244 | 269 | m_staged.remove(index); |
270 | } | |
271 | ||
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
272 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
273 | * Compiles all staged objects. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
274 | */ |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
275 | void GLCompiler::compileStaged() |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
276 | { |
1244 | 277 | for (const QModelIndex& index : m_staged) |
278 | compileObject(index); | |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
279 | |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
280 | m_staged.clear(); |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
281 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
282 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
283 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
284 | * Prepares a VBO for rendering. The VBO is merged if needed. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
285 | */ |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
286 | void GLCompiler::prepareVBO (int vbonum) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
287 | { |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
288 | // Compile anything that still awaits it |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
289 | compileStaged(); |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
290 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
291 | if (m_vboChanged[vbonum]) |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
292 | { |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
293 | // Merge the VBO into a vector of floats. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
294 | QVector<GLfloat> vbodata; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
295 | |
1244 | 296 | for ( |
297 | auto iterator = m_objectInfo.begin(); | |
298 | iterator != m_objectInfo.end(); | |
299 | ) { | |
300 | if (not iterator.key().isValid()) | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
301 | { |
1244 | 302 | iterator = m_objectInfo.erase(iterator); |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
303 | } |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
304 | else |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
305 | { |
1245 | 306 | LDObject* object = m_renderer->model()->lookup(iterator.key()); |
1244 | 307 | if (not object->isHidden()) |
308 | vbodata += iterator->data[vbonum]; | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
309 | |
1244 | 310 | ++iterator; |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
311 | } |
883
69b8adc9a669
- fixed: due to a shared pointer called via reference called dismiss() in LDDocument::closeInitialFile, this could cause LDDocuments to delete themselves in setImplicit(true) as no shared pointers were left inside closeInitialFile to keep the refcount up.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
861
diff
changeset
|
312 | } |
886
3c83fe3486b1
- fixed endless loop in prepareVBO due to badly incremented iterator
Teemu Piippo <crimsondusk64@gmail.com>
parents:
883
diff
changeset
|
313 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
314 | // Transfer the VBO to the graphics processor. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
315 | glBindBuffer (GL_ARRAY_BUFFER, m_vbo[vbonum]); |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
316 | glBufferData (GL_ARRAY_BUFFER, countof(vbodata) * sizeof(GLfloat), vbodata.constData(), GL_STATIC_DRAW); |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
317 | glBindBuffer (GL_ARRAY_BUFFER, 0); |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
318 | CHECK_GL_ERROR(); |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
319 | m_vboChanged[vbonum] = false; |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
320 | m_vboSizes[vbonum] = countof(vbodata); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
321 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
322 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
323 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
324 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
325 | * Removes the data related to the given object. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
326 | */ |
1244 | 327 | void GLCompiler::dropObjectInfo(const QModelIndex& index) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
328 | { |
1244 | 329 | if (m_objectInfo.contains(index)) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
330 | { |
1244 | 331 | // If we have data relating to this object, remove it. |
332 | // The VBOs have changed now and need to be merged. | |
333 | m_objectInfo.remove(index); | |
1371
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
334 | this->needBoundingBoxRebuild = true; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
335 | needMerge(); |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
336 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
337 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
338 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
339 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
340 | * Makes the compiler forget about the given object completely. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
341 | */ |
1244 | 342 | void GLCompiler::forgetObject(QModelIndex index) |
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:
1098
diff
changeset
|
343 | { |
1244 | 344 | dropObjectInfo(index); |
345 | unstage(index); | |
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:
1098
diff
changeset
|
346 | } |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
347 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
348 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
349 | * Compiles a single object. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
350 | */ |
1246 | 351 | void GLCompiler::compileObject(const QModelIndex& index) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
352 | { |
1245 | 353 | LDObject* object = m_renderer->model()->lookup(index); |
1244 | 354 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
355 | if (object == nullptr) |
708
3155f2c05f89
- more debugging...
Santeri Piippo <crimsondusk64@gmail.com>
parents:
706
diff
changeset
|
356 | return; |
3155f2c05f89
- more debugging...
Santeri Piippo <crimsondusk64@gmail.com>
parents:
706
diff
changeset
|
357 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
358 | ObjectVboData info; |
1244 | 359 | dropObjectInfo(index); |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
360 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
361 | switch (object->type()) |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
362 | { |
1244 | 363 | // Note: We cannot split quads into triangles here, it would mess up the |
364 | // wireframe view. Quads must go into separate vbos. | |
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:
1122
diff
changeset
|
365 | case LDObjectType::Triangle: |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1127
diff
changeset
|
366 | case LDObjectType::Quadrilateral: |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1127
diff
changeset
|
367 | case LDObjectType::EdgeLine: |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1127
diff
changeset
|
368 | case LDObjectType::ConditionalEdge: |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
369 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
370 | LDPolygon* poly = object->getPolygon(); |
1246 | 371 | compilePolygon (*poly, index, info); |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
372 | delete poly; |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
373 | break; |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
374 | } |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
375 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
376 | // TODO: try use interfaces to remove these special treatments? |
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:
1122
diff
changeset
|
377 | case LDObjectType::SubfileReference: |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
378 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
379 | LDSubfileReference* subfileReference = static_cast<LDSubfileReference*>(object); |
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
380 | auto data = subfileReference->inlinePolygons( |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
381 | m_documents, |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
382 | m_renderer->model()->winding() |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
383 | ); |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
384 | |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
385 | for (LDPolygon& poly : data) |
1246 | 386 | compilePolygon (poly, index, info); |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
387 | break; |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
388 | } |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
389 | |
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:
1122
diff
changeset
|
390 | case LDObjectType::BezierCurve: |
1004
ba4200437179
Bézier curves now render in 3D
Teemu Piippo <crimsondusk64@gmail.com>
parents:
998
diff
changeset
|
391 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
392 | LDBezierCurve* curve = static_cast<LDBezierCurve*>(object); |
1023
9450ac3cd930
Split grid stuff into a new class Grid in grid.cpp/grid.h
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1017
diff
changeset
|
393 | for (LDPolygon& polygon : curve->rasterizePolygons(grid()->bezierCurveSegments())) |
1246 | 394 | compilePolygon (polygon, index, info); |
1004
ba4200437179
Bézier curves now render in 3D
Teemu Piippo <crimsondusk64@gmail.com>
parents:
998
diff
changeset
|
395 | } |
ba4200437179
Bézier curves now render in 3D
Teemu Piippo <crimsondusk64@gmail.com>
parents:
998
diff
changeset
|
396 | break; |
ba4200437179
Bézier curves now render in 3D
Teemu Piippo <crimsondusk64@gmail.com>
parents:
998
diff
changeset
|
397 | |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
398 | default: |
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
399 | break; |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
400 | } |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
401 | |
1244 | 402 | m_objectInfo[index] = info; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
403 | needMerge(); |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
404 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
405 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
406 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
407 | * Inserts a single polygon into VBOs. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
408 | */ |
1246 | 409 | void GLCompiler::compilePolygon( |
410 | LDPolygon& poly, | |
411 | const QModelIndex& polygonOwnerIndex, | |
412 | ObjectVboData& objectInfo | |
413 | ) { | |
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
414 | if (m_renderer->model()->winding() == Clockwise) |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
415 | ::invertPolygon(poly); |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
416 | |
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:
1122
diff
changeset
|
417 | VboClass surface; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
418 | |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
419 | switch (poly.num) |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
420 | { |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
421 | case 2: |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
422 | surface = VboClass::Lines; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
423 | break; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
424 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
425 | case 3: |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
426 | surface = VboClass::Triangles; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
427 | break; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
428 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
429 | case 4: |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
430 | surface = VboClass::Quads; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
431 | break; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
432 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
433 | case 5: |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
434 | surface = VboClass::ConditionalLines; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
435 | break; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
436 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
437 | default: |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
438 | return; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
439 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
440 | |
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:
1113
diff
changeset
|
441 | // Determine the normals for the polygon. |
1313
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1306
diff
changeset
|
442 | QVector3D normals[4]; |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
443 | auto vertexRing = ring(poly.vertices, poly.numPolygonVertices()); |
1122
795d1c3554b9
Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents:
1121
diff
changeset
|
444 | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
445 | for (int i = 0; i < poly.numPolygonVertices(); ++i) |
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:
1113
diff
changeset
|
446 | { |
1122
795d1c3554b9
Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents:
1121
diff
changeset
|
447 | const Vertex& v1 = vertexRing[i - 1]; |
795d1c3554b9
Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents:
1121
diff
changeset
|
448 | const Vertex& v2 = vertexRing[i]; |
795d1c3554b9
Added the RingAdapter class and interfacing ring() function and simplified some math in GLCompiler with it
Teemu Piippo <teemu@hecknology.net>
parents:
1121
diff
changeset
|
449 | const Vertex& v3 = vertexRing[i + 1]; |
1313
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1306
diff
changeset
|
450 | normals[i] = QVector3D::crossProduct(v3 - v2, v1 - v2).normalized(); |
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:
1113
diff
changeset
|
451 | } |
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:
1113
diff
changeset
|
452 | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
453 | // Transform vertices so that they're suitable for GL rendering |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
454 | for (int i = 0; i < poly.numPolygonVertices(); i += 1) |
1371
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
455 | { |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
456 | poly.vertices[i].y = -poly.vertices[i].y; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
457 | poly.vertices[i].z = -poly.vertices[i].z; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
458 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
459 | // Add these vertices to the bounding box (unless we're going to do it over |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
460 | // from scratch afterwards) |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
461 | if (not this->needBoundingBoxRebuild) |
1371
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
462 | this->boundingBox.consider(poly.vertices[i]); |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
463 | } |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
464 | |
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:
1122
diff
changeset
|
465 | for (VboSubclass complement : iterateEnum<VboSubclass>()) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
466 | { |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
467 | const int vbonum = vboNumber (surface, complement); |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
468 | QVector<GLfloat>& vbodata = objectInfo.data[vbonum]; |
1246 | 469 | const QColor color = getColorForPolygon (poly, polygonOwnerIndex, complement); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
470 | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
471 | for (int vert = 0; vert < poly.numPolygonVertices(); ++vert) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
472 | { |
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:
1122
diff
changeset
|
473 | if (complement == VboSubclass::Surfaces) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
474 | { |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
475 | // Write coordinates. Apparently Z must be flipped too? |
1313
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1306
diff
changeset
|
476 | vbodata << poly.vertices[vert].x |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
477 | << poly.vertices[vert].y |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
478 | << poly.vertices[vert].z; |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
479 | } |
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:
1122
diff
changeset
|
480 | else if (complement == VboSubclass::Normals) |
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:
1113
diff
changeset
|
481 | { |
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:
1113
diff
changeset
|
482 | vbodata << normals[vert].x() |
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:
1113
diff
changeset
|
483 | << -normals[vert].y() |
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:
1113
diff
changeset
|
484 | << -normals[vert].z(); |
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:
1113
diff
changeset
|
485 | } |
1237
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
486 | else if (complement == VboSubclass::InvertedNormals) |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
487 | { |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
488 | vbodata << -normals[vert].x(); |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
489 | vbodata << +normals[vert].y(); |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
490 | vbodata << +normals[vert].z(); |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
491 | } |
726
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
492 | else |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
493 | { |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
494 | vbodata << ((GLfloat) color.red()) / 255.0f |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
495 | << ((GLfloat) color.green()) / 255.0f |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
496 | << ((GLfloat) color.blue()) / 255.0f |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
497 | << ((GLfloat) color.alpha()) / 255.0f; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
498 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
499 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
500 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
501 | } |
857
e62983881460
- fixed crash-on-exit (simply by not running full destruction processing during program termination)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
855
diff
changeset
|
502 | |
1371
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
503 | /* |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
504 | * Returns the center point of the model. |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
505 | */ |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
506 | Vertex GLCompiler::modelCenter() |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
507 | { |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
508 | // If there's something still queued for compilation, we need to build those first so |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
509 | // that they get into the bounding box. |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
510 | this->compileStaged(); |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
511 | |
1371
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
512 | // If the bounding box is invalid, rebuild it now. |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
513 | if (this->needBoundingBoxRebuild) |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
514 | { |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
515 | this->boundingBox = {}; |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
516 | QMapIterator<QPersistentModelIndex, ObjectVboData> iterator {m_objectInfo}; |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
517 | |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
518 | while (iterator.hasNext()) |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
519 | { |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
520 | iterator.next(); |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
521 | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
522 | for (VboClass vboclass : { |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
523 | VboClass::Lines, |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
524 | VboClass::Triangles, |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
525 | VboClass::Quads, |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
526 | VboClass::ConditionalLines |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
527 | }) { |
1371
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
528 | // Read in the surface vertices and add them to the bounding box. |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
529 | int vbonum = vboNumber(vboclass, VboSubclass::Surfaces); |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
530 | const auto& vector = iterator.value().data[vbonum]; |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
531 | |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
532 | for (int i = 0; i + 2 < countof(vector); i += 3) |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
533 | this->boundingBox.consider({vector[i], vector[i + 1], vector[i + 2]}); |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
534 | } |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
535 | } |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
536 | |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
537 | this->needBoundingBoxRebuild = false; |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
538 | } |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
539 | |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
540 | if (not this->boundingBox.isEmpty()) |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
541 | return this->boundingBox.center(); |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
542 | else |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
543 | return {}; |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
544 | } |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
545 | |
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:
1122
diff
changeset
|
546 | int GLCompiler::vboNumber (VboClass surface, VboSubclass complement) |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
547 | { |
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:
1122
diff
changeset
|
548 | return (static_cast<int>(surface) * EnumLimits<VboSubclass>::Count) + static_cast<int>(complement); |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
549 | } |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
550 | |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
551 | |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
552 | GLuint GLCompiler::vbo (int vbonum) const |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
553 | { |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
554 | return m_vbo[vbonum]; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
555 | } |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
556 | |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
557 | |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
558 | int GLCompiler::vboSize (int vbonum) const |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
559 | { |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
560 | return m_vboSizes[vbonum]; |
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:
1098
diff
changeset
|
561 | } |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
562 | |
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
563 | void GLCompiler::fullUpdate() |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
564 | { |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
565 | m_objectInfo.clear(); |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
566 | recompile(); |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
567 | } |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
568 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
569 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
570 | * Recompiles the entire model. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
571 | */ |
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:
1098
diff
changeset
|
572 | void GLCompiler::recompile() |
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1098
diff
changeset
|
573 | { |
1244 | 574 | for (QModelIndex index : m_renderer->model()->indices()) |
575 | compileObject(index); | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
576 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
577 | emit sceneChanged(); |
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:
1098
diff
changeset
|
578 | } |
1245 | 579 | |
580 | void GLCompiler::handleRowInsertion(const QModelIndex&, int first, int last) | |
581 | { | |
582 | for (int row = first; row <= last; row += 1) | |
1247 | 583 | m_staged.insert(m_renderer->model()->index(row)); |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
584 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
585 | emit sceneChanged(); |
1245 | 586 | } |
587 | ||
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
588 | void GLCompiler::handleRowRemoval(const QModelIndex&, int first, int last) |
1245 | 589 | { |
1282
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
590 | for (int row = last; row >= first; row -= 1) |
1245 | 591 | forgetObject(m_renderer->model()->index(row)); |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
592 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
593 | this->needBoundingBoxRebuild = true; |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
594 | emit sceneChanged(); |
1245 | 595 | } |
596 | ||
597 | void GLCompiler::handleDataChange(const QModelIndex& topLeft, const QModelIndex& bottomRight) | |
598 | { | |
599 | for (int row = topLeft.row(); row <= bottomRight.row(); row += 1) | |
1247 | 600 | m_staged.insert(m_renderer->model()->index(row)); |
1371
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
601 | |
b8df4748d04e
automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents:
1332
diff
changeset
|
602 | this->needBoundingBoxRebuild = true; |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
603 | emit sceneChanged(); |
1247 | 604 | } |
605 | ||
606 | void GLCompiler::handleObjectHighlightingChanged( | |
607 | const QModelIndex& oldIndex, | |
608 | const QModelIndex& newIndex | |
609 | ) { | |
610 | m_staged.insert(oldIndex); | |
611 | m_staged.insert(newIndex); | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
612 | emit sceneChanged(); |
1245 | 613 | } |
1246 | 614 | |
615 | void GLCompiler::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) | |
616 | { | |
617 | for (const QModelIndex& index : selected.indexes()) | |
618 | m_staged.insert(index); | |
619 | ||
620 | for (const QModelIndex& index : deselected.indexes()) | |
621 | m_staged.insert(index); | |
622 | ||
623 | m_renderer->update(); | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
624 | emit sceneChanged(); |
1246 | 625 | } |
626 | ||
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
627 | QItemSelectionModel* GLCompiler::selectionModel() const |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
628 | { |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
629 | return _selectionModel; |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
630 | } |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
631 | |
1246 | 632 | void GLCompiler::setSelectionModel(QItemSelectionModel* selectionModel) |
633 | { | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
634 | if (this->_selectionModel) |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
635 | disconnect(this->_selectionModel, 0, 0, 0); |
1246 | 636 | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
637 | this->_selectionModel = selectionModel; |
1246 | 638 | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
639 | if (this->_selectionModel) |
1246 | 640 | { |
641 | connect( | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
642 | this->_selectionModel, |
1246 | 643 | SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), |
644 | this, | |
645 | SLOT(selectionChanged(const QItemSelection&, const QItemSelection&)) | |
646 | ); | |
647 | connect( | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
648 | this->_selectionModel, |
1246 | 649 | SIGNAL(destroyed(QObject*)), |
650 | this, | |
651 | SLOT(clearSelectionModel()) | |
652 | ); | |
653 | } | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
654 | |
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
655 | emit sceneChanged(); |
1246 | 656 | } |
657 | ||
658 | void GLCompiler::clearSelectionModel() | |
659 | { | |
660 | this->setSelectionModel(nullptr); | |
1372
641060842b92
fixed the scene bounding box not getting updated as it should
Teemu Piippo <teemu@hecknology.net>
parents:
1371
diff
changeset
|
661 | emit sceneChanged(); |
1246 | 662 | } |