- if(which_mask & MESH_VERTEX) {
- if(!vbo_vertices) {
- glGenBuffers(1, &vbo_vertices);
- }
- glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices);
- if(num_vertices != (int)vertices.size()) {
- glBufferData(GL_ARRAY_BUFFER, vertices.size() * 3 * sizeof(float),
- &vertices[0], GL_STREAM_DRAW);
- }
- else {
- glBufferSubData(GL_ARRAY_BUFFER, 0, vertices.size() * 3 * sizeof(float),
- &vertices[0]);
- }
- num_vertices = vertices.size();
- }
+ if(!vbo_vertices)
+ glGenBuffers(1, &vbo_vertices);
+ glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices);
+ if(num_vertices != (int)vertices.size())
+ glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vec3),
+ &vertices[0], GL_STATIC_DRAW);
+ else
+ glBufferSubData(GL_ARRAY_BUFFER, 0, vertices.size() * sizeof(Vec3),
+ &vertices[0]);
+ glVertexAttribPointer(MESH_VERTEX, 3, GL_FLOAT, GL_FALSE, sizeof(Vec3), 0);
+
+ /* normals */
+
+ if(!vbo_normals)
+ glGenBuffers(1, &vbo_normals);
+ glBindBuffer(GL_ARRAY_BUFFER, vbo_normals);
+ if(num_vertices != (int)normals.size())
+ glBufferData(GL_ARRAY_BUFFER, normals.size() * sizeof(Vec3),
+ &normals[0], GL_STATIC_DRAW);
+ else
+ glBufferSubData(GL_ARRAY_BUFFER, 0, normals.size() * sizeof(Vec3),
+ &normals[0]);
+ glVertexAttribPointer(MESH_NORMAL, 3, GL_FLOAT, GL_FALSE, sizeof(Vec3), 0);
+
+ /* texture coordinates */
+
+ if(!vbo_tex_coords)
+ glGenBuffers(1, &vbo_tex_coords);
+ glBindBuffer(GL_ARRAY_BUFFER, vbo_tex_coords);
+ if(num_vertices != (int)tex_coords.size())
+ glBufferData(GL_ARRAY_BUFFER, tex_coords.size() * sizeof(Vec2), &tex_coords[0], GL_STATIC_DRAW);
+ else
+ glBufferSubData(GL_ARRAY_BUFFER, 0, tex_coords.size() * sizeof(Vec2), &tex_coords[0]);
+ glVertexAttribPointer(MESH_TEXTURE, 2, GL_FLOAT, GL_FALSE, sizeof(Vec2), 0);
+
+ num_vertices = vertices.size();
+
+ /* indices */
+
+ if(!ibo)
+ glGenBuffers(1, &ibo);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
+ if(num_indices != (int)indices.size())
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * 2,
+ &indices[0], GL_STATIC_DRAW);
+ else
+ glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, indices.size() * 2,
+ &indices[0]);