Firstly, my code is in no way optimized. I also use the old glTranslatf () and all this because I donโt know a new way to do something. Here is my code:
public class GenChunk { Chunk c; VBO vbo = new VBO(); int worldSize = 16; int var4 = 16; // x int var5 = 16; // z int var6 = 16; // y int xOffSet = 0; int zOffSet = 0; public GenChunk() { gen(); } public void gen() { for (int x = xOffSet; x < worldSize; x++) { for (int z = zOffSet; z < worldSize; z++) { for (int y = 0; y < worldSize; y++) { glPushMatrix(); glTranslatef(x, z, y); newChunk(); glPopMatrix(); xOffSet += 16; zOffSet += 16; } } } } private void newChunk() { vbo = new VBO(); glBindBuffer(GL_ARRAY_BUFFER, vbo.vboVHandle); glVertexPointer(3, GL_FLOAT, 0, 0L); glBindBuffer(GL_ARRAY_BUFFER, vbo.vboCHandle); glColorPointer(3, GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); for (int y = 0; y < var6; y++) { for (int x = 0; x < var5; x++) { for (int z = 0; z < var6; z++) { glPushMatrix(); glTranslatef(x, z, y); glDrawArrays(GL_QUADS, 0, 24); glPopMatrix(); } } } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); }
}
And the VBO class:
public class VBO { public int vboVHandle; public int vboCHandle; public float size = 0.5f; public float color = 0.5f; public FloatBuffer vertices; public FloatBuffer colorData; public VBO(){ colorData = BufferUtils.createFloatBuffer(3 * 4 * 6); colorData.put(new float[]{ -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, color, color, color, -color, color, color, -color, color, color }); colorData.flip(); vertices = BufferUtils.createFloatBuffer(3 * 4 * 6); vertices.put(new float[] { -size, -size, size, size, -size, size, size, size, size, -size, size, size, -size, -size, -size, -size, size, -size, size, size, -size, size, -size, -size, -size, size, -size, -size, size, size, size, size, size, size, size, -size, -size, -size, -size, size, -size, -size, size, -size, size, -size, -size, size, size, -size, -size, size, size, -size, size, size, size, size, -size, size, -size, -size, -size, -size, -size, size, -size, size, size, -size, size, -size}); vertices.flip(); vboVHandle = glGenBuffers(); glBindBuffer(GL_ARRAY_BUFFER, vboVHandle); glBufferData(GL_ARRAY_BUFFER, vertices, GL_DYNAMIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); vboCHandle = glGenBuffers(); glBindBuffer(GL_ARRAY_BUFFER, vboCHandle); glBufferData(GL_ARRAY_BUFFER, colorData, GL_DYNAMIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); }
} I put out two pieces, so about 8000 cubes. I have heard of people receiving 10,000 cubes and supporting 60 FPS, but when I do two pieces, I get 1 FPS. My equipment is not a problem, it's decent. I know that I need to optimize my code like crazy, but I worry that even with optimization it will still be slow! Can someone tell me what I'm doing wrong here?