Sat, 24 Mar 2018 12:54:28 +0200
Happy new year 2018
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 | |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
64 | element->print("OpenGL ERROR: at %1:%2: %3", Basename(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(), | |
83 | SIGNAL(rowsRemoved(QModelIndex, int, int)), | |
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); | |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
334 | needMerge(); |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
335 | } |
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 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
338 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
339 | * Makes the compiler forget about the given object completely. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
340 | */ |
1244 | 341 | 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
|
342 | { |
1244 | 343 | dropObjectInfo(index); |
344 | 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
|
345 | } |
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 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
347 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
348 | * Compiles a single object. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
349 | */ |
1246 | 350 | void GLCompiler::compileObject(const QModelIndex& index) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
351 | { |
1245 | 352 | LDObject* object = m_renderer->model()->lookup(index); |
1244 | 353 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
354 | if (object == nullptr) |
708
3155f2c05f89
- more debugging...
Santeri Piippo <crimsondusk64@gmail.com>
parents:
706
diff
changeset
|
355 | return; |
3155f2c05f89
- more debugging...
Santeri Piippo <crimsondusk64@gmail.com>
parents:
706
diff
changeset
|
356 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
357 | ObjectVboData info; |
1244 | 358 | 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
|
359 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
360 | 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
|
361 | { |
1244 | 362 | // Note: We cannot split quads into triangles here, it would mess up the |
363 | // 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
|
364 | case LDObjectType::Triangle: |
1139
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1127
diff
changeset
|
365 | case LDObjectType::Quadrilateral: |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1127
diff
changeset
|
366 | case LDObjectType::EdgeLine: |
51303023d651
LDObject subclass renaming:
Teemu Piippo <teemu@hecknology.net>
parents:
1127
diff
changeset
|
367 | 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
|
368 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
369 | LDPolygon* poly = object->getPolygon(); |
1246 | 370 | 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
|
371 | 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
|
372 | 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
|
373 | } |
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 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
375 | // 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
|
376 | 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
|
377 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
378 | LDSubfileReference* subfileReference = static_cast<LDSubfileReference*>(object); |
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
379 | auto data = subfileReference->inlinePolygons( |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
380 | m_documents, |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
381 | m_renderer->model()->winding() |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
382 | ); |
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
|
383 | |
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 | for (LDPolygon& poly : data) |
1246 | 385 | 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
|
386 | 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
|
387 | } |
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 | |
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
|
389 | case LDObjectType::BezierCurve: |
1004
ba4200437179
Bézier curves now render in 3D
Teemu Piippo <crimsondusk64@gmail.com>
parents:
998
diff
changeset
|
390 | { |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
391 | 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
|
392 | for (LDPolygon& polygon : curve->rasterizePolygons(grid()->bezierCurveSegments())) |
1246 | 393 | compilePolygon (polygon, index, info); |
1004
ba4200437179
Bézier curves now render in 3D
Teemu Piippo <crimsondusk64@gmail.com>
parents:
998
diff
changeset
|
394 | } |
ba4200437179
Bézier curves now render in 3D
Teemu Piippo <crimsondusk64@gmail.com>
parents:
998
diff
changeset
|
395 | break; |
ba4200437179
Bézier curves now render in 3D
Teemu Piippo <crimsondusk64@gmail.com>
parents:
998
diff
changeset
|
396 | |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
397 | default: |
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
398 | 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
|
399 | } |
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 | |
1244 | 401 | m_objectInfo[index] = info; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
402 | needMerge(); |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
403 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
404 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
405 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
406 | * Inserts a single polygon into VBOs. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
407 | */ |
1246 | 408 | void GLCompiler::compilePolygon( |
409 | LDPolygon& poly, | |
410 | const QModelIndex& polygonOwnerIndex, | |
411 | ObjectVboData& objectInfo | |
412 | ) { | |
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
413 | if (m_renderer->model()->winding() == Clockwise) |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
414 | ::invertPolygon(poly); |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
415 | |
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
|
416 | VboClass surface; |
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
|
417 | int vertexCount; |
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 | { |
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
|
421 | case 2: surface = VboClass::Lines; vertexCount = 2; break; |
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
|
422 | case 3: surface = VboClass::Triangles; vertexCount = 3; break; |
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
|
423 | case 4: surface = VboClass::Quads; vertexCount = 4; break; |
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
|
424 | case 5: surface = VboClass::ConditionalLines; vertexCount = 2; break; |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
425 | default: return; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
426 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
427 | |
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
|
428 | // Determine the normals for the polygon. |
1313
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1306
diff
changeset
|
429 | QVector3D normals[4]; |
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
|
430 | auto vertexRing = ring(poly.vertices, vertexCount); |
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
|
431 | |
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
|
432 | for (int i = 0; i < vertexCount; ++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
|
433 | { |
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
|
434 | 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
|
435 | 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
|
436 | const Vertex& v3 = vertexRing[i + 1]; |
1313
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1306
diff
changeset
|
437 | 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
|
438 | } |
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
|
439 | |
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
|
440 | for (VboSubclass complement : iterateEnum<VboSubclass>()) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
441 | { |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
442 | const int vbonum = vboNumber (surface, complement); |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
443 | QVector<GLfloat>& vbodata = objectInfo.data[vbonum]; |
1246 | 444 | const QColor color = getColorForPolygon (poly, polygonOwnerIndex, complement); |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
445 | |
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
|
446 | for (int vert = 0; vert < vertexCount; ++vert) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
447 | { |
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
|
448 | if (complement == VboSubclass::Surfaces) |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
449 | { |
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
|
450 | // 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
|
451 | vbodata << poly.vertices[vert].x |
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1306
diff
changeset
|
452 | << -poly.vertices[vert].y |
4baed9f54de3
reworked Vertex, no longer a QVector3D subclass
Teemu Piippo <teemu@hecknology.net>
parents:
1306
diff
changeset
|
453 | << -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
|
454 | } |
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
|
455 | 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
|
456 | { |
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
|
457 | 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
|
458 | << -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
|
459 | << -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
|
460 | } |
1237
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
461 | else if (complement == VboSubclass::InvertedNormals) |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
462 | { |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
463 | vbodata << -normals[vert].x(); |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
464 | vbodata << +normals[vert].y(); |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
465 | vbodata << +normals[vert].z(); |
40bb00d82e2b
moved matrix calculations, added inverted normals for BFC back sides
Santeri Piippo
parents:
1173
diff
changeset
|
466 | } |
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
|
467 | 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
|
468 | { |
9a53d9a379de
- refactored the gl compiler a tad, made selection blend work with BFC/random colors
Santeri Piippo <crimsondusk64@gmail.com>
parents:
725
diff
changeset
|
469 | 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
|
470 | << ((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
|
471 | << ((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
|
472 | << ((GLfloat) color.alpha()) / 255.0f; |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
473 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
474 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
475 | } |
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
476 | } |
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
|
477 | |
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
|
478 | int GLCompiler::vboNumber (VboClass surface, VboSubclass complement) |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
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 | 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
|
481 | } |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
482 | |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
483 | |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
484 | GLuint GLCompiler::vbo (int vbonum) const |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
485 | { |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
486 | return m_vbo[vbonum]; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
487 | } |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
488 | |
1011
4fdd74a04790
Rename LDSubfile to LDSubfileReference
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1006
diff
changeset
|
489 | |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
490 | int GLCompiler::vboSize (int vbonum) const |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
491 | { |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
985
diff
changeset
|
492 | 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
|
493 | } |
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
|
494 | |
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
495 | void GLCompiler::fullUpdate() |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
496 | { |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
497 | m_objectInfo.clear(); |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
498 | recompile(); |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
499 | } |
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1305
diff
changeset
|
500 | |
1173
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
501 | /* |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
502 | * Recompiles the entire model. |
6cd85b28f43b
Cleanup ColorSelector::colorButtonClicked()
Teemu Piippo <teemu@hecknology.net>
parents:
1159
diff
changeset
|
503 | */ |
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
|
504 | 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
|
505 | { |
1244 | 506 | for (QModelIndex index : m_renderer->model()->indices()) |
507 | compileObject(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
|
508 | } |
1245 | 509 | |
510 | void GLCompiler::handleRowInsertion(const QModelIndex&, int first, int last) | |
511 | { | |
512 | for (int row = first; row <= last; row += 1) | |
1247 | 513 | m_staged.insert(m_renderer->model()->index(row)); |
1245 | 514 | } |
515 | ||
1282
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
516 | void GLCompiler::handleRowRemoval(const QModelIndex&, int, int) |
1245 | 517 | { |
1282
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
518 | // It looks like removing rows causes some key invalidation. Until I can figure that out, |
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
519 | // we're going scorched earth. |
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
520 | m_objectInfo.clear(); |
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
521 | recompile(); |
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
522 | /* |
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
523 | for (int row = last; row >= first; row -= 1) |
1245 | 524 | forgetObject(m_renderer->model()->index(row)); |
1282
c6bc95cbf4a3
fixed removing objects causing some other objects to disappear
Santeri Piippo
parents:
1278
diff
changeset
|
525 | */ |
1245 | 526 | } |
527 | ||
528 | void GLCompiler::handleDataChange(const QModelIndex& topLeft, const QModelIndex& bottomRight) | |
529 | { | |
530 | for (int row = topLeft.row(); row <= bottomRight.row(); row += 1) | |
1247 | 531 | m_staged.insert(m_renderer->model()->index(row)); |
532 | } | |
533 | ||
534 | void GLCompiler::handleObjectHighlightingChanged( | |
535 | const QModelIndex& oldIndex, | |
536 | const QModelIndex& newIndex | |
537 | ) { | |
538 | m_staged.insert(oldIndex); | |
539 | m_staged.insert(newIndex); | |
1245 | 540 | } |
1246 | 541 | |
542 | void GLCompiler::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) | |
543 | { | |
544 | for (const QModelIndex& index : selected.indexes()) | |
545 | m_staged.insert(index); | |
546 | ||
547 | for (const QModelIndex& index : deselected.indexes()) | |
548 | m_staged.insert(index); | |
549 | ||
550 | m_renderer->update(); | |
551 | } | |
552 | ||
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
553 | QItemSelectionModel* GLCompiler::selectionModel() const |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
554 | { |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
555 | return _selectionModel; |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
556 | } |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
557 | |
1246 | 558 | void GLCompiler::setSelectionModel(QItemSelectionModel* selectionModel) |
559 | { | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
560 | if (this->_selectionModel) |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
561 | disconnect(this->_selectionModel, 0, 0, 0); |
1246 | 562 | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
563 | this->_selectionModel = selectionModel; |
1246 | 564 | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
565 | if (this->_selectionModel) |
1246 | 566 | { |
567 | connect( | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
568 | this->_selectionModel, |
1246 | 569 | SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), |
570 | this, | |
571 | SLOT(selectionChanged(const QItemSelection&, const QItemSelection&)) | |
572 | ); | |
573 | connect( | |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
574 | this->_selectionModel, |
1246 | 575 | SIGNAL(destroyed(QObject*)), |
576 | this, | |
577 | SLOT(clearSelectionModel()) | |
578 | ); | |
579 | } | |
580 | } | |
581 | ||
582 | void GLCompiler::clearSelectionModel() | |
583 | { | |
584 | this->setSelectionModel(nullptr); | |
585 | } |