This adds features from #152 that I am adding here to make the PRs more modular
Specifically:
Adds methods to copy data from a gpu texture to an array on the cpu, (useful for debugging)
Changes binding of Texture3D to TextureCube which represents its actual backing data
Adds actual Texture3D bindings
Add 2D Texture array binding
Add a method to update the values in a texture without recreating it
This is needed to perform live updates of textures without having to rebind the pipeline (this is used in #152 to make voxels more easily and quickly changed on the gpu)
This adds features from #152 that I am adding here to make the PRs more modular
Specifically: