src/GLCompiler.cc

Wed, 05 Feb 2014 06:07:05 +0200

author
Santeri Piippo <crimsondusk64@gmail.com>
date
Wed, 05 Feb 2014 06:07:05 +0200
changeset 680
bf6323f2b1be
parent 679
dd7545e00a8f
child 681
c1cc036c6e1f
permissions
-rw-r--r--

Merge ../ldforge into gl

676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
1 #define GL_GLEXT_PROTOTYPES
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
2 #include <GL/glu.h>
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
3 #include <GL/glext.h>
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4 #include "GLCompiler.h"
675
450827da2376 Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 674
diff changeset
5 #include "LDObject.h"
450827da2376 Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 674
diff changeset
6 #include "Colors.h"
450827da2376 Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 674
diff changeset
7 #include "Document.h"
450827da2376 Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 674
diff changeset
8 #include "Misc.h"
450827da2376 Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents: 674
diff changeset
9 #include "GLRenderer.h"
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
10 #include "Dialogs.h"
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
11
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
12 static const struct
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
13 {
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
14 GLenum value;
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
15 QString text;
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
16 }
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
17 g_GLErrors[] =
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
18 {
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
19 { GL_NO_ERROR, "No error" },
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
20 { GL_INVALID_ENUM, "Unacceptable enumerator passed" },
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
21 { GL_INVALID_VALUE, "Numeric argument out of range" },
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
22 { GL_INVALID_OPERATION, "The operation is not allowed to be done in this state" },
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
23 { GL_INVALID_FRAMEBUFFER_OPERATION, "Framebuffer object is not complete"},
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
24 { GL_OUT_OF_MEMORY, "Out of memory" },
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
25 { GL_STACK_UNDERFLOW, "The operation would have caused an underflow" },
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
26 { GL_STACK_OVERFLOW, "The operation would have caused an overflow" },
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
27 };
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
28
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
29 #define DEBUG_PRINT(...) fprint (stdout, __VA_ARGS__)
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
30
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
31 extern_cfg (Bool, gl_blackedges);
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
32 static QList<short> g_warnedColors;
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
33
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
34 static const QColor g_BFCFrontColor(40, 192, 0);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
35 static const QColor g_BFCBackColor(224, 0, 0);
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
36
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
37 // =============================================================================
673
8e6f5b3f9d38 - rename GLCompiler::Vertex to GLCompiler::VAO to avoid name conflicts
Santeri Piippo <crimsondusk64@gmail.com>
parents: 672
diff changeset
38 //
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
39 void checkGLError_private (const char* file, int line)
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
40 {
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
41 GLenum errnum = glGetError();
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
42
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
43 if (errnum == GL_NO_ERROR)
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
44 return;
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
45
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
46 QString errmsg;
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
47
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
48 for (const auto& it : g_GLErrors)
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
49 {
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
50 if (it.value == errnum)
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
51 {
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
52 errmsg = it.text;
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
53 break;
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
54 }
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
55 }
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
56
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
57 log ("GL ERROR: %1:%2: %3", file, line, errmsg);
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
58 }
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
59
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
60 // =============================================================================
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
61 //
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
62 GLCompiler::GLCompiler() :
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
63 m_Document (null)
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
64 {
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
65 needMerge();
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
66 }
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
67
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
68 // =============================================================================
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
69 //
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
70 void GLCompiler::initialize()
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
71 {
678
0526d8404097 - renamed some member variables for clarity
Santeri Piippo <crimsondusk64@gmail.com>
parents: 677
diff changeset
72 glGenBuffers (VBO_NumArrays, &m_mainVBOs[0]);
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
73 checkGLError();
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
74 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
75
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
76 GLCompiler::~GLCompiler()
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
77 {
678
0526d8404097 - renamed some member variables for clarity
Santeri Piippo <crimsondusk64@gmail.com>
parents: 677
diff changeset
78 glDeleteBuffers (VBO_NumArrays, &m_mainVBOs[0]);
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
79 checkGLError();
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
80 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
81
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
82 // =============================================================================
673
8e6f5b3f9d38 - rename GLCompiler::Vertex to GLCompiler::VAO to avoid name conflicts
Santeri Piippo <crimsondusk64@gmail.com>
parents: 672
diff changeset
83 //
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
84 uint32 GLCompiler::getColorRGB (const QColor& color)
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
85 {
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
86 return
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
87 (color.red() & 0xFF) << 0x00 |
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
88 (color.green() & 0xFF) << 0x08 |
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
89 (color.blue() & 0xFF) << 0x10 |
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90 (color.alpha() & 0xFF) << 0x18;
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
91 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
92
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
93 // =============================================================================
673
8e6f5b3f9d38 - rename GLCompiler::Vertex to GLCompiler::VAO to avoid name conflicts
Santeri Piippo <crimsondusk64@gmail.com>
parents: 672
diff changeset
94 //
674
3d8ab0f89102 - refactoring
Santeri Piippo <crimsondusk64@gmail.com>
parents: 673
diff changeset
95 QColor GLCompiler::getObjectColor (LDObject* obj, GLCompiler::E_ColorType colortype) const
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
96 {
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
97 QColor qcol;
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
98
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99 if (!obj->isColored())
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
100 return QColor();
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101
674
3d8ab0f89102 - refactoring
Santeri Piippo <crimsondusk64@gmail.com>
parents: 673
diff changeset
102 if (colortype == E_PickColor)
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103 {
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
104 // Make the color by the object's ID if we're picking, so we can make the
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 // ID again from the color we get from the picking results. Be sure to use
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106 // the top level parent's index since we want a subfile's children point
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107 // to the subfile itself.
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
108 long i = obj->topLevelParent()->getID();
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
109
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
110 // Calculate a color based from this index. This method caters for
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
111 // 16777216 objects. I don't think that'll be exceeded anytime soon. :)
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
112 // ATM biggest is 53588.dat with 12600 lines.
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
113 int r = (i / 0x10000) % 0x100,
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114 g = (i / 0x100) % 0x100,
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
115 b = i % 0x100;
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
116
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
117 return QColor (r, g, b);
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
119
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
120 if (obj->getColor() == maincolor)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
121 qcol = GLRenderer::getMainColor();
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
122 else
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
123 {
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
124 LDColor* col = getColor (obj->getColor());
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
125
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
126 if (col)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
127 qcol = col->faceColor;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
128 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
129
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
130 if (obj->getColor() == edgecolor)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
131 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
132 qcol = QColor (32, 32, 32); // luma (m_bgcolor) < 40 ? QColor (64, 64, 64) : Qt::black;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
133 LDColor* col;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
134
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
135 if (!gl_blackedges && obj->getParent() && (col = getColor (obj->getParent()->getColor())))
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
136 qcol = col->edgeColor;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
137 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
138
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
139 if (qcol.isValid() == false)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
140 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
141 // The color was unknown. Use main color to make the object at least
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
142 // not appear pitch-black.
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
143 if (obj->getColor() != edgecolor)
674
3d8ab0f89102 - refactoring
Santeri Piippo <crimsondusk64@gmail.com>
parents: 673
diff changeset
144 qcol = GLRenderer::getMainColor();
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
145 else
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
146 qcol = Qt::black;
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
147
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
148 // Warn about the unknown color, but only once.
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
149 for (short i : g_warnedColors)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
150 if (obj->getColor() == i)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
151 return qcol;
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
152
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
153 log ("%1: Unknown color %2!\n", __func__, obj->getColor());
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
154 g_warnedColors << obj->getColor();
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
155 return qcol;
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
156 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
157
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
158 if (obj->topLevelParent()->isSelected())
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
159 {
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
160 // Brighten it up if selected.
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
161 const int add = 51;
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
162
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
163 qcol.setRed (min (qcol.red() + add, 255));
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
164 qcol.setGreen (min (qcol.green() + add, 255));
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
165 qcol.setBlue (min (qcol.blue() + add, 255));
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
166 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
167
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
168 return qcol;
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
169 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
170
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
171 // =============================================================================
673
8e6f5b3f9d38 - rename GLCompiler::Vertex to GLCompiler::VAO to avoid name conflicts
Santeri Piippo <crimsondusk64@gmail.com>
parents: 672
diff changeset
172 //
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
173 void GLCompiler::needMerge()
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
174 {
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
175 // Set all of m_changed to true
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
176 // memset (m_changed, 0xFF, sizeof m_changed);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
177 for (int i = 0; i < VBO_NumArrays; ++i)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
178 m_changed[i] = true;
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
179 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
180
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
181 // =============================================================================
673
8e6f5b3f9d38 - rename GLCompiler::Vertex to GLCompiler::VAO to avoid name conflicts
Santeri Piippo <crimsondusk64@gmail.com>
parents: 672
diff changeset
182 //
672
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
183 void GLCompiler::stageForCompilation (LDObject* obj)
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
184 {
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
185 m_staged << obj;
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
186 removeDuplicates (m_staged);
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
187 }
0925d25ea32c - renamed VertexCompiler to GLCompiler
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
188
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
189 // =============================================================================
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
190 //
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
191 void GLCompiler::compileDocument()
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
192 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
193 for (LDObject* obj : getDocument()->getObjects())
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
194 compileObject (obj);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
195 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
196
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
197 // =============================================================================
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
198 //
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
199 void GLCompiler::compileStaged()
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
200 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
201 for (LDObject* obj : m_staged)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
202 compileObject (obj);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
203
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
204 m_staged.clear();
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
205 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
206
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
207 // =============================================================================
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
208 //
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
209 void GLCompiler::prepareVBOArray (E_VBOArray type)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
210 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
211 // Compile anything that still awaits it
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
212 compileStaged();
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
213
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
214 if (!m_changed[type])
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
215 return;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
216
678
0526d8404097 - renamed some member variables for clarity
Santeri Piippo <crimsondusk64@gmail.com>
parents: 677
diff changeset
217 m_mainVBOData[type].clear();
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
218
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
219 for (auto it = m_objArrays.begin(); it != m_objArrays.end(); ++it)
678
0526d8404097 - renamed some member variables for clarity
Santeri Piippo <crimsondusk64@gmail.com>
parents: 677
diff changeset
220 m_mainVBOData[type] += (*it)[type];
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
221
678
0526d8404097 - renamed some member variables for clarity
Santeri Piippo <crimsondusk64@gmail.com>
parents: 677
diff changeset
222 glBindBuffer (GL_ARRAY_BUFFER, m_mainVBOs[type]);
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
223 checkGLError();
678
0526d8404097 - renamed some member variables for clarity
Santeri Piippo <crimsondusk64@gmail.com>
parents: 677
diff changeset
224 glBufferData (GL_ARRAY_BUFFER, m_mainVBOData[type].size() * sizeof(float),
0526d8404097 - renamed some member variables for clarity
Santeri Piippo <crimsondusk64@gmail.com>
parents: 677
diff changeset
225 m_mainVBOData[type].constData(), GL_DYNAMIC_DRAW);
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
226 checkGLError();
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
227 glBindBuffer (GL_ARRAY_BUFFER, 0);
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
228 checkGLError();
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
229 m_changed[type] = false;
678
0526d8404097 - renamed some member variables for clarity
Santeri Piippo <crimsondusk64@gmail.com>
parents: 677
diff changeset
230 log ("VBO array %1 prepared: %2 coordinates", (int) type, m_mainVBOData[type].size());
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
231 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
232
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
233 // =============================================================================
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
234 //
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
235 void GLCompiler::forgetObject (LDObject* obj)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
236 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
237 auto it = m_objArrays.find (obj);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
238
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
239 if (it != m_objArrays.end())
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
240 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
241 delete *it;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
242 m_objArrays.erase (it);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
243 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
244 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
245
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
246 // =============================================================================
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
247 //
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
248 void GLCompiler::compileObject (LDObject* obj)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
249 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
250 // Ensure we have valid arrays to write to.
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
251 if (m_objArrays.find (obj) == m_objArrays.end())
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
252 m_objArrays[obj] = new QVector<GLfloat>[VBO_NumArrays];
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
253 else
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
254 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
255 // Arrays exist already, clear them.
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
256 for (int i = 0; i < VBO_NumArrays; ++i)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
257 m_objArrays[obj][i].clear();
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
258 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
259
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
260 compileSubObject (obj, obj);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
261 QList<int> data;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
262
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
263 for (int i = 0; i < VBO_NumArrays; ++i)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
264 data << m_objArrays[obj][i].size();
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
265
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
266 dlog ("Compiled #%1: %2 coordinates", obj->getID(), data);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
267 needMerge();
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
268 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
269
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
270 // =============================================================================
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
271 //
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
272 void GLCompiler::compileSubObject (LDObject* obj, LDObject* topobj)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
273 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
274 switch (obj->getType())
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
275 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
276 // Note: We cannot split the quad into triangles here, it would
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
277 // mess up the wireframe view. Quads must go into a separate array.
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
278 case LDObject::ETriangle:
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
279 case LDObject::EQuad:
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
280 case LDObject::ELine:
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
281 case LDObject::ECondLine:
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
282 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
283 E_VBOArray arraynum;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
284 int verts;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
285
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
286 switch (obj->getType())
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
287 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
288 case LDObject::ETriangle: arraynum = VBO_Triangles; verts = 3; break;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
289 case LDObject::EQuad: arraynum = VBO_Quads; verts = 4; break;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
290 case LDObject::ELine: arraynum = VBO_Lines; verts = 2; break;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
291 case LDObject::ECondLine: arraynum = VBO_CondLines; verts = 2; break;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
292 default: break;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
293 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
294
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
295 QVector<GLfloat>* ap = m_objArrays[topobj];
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
296 QColor normalColor = getObjectColor (obj, E_NormalColor);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
297 QColor pickColor = getObjectColor (topobj, E_PickColor);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
298
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
299 for (int i = 0; i < verts; ++i)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
300 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
301 // Write coordinates
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
302 ap[arraynum]
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
303 << obj->getVertex (i).x()
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
304 << -obj->getVertex (i).y()
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
305 << -obj->getVertex (i).z();
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
306
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
307 // Colors
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
308 writeColor (ap[VBO_NormalColors], normalColor);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
309 writeColor (ap[VBO_PickColors], pickColor);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
310 writeColor (ap[VBO_BFCFrontColors], g_BFCFrontColor);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
311 writeColor (ap[VBO_BFCBackColors], g_BFCBackColor);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
312 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
313 } break;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
314
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
315 case LDObject::ESubfile:
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
316 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
317 LDSubfile* ref = static_cast<LDSubfile*> (obj);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
318 LDObjectList subobjs = ref->inlineContents (LDSubfile::DeepCacheInline | LDSubfile::RendererInline);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
319
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
320 for (LDObject* subobj : subobjs)
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
321 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
322 compileSubObject (subobj, topobj);
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
323 subobj->deleteSelf();
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
324 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
325 } break;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
326
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
327 default:
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
328 break;
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
329 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
330 }
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
331
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
332 // =============================================================================
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
333 //
679
dd7545e00a8f - now actually renders stuff correctly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 678
diff changeset
334 void GLCompiler::writeColor (QVector<GLfloat>& array, const QColor& color)
676
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
335 {
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
336 array << color.red()
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
337 << color.green()
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
338 << color.blue()
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
339 << color.alpha();
f7f965742fd5 - converted to VBO
Santeri Piippo <crimsondusk64@gmail.com>
parents: 675
diff changeset
340 }

mercurial