private void render() {
		if (this.world != null) {
			Iterable<Chunk> chunks = this.world.getLoadedChunks();
			
			for (Chunk chunk : chunks) {
				for (int section = 0; section < 8; section++) {
					if (chunk.getVboId(section) == 0) {
						int vboId = glGenBuffersARB();
						
						chunk.setVboId(section, vboId);
						chunk.setVboUpdateRequired(section, true);
					}
					
					if (chunk.getVboUpdateRequired(section)) {
						FloatBuffer buffer = BufferUtils.createFloatBuffer(16*16*16*24); // TODO: Load from config
						
						int numElements = this.chunkSectionRenderer.renderChunkSection(buffer, this.world, chunk, section);
						
						buffer.flip();
						
						glBindBufferARB(GL_ARRAY_BUFFER_ARB, chunk.getVboId(section));
						glBufferDataARB(GL_ARRAY_BUFFER_ARB, buffer, GL_STATIC_DRAW_ARB);
						glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
						
						chunk.setVboUpdateRequired(section, false);
						chunk.setNumVboElements(section, numElements);
					}
					
					glPushMatrix();
					
					glEnableClientState(GL_VERTEX_ARRAY);
					
					glBindBufferARB(GL_ARRAY_BUFFER_ARB, chunk.getVboId(section));
					glVertexPointer(3, GL_FLOAT, 0, 0L);
					glDrawArrays(GL_TRIANGLES, 0, chunk.getNumVboElements(section));
					glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
					
					glDisableClientState(GL_VERTEX_ARRAY);
					
					glPopMatrix();
				}
			}
		}
	}