It's been a while because I have been trying out all kinds of optimization ideas. Using instancing per block type (and thus giving up depth based drawing, for now), every frame, 200,000+ blocks with randomly assigned block types, face rotations, and colors are drawn with constantly updating positions and 360 degree rotations, without lag! There is also global lighting with 4 general direction spot lights and 1 universal ambient light.
Also, I greatly improved the color variations (within each block) and was finally able to get multisampled anti-aliasing (MSAA) to work!
We now have Lambertian (aka. long distance directional) lighting and ambient lighting, as well as a set FPS (Frames Per Second)! Also, Fragile can draw about 160,000+ blocks per frame without lag, with each block drawn per frame having its own randomized block type, rotation, and color. This is demonstrated in the video below.
I ran into some problems with sending data to the GPU (Graphics Processing Unit) that took me hours to figure out: it turns out you have to pad data sent to the GPU in order for it to transfer properly. Yuck.
One interesting note is that Fragile can draw about 1,000,000 of these blocks with mild lag (choppiness and somewhat slow response time to input), but it is doable.
Seventeenth step complete:
(lighting from below)
Up next: storing the entire game world (units, components, etc.) and map in memory without using up a lot of RAM (Random Access Memory - aka. the memory applications use while running) but with quick response time. REGHEX and I have figured out a good system for this; I just have to implement it well.