Cześć.
Jako hobby piszę od czasu do czasu grę i mam kilka pytań dotyczących renderowania.

Dotychczas renderowałem starą i wolną metodą:

 
glBegin(GL11.GL_QUADS);
			for(int j = 0; j<level.getGrid().getzSize();j++){
				for(int i = 0; i<level.getGrid().getxSize();i++){
					glVertex3f(i * squareSize + squareBorder,0,-(j+1) * squareSize + squareBorder);
					glVertex3f(i * squareSize + squareBorder,0,-j * squareSize - squareBorder);
					glVertex3f((i+1) * squareSize - squareBorder,0,-j * squareSize - squareBorder);
					glVertex3f((i+1) * squareSize - squareBorder,0,-(j+1) * squareSize + squareBorder);
				}
			}
		glEnd();

I myślę że juz czas przejść na nieco szybszy i mniej kłopotliwy sposób.
Czytałem trochę o VBO i innych metodach ale nie za bardzo rozumiem to co jest napisane w tutorialach.
W większości przypadków znajduję tylko jak coś zrobic bez wytłumaczenia dlaczego.
Na przykład:

public static int createVBOID() {
    IntBuffer buffer = BufferUtils.createIntBuffer(1);
    GL15.glGenBuffers(buffer);
//generowanie bufora? Co to w ogóle znaczy?
    return buffer.get(0);
//i zwracanie nieprzewidywalnej wartosci z nowoutworzonego bufora?
}
public static void vertexBufferData(int id, FloatBuffer buffer) {
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, id); //Bind buffer (also specifies type of buffer)
//przywiązywanie bufora do id? Tylko ze w argumentach nie widze zadnego bufora
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW); //Send up the data and specify usage hint.
}
public static void render() {
    GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertexBufferID);
    GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0);
//czyli ustawiamy na vertex array, potem przywiazujemy(domyslam sie ze tutaj wybieramy skąd brać vertices)    

    GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, colourBufferID);
    GL11.glColorPointer(4, GL11.GL_FLOAT, 0, 0);

    //If you are using IBOs:
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
    GL11.glDrawElements(GL11.GL_TRIANGLES, numberIndices, GL11.GL_UNSIGNED_INT, 0);
}
 

Do tego, czy ta metoda jest odpowiednia jeśli renderuję cały czas używając tych samych vertexów (tak wcześniej jak pokazałem w przykładzie mojego kodu)?