This PR closes #21 and #22. We switch from representing volumes as arrays-of-arrays-of-arrays to using 3D ndarrays. This provides a modest performance boost and enables much more compact code via modular plugins like ndarray-ops.
We also now collapse all layers before painting--i.e., instead of painting each layer separately to canvas, we alpha composite all layers into a single rgb ndarray, then blit the result to canvas once. This takes us from O(n) to nearly O(1) time as a function of number of layers loaded.
Note: we're now drawing on node libraries (ndarray and ndarray-ops); this is probably a good time to switch the other dependencies out too and use a more general packaging solution (e.g., browserify).
This PR closes #21 and #22. We switch from representing volumes as arrays-of-arrays-of-arrays to using 3D ndarrays. This provides a modest performance boost and enables much more compact code via modular plugins like ndarray-ops.
We also now collapse all layers before painting--i.e., instead of painting each layer separately to canvas, we alpha composite all layers into a single rgb ndarray, then blit the result to canvas once. This takes us from O(n) to nearly O(1) time as a function of number of layers loaded.
Note: we're now drawing on node libraries (ndarray and ndarray-ops); this is probably a good time to switch the other dependencies out too and use a more general packaging solution (e.g., browserify).