the geometry shader approach also came to my mind. but you can strip that down to a pure vertex shader approach. just prepare the mesh for all quads and then do a texture lookup to check which texture should be drawn; changing blocks then works via pixel_to_bmap.