Это просто цикл, создающий массив координат для одного прямоугольника.Вы не задействуете структуры.Они конкретно говорят о интерполяции координат вершин, цветов и текстур.Поскольку вы просто устанавливаете цвет и пропускаете только вершины, интерполяция не требуется.
Если ваши координаты сетки постоянны, вы можете увидеть увеличение производительности, заполнив большой массив всеми вершинами только один раз за времяinit.
Затем можно увеличить аргумент first
до glDrawArrays , чтобы пройти по массиву и нарисовать отдельные фрагменты, упрощая операции с памятью в цикле рендеринга (поскольку у вас уже естьвершин в массиве для каждого вызова рендеринга).
// assuming you know the numbers beforehand
// also you should probably put this in a property
GLshort gridVerts[numRectangles][8];
- (void)init() {
for (int i = 0; i < numRectangles; i++) {
// calculate the vertices
GLshort vertices[] = {
bottomLeft.x, bottomLeft.y,
bottomRight.x, bottomRight.y,
topLeft.x, topLeft.y,
topRight.x, topRight.y
};
memcpy(&gridVerts[i][0], vertices, sizeof(GLshort) * 8));
}
}
- (void)drawFrame() {
glVertexPointer(2, GL_SHORT, 0, gridVerts);
for (int i = 0; i < numRectangles; i++) {
// calculate the color for this iteration
glColor4f(r, g, b, 1);
glDrawArrays(GL_TRIANGLE_STRIP, i * 4, 4);
}
}
Чтобы ответить на первоначальный вопрос о массивах структур, Буфер вершин в opengl имеет пример.