I think the meaning of [t1, t2] is fairly unambiguous:  t2( t1( x))
That is, the first function in the list is executed first.

The more difficult question is how "t1 * t2" should be interpreted. Currently, multiplied transforms chain in the opposite order as a list of transforms, so:
```
t1 * t2 == [t2, t1]
```
This will be understood by most people familiar with linear algebra or traditional matrix-driven scenegraphs.

..But a complication is that the matrices generated in vispy.util.transforms are transposed relative to the linear algebra expectation, and likewise we use vertex arrays shaped (N,2) or (N,3).

So whereas people familiar with linear algebra will be tempted to think
```
A * B  ===  [B, A]
```
In vispy the matrices must be multiplied in the reverse order like ```np.dot(B, A)```.