Я пытаюсь рисовать много линий на экране одновременно, используя полосы линий OpenGL, и производительность низкая, и мне было предложено использовать буфер вершин. Я новичок в буферах вершин - нужен ли мне новый буфер для каждой линии, которую я хочу нарисовать, или я использую один буфер для всех линий (они не обязательно связаны друг с другом)? На данный момент у меня есть список линий (где каждая строка представляет собой список вершин), но я не уверен, как их быстро отобразить. Любая помощь будет оценена по достоинству.
РЕДАКТИРОВАТЬ: Вот мой текущий код, который дает исключение: РЕДАКТИРОВАТЬ2: Перемотка буфера перед вызовом glVertexPointer зафиксировала исключение, поскольку пут продвигал буфер. Теперь это исправлено.
java.lang.IndexOutOfBoundsException: Required 1 remaining elements in buffer, only had0
at com.sun.gluegen.runtime.BufferFactory.rangeCheck(BufferFactory.java:247)
at com.sun.opengl.impl.GLImpl.glVertexPointer(GLImpl.java:27937)
for (int i = 0; i < lines.size(); i++)
{
List<Vertex> v = lines.get(i);
DoubleBuffer buf = BufferUtil.newDoubleBuffer(v.size() * 3);
Iterator<Vertex> iter = v.iterator();
while (iter.hasNext())
{
Vertex vt = iter.next();
buf.put(new double[] { vt.x, vt.y, vt.z });
}
gl.glVertexPointer(3, GL.GL_DOUBLE, 0, buf);
gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
gl.glDrawArrays(GL.GL_LINES, 0, v.size());
gl.glDisableClientState(GL.GL_VERTEX_ARRAY);
}
Надеюсь, это поможет лучше понять мою проблему (я знаю, что в этом коде есть проблемы, но пытаюсь изучить здесь).
Спасибо, Джефф