88
99#include " base/ccMacros.h"
1010#include " renderer/ccGLStateCache.h"
11- #include " CCMeshPart.h"
1211#include " CCObjLoader.h"
1312#include " CCSprite3DDataCache.h"
1413
@@ -97,28 +96,28 @@ bool RenderMeshData::initFrom(std::vector<float>& posions, std::vector<float>& n
9796
9897Mesh::Mesh ()
9998:_vertexBuffer(0 )
100- , _parts(nullptr )
101- , _partCount(0 )
99+ , _indexBuffer(0 )
100+ , _primitiveType(PrimitiveType_TRIANGLES)
101+ , _indexFormat(IndexFormat_INDEX16)
102+ , _indexCount(0 )
102103{
103104
104105
105106}
106107
107108Mesh::~Mesh ()
108109{
109- releaseMeshPart ();
110-
111- freeBuffers ();
110+ cleanAndFreeBuffers ();
112111}
113112
114- void Mesh::releaseMeshPart ()
115- {
116- // for (unsigned int i = 0; i < _partCount; ++i)
117- // {
118- // delete _parts[i] ;
119- // }
120- // delete _parts ;
121- }
113+ // void Mesh::releaseMeshPart()
114+ // {
115+ // glDeleteBuffers(1, &_indexBuffer);
116+ // _primitiveType = PrimitiveType_TRIANGLES;
117+ // _indexFormat = IndexFormat_INDEX16 ;
118+ // _indexCount = 0;
119+ // _indexBuffer = 0 ;
120+ // }
122121
123122Mesh* Mesh::create (std::vector<float >& posions, std::vector<float >& normals, std::vector<float >& texs, const std::vector<unsigned short >& indices)
124123{
@@ -144,18 +143,27 @@ bool Mesh::init(std::vector<float>& posions, std::vector<float>& normals, std::v
144143 return true ;
145144}
146145
147- void Mesh::freeBuffers ()
146+ void Mesh::cleanAndFreeBuffers ()
148147{
149148 if (glIsBuffer (_vertexBuffer))
150149 {
151150 glDeleteBuffers (1 , &_vertexBuffer);
152151 _vertexBuffer = 0 ;
153152 }
153+
154+ if (glIsBuffer (_indexBuffer))
155+ {
156+ glDeleteBuffers (1 , &_indexBuffer);
157+ _indexBuffer = 0 ;
158+ }
159+ _primitiveType = PrimitiveType_TRIANGLES;
160+ _indexFormat = IndexFormat_INDEX16;
161+ _indexCount = 0 ;
154162}
155163
156164void Mesh::buildBuffer ()
157165{
158- freeBuffers ();
166+ cleanAndFreeBuffers ();
159167
160168 glGenBuffers (1 , &_vertexBuffer);
161169 glBindBuffer (GL_ARRAY_BUFFER, _vertexBuffer);
@@ -165,39 +173,10 @@ void Mesh::buildBuffer()
165173 &_renderdata._vertexs [0 ],
166174 GL_STATIC_DRAW);
167175 glBindBuffer (GL_ARRAY_BUFFER, 0 );
168- }
169-
170- // void Mesh::addMeshPart(PrimitiveType primitiveType, IndexFormat indexformat, void* indexData, unsigned int indexCount)
171- // {
172- // MeshPart* part = MeshPart::create(this, _partCount, primitiveType, indexformat, indexData, indexCount);
173- // if (part)
174- // {
175- // // Increase size of part array and copy old subets into it.
176- // MeshPart** oldParts = _parts;
177- // _parts = new MeshPart*[_partCount + 1];
178- // for (unsigned int i = 0; i < _partCount; ++i)
179- // {
180- // _parts[i] = oldParts[i];
181- // }
182- //
183- // // Add new part to array.
184- // _parts[_partCount++] = part;
185- //
186- // // Delete old part array.
187- // delete[] (oldParts);
188- // }
189- // }
190-
191- void Mesh::restore ()
192- {
193- releaseMeshPart ();
194-
195- buildBuffer ();
196176
197- GLuint vbo;
198- glGenBuffers (1 , &vbo);
177+ glGenBuffers (1 , &_indexBuffer);
199178
200- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, vbo );
179+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, _indexBuffer );
201180
202181 unsigned int indexSize = 2 ;
203182 IndexFormat indexformat = IndexFormat_INDEX16;
@@ -209,7 +188,13 @@ void Mesh::restore()
209188 _primitiveType = PrimitiveType_TRIANGLES;
210189 _indexFormat = indexformat;
211190 _indexCount = _renderdata._indices .size ();
212- _indexBuffer = vbo;
191+ }
192+
193+ void Mesh::restore ()
194+ {
195+ cleanAndFreeBuffers ();
196+
197+ buildBuffer ();
213198
214199}
215200
0 commit comments