void SS3OPiece::DrawForList() const { if (!HasGeometryData()) return; BindVertexAttribVBOs(); vboIndices.Bind(GL_ELEMENT_ARRAY_BUFFER); switch (primType) { case S3O_PRIMTYPE_TRIANGLES: { glDrawRangeElements(GL_TRIANGLES, 0, vertices.size() - 1, indices.size(), GL_UNSIGNED_INT, vboIndices.GetPtr()); } break; case S3O_PRIMTYPE_TRIANGLE_STRIP: { #ifdef GLEW_NV_primitive_restart if (globalRendering->supportRestartPrimitive) { // this is not compiled into display lists, but executed immediately glPrimitiveRestartIndexNV(-1U); glEnableClientState(GL_PRIMITIVE_RESTART_NV); } #endif glDrawRangeElements(GL_TRIANGLE_STRIP, 0, vertices.size() - 1, indices.size(), GL_UNSIGNED_INT, vboIndices.GetPtr()); #ifdef GLEW_NV_primitive_restart if (globalRendering->supportRestartPrimitive) { glDisableClientState(GL_PRIMITIVE_RESTART_NV); } #endif } break; case S3O_PRIMTYPE_QUADS: { glDrawRangeElements(GL_QUADS, 0, vertices.size() - 1, indices.size(), GL_UNSIGNED_INT, vboIndices.GetPtr()); } break; } vboIndices.Unbind(); UnbindVertexAttribVBOs(); }
void S3DOPiece::DrawForList() const { if (!HasGeometryData()) return; BindVertexAttribVBOs(); vboIndices.Bind(GL_ELEMENT_ARRAY_BUFFER); glDrawRangeElements(GL_TRIANGLES, 0, (vboAttributes.GetSize() - 1) / sizeof(S3DOVertex), vboIndices.GetSize() / sizeof(unsigned), GL_UNSIGNED_INT, vboIndices.GetPtr()); vboIndices.Unbind(); UnbindVertexAttribVBOs(); }
void SAssPiece::DrawForList() const { if (!HasGeometryData()) return; /* * since aiProcess_SortByPType is being used, * we're sure we'll get only 1 type here, * so combination check isn't needed, also * anything more complex than triangles is * being split thanks to aiProcess_Triangulate */ BindVertexAttribVBOs(); vboIndices.Bind(GL_ELEMENT_ARRAY_BUFFER); glDrawRangeElements(GL_TRIANGLES, 0, vertices.size() - 1, indices.size(), GL_UNSIGNED_INT, vboIndices.GetPtr()); vboIndices.Unbind(); UnbindVertexAttribVBOs(); }