Да, вы должны быть в состоянии. Я не уверен, какую версию OpenGL ES вы используете, но вы можете проявить изобретательность в том, как настроить вызовы к glDrawArrays и glVertexAttribPointer. Например, если вы хотите нарисовать первую половину массива вершин в виде точек, а вторую половину - в виде линий, вызовите glDrawArrays дважды, как.
glDrawArrays(mode, first, count)
glDrawArrays(GL_POINTS, 0, vertexarray.length / 2);
glDrawArrays(GL_LINES,vertexarray.length / 2, vertexarray.length/2);
Это означает, что элементы от 0 до vertexarray.length / 2 обозначают как GL_POINTS, а элементы с vertexarray.length / 2 до vertexarray.length обозначают как GL_LINES. Эта техника должна быть доступна для GL ES 1.0 и GL ES 2.0.
Если вы используете GL ES 2.0, вы можете свободно упаковать данные вершин в свой массив вершин и использовать параметры шага и указателя для glVertexAttribPointer. Допустим, ваша первая и все остальные вершины должны быть нарисованы в виде точек, а остальные - в виде линий.
glVertexAttribPointer(index, size, type, normalized, stride, pointer)
glVertexAttribPointer(handle, 3, GL_FLOAT, false, (4*6), vertexarray.position(0));
glDrawArrays(GL_POINTS, 0, vertexarray.length / 2)
glVertexAttribPointer(handle, 3, GL_FLOAT, false, (4*6), vertexarray.position(1));
glDrawArrays(GL_LINES, 0, vertexarray.length / 2)
Шаг (4 * 6) указывает, сколько байтов нужно пропустить, чтобы достичь начала следующего атрибута. Здесь у нас есть 4 байта на число с плавающей запятой и 6 значений с плавающей запятой, которые нужно пропустить, чтобы найти начало следующего атрибута. По сути, вы говорите GL здесь, что вам нужно прочитать за текущим x0, y0, z0 и следующим x1, y1, z1, чтобы достичь следующей вершины, которая нам небезразлична для x2, y2, z2. В этом примере это будет рисовать x0, y0, z0 и x2, y2, z2 как точки, а x1, y1, z1 как линии.