From 02a3f85fc18bebbebf32bd6b959922ab4707a950 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 24 Apr 2011 22:46:56 -0400 Subject: [PATCH] use two VBOs, filling in data VBO --- WFObj.cc | 14 +++++++++++--- WFObj.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/WFObj.cc b/WFObj.cc index e6ac16c..14221d8 100644 --- a/WFObj.cc +++ b/WFObj.cc @@ -109,7 +109,10 @@ WFObj::WFObj(loadfile_t lf, loadtexture_t lt) m_loadfile = loadfile; } if (m_valid) - glDeleteBuffers(1, &m_vbo); + { + glDeleteBuffers(1, &m_data_vbo); + glDeleteBuffers(1, &m_index_vbo); + } m_valid = false; clear(); } @@ -445,7 +448,6 @@ bool WFObj::buildVBO() { map flat_vertices; int vid = 0, texture_ref_count = 0; - glGenBuffers(1, &m_vbo); bool do_textures = m_loadtexture != NULL && m_vertices[VERTEX_TEXTURE].size() > 0; for (map >::iterator it = m_faces.begin(); @@ -490,7 +492,8 @@ bool WFObj::buildVBO() 3 + /* vertex coordinates */ 3 + /* normal coordinates */ (do_textures ? 2 : 0); /* texture coordinates */ - GLfloat * data = new GLfloat[n_floats_per_vref * flat_vertices.size()]; + size_t n_data_elements = n_floats_per_vref * flat_vertices.size(); + GLfloat * data = new GLfloat[n_data_elements]; for (map::iterator it = flat_vertices.begin(); it != flat_vertices.end(); it++) @@ -509,6 +512,11 @@ bool WFObj::buildVBO() data[base + 7] = m_vertices[VERTEX_TEXTURE][vr.texture - 1][1]; } } + glGenBuffers(1, &m_data_vbo); + glGenBuffers(1, &m_index_vbo); + /* move data from client side to GL */ + glBufferData(m_data_vbo, sizeof(GLfloat) * n_data_elements, data, + GL_STATIC_DRAW); delete[] data; return true; } diff --git a/WFObj.h b/WFObj.h index 5e218ad..9edecff 100644 --- a/WFObj.h +++ b/WFObj.h @@ -112,7 +112,7 @@ protected: loadtexture_t m_loadtexture; std::string m_current_material_name; bool m_valid; - GLuint m_vbo; + GLuint m_data_vbo, m_index_vbo; }; #endif