Use symbolic names for vertex attributes
Pack texture ID with the other required attributes

The fragment shader can now treat v0 and v1 as dedicated to
always-required attributes in a stable layout. The layout of the v2 and
v3 registers will vary depending on which effects are in use.