Вы сказали, что вам не нужен код, но, честно говоря, я мог бы попытаться дать пушистое объяснение множеством слов, или я мог бы просто объяснить это кратко в коде.
Допустим, у вас есть N вершин в вашем буфере вершин.Кажется, что вы хотите что-то вроде этого:
int num_extra_verts = N % 3;
int num_tri_verts = N - num_extra_verts;
// Draw triangles
if (num_tri_verts > 0)
glDrawArrays(GL_TRIANGLES, 0, num_tri_verts);
// Draw point or line
if (num_extra_verts == 1)
glDrawArrays(GL_POINTS, num_tri_verts, 1);
else if (num_extra_verts == 2)
glDrawArrays(GL_LINES, num_tri_verts, 2); // GL_LINE_LOOP not needed for single line
Если вы продолжаете добавлять новые точки в конец буфера вершин, это будет рисовать все треугольники, созданные до сих пор, плюс любую отдельную точку или линию дляпоследний, еще не весь треугольник.