@@ -155,6 +155,22 @@ class RenderBasicSysTrans :
155155 }
156156 };
157157
158+ GLuint addIBO (void * iboData, size_t iboDataSize)
159+ {
160+ GLuint glid;
161+
162+ GL (glGenBuffers (1 , &glid));
163+ GL (glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, glid));
164+ GL (glBufferData (GL_ELEMENT_ARRAY_BUFFER, static_cast <GLsizeiptr>(iboDataSize), iboData, GL_STATIC_DRAW));
165+
166+ return glid;
167+ }
168+
169+ void removeIBO (GLuint glid)
170+ {
171+ GL (glDeleteBuffers (1 , &glid));
172+ }
173+
158174 GLuint sortObjects (const Core::Geometry::Vector& dir,
159175 const spire::ComponentGroup<ren::IBO>& ibo,
160176 const spire::ComponentGroup<SpireSubPass>& pass,
@@ -205,8 +221,7 @@ class RenderBasicSysTrans :
205221 }
206222
207223 std::string transIBOName = pass.front ().ibo .name + " trans" ;
208- result = iboMan.front ().instance_ ->addInMemoryIBO (sbuffer, pass.front ().ibo .data ->getBufferSize (), ibo.front ().primMode , ibo.front ().primType ,
209- numPrimitives, transIBOName);
224+ result = addIBO (sbuffer, pass.front ().ibo .data ->getBufferSize ());
210225 }
211226
212227 return result;
@@ -298,7 +313,7 @@ class RenderBasicSysTrans :
298313 {
299314 if (sortedObjects[index].mSortedID != 0 )
300315 {
301- iboMan. front (). instance_ -> removeInMemoryIBO (sortedObjects[index].mSortedID );
316+ removeIBO (sortedObjects[index].mSortedID );
302317 }
303318 sortedObjects[index].prevDir = dir;
304319 sortedObjects[index].mSortedID = sortObjects (dir, ibo, pass, iboMan);
@@ -583,7 +598,7 @@ class RenderBasicSysTrans :
583598 {
584599 if (pass.front ().renderState .mSortType == RenderState::TransparencySortType::CONTINUOUS_SORT)
585600 {
586- iboMan. front (). instance_ -> removeInMemoryIBO (iboID);
601+ removeIBO (iboID);
587602 }
588603 }
589604
0 commit comments