I was playing around with implementing something like Voxatron's engine (
http://www.lexaloffle.com/voxatron.php) in OpenGL - Voxatron uses a software renderer. It's essentially just a uniform grid of cubes, which are either on or off, and each have a color. The challenge here is the dynamism of the rendering - because it's software it's basically the same price to render a static scene versus a scene where almost all the cubes are changing (appearing/disappearing/changing color) from frame to frame, so it's used to great effect - explosions etc look awesome.
So I was wondering what'd be the best (fastest) way to do this with modern (but not cutting edge, e.g. tessellation) OpenGL - e.g. perhaps a solution that would also work with ES.
My first thought was to create a VBO with all points of the grid, and then feed in a new index buffer + color buffer every frame. And I suppose normal buffer, too. This seems like it's going to be very slow - seems like a lot of data to be pushing around. If I wanted to support a 128x32x128 voxel viewport, that's 500k cubes, and assuming maybe 25% of them were turned on per frame, that's 125k cubes, assume 2 faces visible on average, 250k faces, 4 points per face, 1,000,000 points, plus color, plus normals, etc. It just seems like a lot, but I haven't done any rendering coding in a long time, so maybe this is actually totally reasonable nowadays.
So basically I want to "rasterize" a uniform 128x32x128 grid of colored cubes every frame. What's the best approach?
Thanks much!