Dynamically changing the colour of a VBO

Hey:)

So, I’ve got a voxel engine, which is a 3D array of ints, each number representing a different ID.
At the very start of the game, I bind a new VBO and calculate which vertices to send to it as a FloatBuffer. I combine some blocks’ faces to make it faster to render - this process can take some time, with large numbers of cubes.

My question, is that when I change the lighting, or remove/add a block to the chunk, I have to recalculate this every time!
It’s incredibly slow, and for a small chunk it can take about 1 second.

I’ve considered multithreading it (for lighting changes). This would work, and I’m pretty sure this is how minecraft does it for the sun’s lighting - if you change the light using commands, you can see each chunk slowly updates.

However, this wouldn’t work for destroying blocks…

I’ve also considered caching (Did i spell that right?) the VBOs faces which combine together, then when I want to update it I do it quickly and dirtily (Without optimising the amount of faces displayed). Then, in another thread, I can slowly work on the optimisation and switch it out when it’s finished.

Problem with this is it’d use way too much memory, I already get memory errors if I set the chunk size too large.

Any suggestions?