Sat, 01 Feb 2020 15:33:57 +0200
wired renderstyle up
19  1  /* 
2  * LDForge: LDraw parts authoring CAD  
3  * Copyright (C) 2013  2018 Teemu Piippo  
4  *  
5  * This program is free software: you can redistribute it and/or modify  
6  * it under the terms of the GNU General Public License as published by  
7  * the Free Software Foundation, either version 3 of the License, or  
8  * (at your option) any later version.  
9  *  
10  * This program is distributed in the hope that it will be useful,  
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of  
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
13  * GNU General Public License for more details.  
14  *  
15  * You should have received a copy of the GNU General Public License  
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.  
17  */  
18  
19  #define GL_GLEXT_PROTOTYPES  
20  #include <GL/glu.h>  
21  #include <GL/glext.h>  
26  22  #include <QMessageBox> 
19  23  #include "gl/compiler.h" 
24  #include "documentmanager.h"  
25  #include "invert.h"  
26  #include "ring.h"  
27  
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

28  static const char* vertexShaderSource = R"( 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

29  #version 330 core 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

30  
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

31  layout(location=0) in vec3 position; 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

32  layout(location=1) in vec4 color; 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

33  layout(location=2) in vec3 normal; 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

34  out vec4 vColor; 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

35  out vec3 vFragPos; 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

36  out vec3 vNormal; 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

37  uniform mat4 modelMatrix; 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

38  uniform mat4 viewMatrix; 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

39  uniform mat4 projectionMatrix; 
37  40  uniform int fragmentStyle; 
41  
42  const int FRAGSTYLE_Normal = 0;  
43  const int FRAGSTYLE_BfcGreen = 1;  
44  const int FRAGSTYLE_BfcRed = 2;  
45  const int FRAGSTYLE_Random = 3;  
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

46  
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

47  void main() 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

48  { 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

49  mat3 normalMatrix = transpose(inverse(mat3(modelMatrix))); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

50  vNormal = normalize(normalMatrix * normal); 
37  51  if (fragmentStyle == FRAGSTYLE_BfcGreen) 
52  {  
53  vColor = vec4(0.2, 0.9, 0.2, 1.0);  
54  }  
55  else if (fragmentStyle == FRAGSTYLE_BfcRed)  
56  {  
57  vColor = vec4(0.9, 0.2, 0.2, 1.0);  
58  }  
59  else  
60  {  
61  vColor = color;  
62  }  
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

63  vFragPos = vec3(modelMatrix * vec4(position, 1.0)); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

64  gl_Position = projectionMatrix * viewMatrix * vec4(vFragPos, 1.0); 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

65  } 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

66  )"; 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

67  
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

68  static const char* fragmentShaderSource = R"( 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

69  #version 330 core 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

70  
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

71  in vec4 vColor; 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

72  in vec3 vFragPos; 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

73  in vec3 vNormal; 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

74  out vec4 fColor; 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

75  const vec3 lightPos = vec3(0.5, 0.5, 0.5); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

76  const vec4 lightColor = vec4(1.0, 1.0, 1.0, 1.0); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

77  const float ambientStrength = 0.7; 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

78  
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

79  void main() 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

80  { 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

81  vec4 ambient = ambientStrength * lightColor; 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

82  vec3 lightDirection = normalize(lightPos  vFragPos); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

83  vec4 diffuse = max(dot(vNormal, lightDirection), 0.0) * lightColor; 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

84  fColor = (ambient + diffuse) * vColor; 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

85  } 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

86  )"; 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

87  
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset

88  gl::Compiler::Compiler(const ldraw::ColorTable& colorTable, QObject* parent) : 
26  89  QObject{parent}, 
90  colorTable{colorTable}  
21  91  { 
92  }  
93  
19  94  gl::Compiler::~Compiler() 
95  {  
26  96  } 
19  97  
26  98  void gl::Compiler::initialize() 
99  {  
100  if (not this>initialized)  
101  {  
102  this>initializeOpenGLFunctions();  
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

103  for (int i = 0; i < gl::NUM_ARRAY_CLASSES; i += 1) 
26  104  { 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

105  auto& object = this>glObjects[i]; 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

106  object.program = new QOpenGLShaderProgram; 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

107  object.program>create(); 
28  108  const bool vertexShaderCompiled = object.program>addShaderFromSourceCode(QOpenGLShader::Vertex, ::vertexShaderSource); 
109  QString log;  
110  if (not vertexShaderCompiled)  
111  {  
112  log += "\n" + tr("Vertex shader:") + "\n" + object.program>log();  
113  }  
114  const bool fragmentShaderCompiled = object.program>addShaderFromSourceCode(QOpenGLShader::Fragment, ::fragmentShaderSource);  
115  if (not fragmentShaderCompiled)  
116  {  
117  log += "\n" + tr("Fragment shader:") + "\n" + object.program>log();  
118  }  
119  if (not vertexShaderCompiled or not fragmentShaderCompiled)  
120  {  
121  QMessageBox::critical(nullptr, tr("Shader compile error"), tr("Could not compile shaders.") + "\n" + log);  
122  std::exit(1);  
123  }  
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

124  object.program>link(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

125  object.program>bind(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

126  object.buffer.create(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

127  object.buffer.bind(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

128  object.buffer.setUsagePattern(QOpenGLBuffer::DynamicDraw); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

129  object.vertexArray.create(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

130  object.vertexArray.bind(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

131  object.program>enableAttributeArray(0); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

132  object.program>enableAttributeArray(1); 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

133  object.program>enableAttributeArray(2); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

134  constexpr int stride = sizeof(gl::Vertex); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

135  object.program>setAttributeBuffer(0, GL_FLOAT, offsetof(gl::Vertex, position), 3, stride); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

136  object.program>setAttributeBuffer(1, GL_FLOAT, offsetof(gl::Vertex, color), 4, stride); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

137  object.program>setAttributeBuffer(2, GL_FLOAT, offsetof(gl::Vertex, normal), 3, stride); 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

138  object.vertexArray.release(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

139  object.buffer.release(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

140  object.program>release(); 
26  141  } 
142  this>initialized = true;  
143  }  
19  144  } 
21  145  
146  void gl::Compiler::build(Model* model, DocumentManager* context)  
147  {  
22
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

148  this>boundingBox = {}; 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

149  std::vector<gl::Vertex> vboData[gl::NUM_ARRAY_CLASSES]; 
21  150  const std::vector<gl::Polygon> polygons = model>getPolygons(context); 
151  for (const gl::Polygon& polygon : polygons)  
152  {  
153  this>buildPolygon(polygon, vboData);  
154  }  
26  155  for (int arrayId = 0; arrayId < gl::NUM_ARRAY_CLASSES; arrayId += 1) 
21  156  { 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

157  auto& buffer = this>glObjects[arrayId].buffer; 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

158  auto& vector = vboData[arrayId]; 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

159  this>storedVertexCounts[arrayId] = vector.size(); 
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

160  buffer.bind(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

161  buffer.allocate(vector.data(), static_cast<int>(vector.size() * sizeof vector[0])); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

162  buffer.release(); 
21  163  } 
164  }  
165  
26  166  gl::ArrayClass classifyPolygon(const gl::Polygon& polygon) 
21  167  { 
168  switch (polygon.type)  
169  {  
170  case gl::Polygon::EdgeLine:  
26  171  return gl::ArrayClass::Lines; 
21  172  case gl::Polygon::Triangle: 
26  173  return gl::ArrayClass::Triangles; 
21  174  case gl::Polygon::Quadrilateral: 
26  175  return gl::ArrayClass::Quads; 
21  176  case gl::Polygon::ConditionalEdge: 
26  177  return gl::ArrayClass::ConditionalLines; 
21  178  } 
26  179  return gl::ArrayClass::Lines; 
21  180  } 
181  
26  182  [[maybe_unused]] 
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset

183  static QColor colorFromId(ldraw::Id id) 
21  184  { 
185  // Calculate a color based from this index. This method caters for  
186  // 16777216 objects. I don't think that will be exceeded anytime soon.  
187  const int r = (id.value / 0x10000) % 0x100;  
188  const int g = (id.value / 0x100) % 0x100;  
189  const int b = id.value % 0x100;  
190  return {r, g, b};  
191  }  
192  
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

193  void gl::Compiler::buildPolygon(gl::Polygon polygon, std::vector<gl::Vertex>* vboData) 
21  194  { 
26  195  const gl::ArrayClass vboClass = classifyPolygon(polygon); 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

196  std::vector<gl::Vertex>& vertexBuffer = vboData[static_cast<int>(vboClass)]; 
21  197  auto vertexRing = iter::ring(polygon.vertices, polygon.numPolygonVertices()); 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

198  reserveMore(vertexBuffer, polygon.numPolygonVertices()); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

199  const QColor color = this>getColorForPolygon(polygon); 
22
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

200  for (unsigned int i = 0; i < polygon.numPolygonVertices(); i += 1) 
21  201  { 
33
4c41bfe2ec6e
replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset

202  const glm::vec3& v1 = vertexRing[i  1]; 
4c41bfe2ec6e
replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset

203  const glm::vec3& v2 = vertexRing[i]; 
4c41bfe2ec6e
replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset

204  const glm::vec3& v3 = vertexRing[i + 1]; 
22
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

205  this>boundingBox.consider(polygon.vertices[i]); 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

206  gl::Vertex& vertex = vertexBuffer.emplace_back(); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

207  vertex.position = polygon.vertices[i]; 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

208  vertex.normal = glm::normalize(glm::cross(v1  v2, v3  v2)); 
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

209  vertex.color = glm::vec4{color.redF(), color.greenF(), color.blueF(), color.alphaF()}; 
21  210  } 
211  }  
212  
26  213  QColor gl::Compiler::getColorForPolygon(const gl::Polygon& polygon) 
21  214  { 
215  QColor color;  
26  216  // For normal colors, use the polygon's color. 
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset

217  if (polygon.color == ldraw::mainColor) 
21  218  { 
26  219  color = {255, 255, 64}; // mainColorRepresentation(); 
21  220  } 
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
34
diff
changeset

221  else if (polygon.color == ldraw::edgeColor) 
21  222  { 
26  223  // Edge color is black, unless we have a dark background, in which case lines need to be bright. 
224  color = Qt::black; //luma(config::backgroundColor()) > 40 ? Qt::black : Qt::white;  
21  225  } 
226  else  
227  {  
26  228  // Not main or edge color, use the polygon's color as is. 
229  color = this>colorTable[polygon.color].faceColor;  
21  230  } 
231  return color;  
232  }  
233  
33
4c41bfe2ec6e
replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset

234  glm::vec3 gl::Compiler::modelCenter() const 
22
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

235  { 
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

236  return boxCenter(this>boundingBox); 
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

237  } 
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

238  
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

239  double gl::Compiler::modelDistance() const 
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

240  { 
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

241  return longestMeasure(this>boundingBox); 
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

242  } 
6da867fa5429
commit work on GL rendering
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset

243  
26  244  void gl::Compiler::bindVertexArray(gl::ArrayClass arrayClass) 
245  {  
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

246  auto& object = this>glObjects[static_cast<int>(arrayClass)]; 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

247  object.vertexArray.bind(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

248  object.program>bind(); 
26  249  } 
250  
251  void gl::Compiler::releaseVertexArray(gl::ArrayClass arrayClass)  
252  {  
27
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

253  auto& object = this>glObjects[static_cast<int>(arrayClass)]; 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

254  object.program>release(); 
c57fb7a5ffa3
commit work done on plugging vao to the gl renderer, renders nonsense for now
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset

255  object.vertexArray.release(); 
26  256  } 
257  
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

258  std::size_t gl::Compiler::vertexCount(const gl::ArrayClass arrayClass) const 
28  259  { 
34
1de2b8d64e9f
added some sort of lighting
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset

260  return this>storedVertexCounts[static_cast<int>(arrayClass)]; 
28  261  } 