code: func (c *ColorM) Concat(other *ColorM) *ColorM {
  	if !c.isInited() {
  		return other
  	}
  	if !other.isInited() {
  		return c
  	}
  
  	lhsb := colorMIdentityBody
  	lhst := colorMIdentityTranslate
  	rhsb := colorMIdentityBody
  	rhst := colorMIdentityTranslate
  	if other.isInited() {
  		if other.body != nil {
  			lhsb = other.body
  		}
  		if other.translate != nil {
  			lhst = other.translate
  		}
  	}
  	if c.isInited() {
  		if c.body != nil {
  			rhsb = c.body
  		}
  		if c.translate != nil {
  			rhst = c.translate
  		}
  	}
  
  	return &ColorM{
  		// TODO: This is a temporary hack to calculate multiply of transposed matrices.
  		// Fix mulSquare implmentation and swap the arguments.
  		body: mulSquare(rhsb, lhsb, ColorMDim-1),
  		translate: []float32{
  			lhsb[0]*rhst[0] + lhsb[4]*rhst[1] + lhsb[8]*rhst[2] + lhsb[12]*rhst[3] + lhst[0],
  			lhsb[1]*rhst[0] + lhsb[5]*rhst[1] + lhsb[9]*rhst[2] + lhsb[13]*rhst[3] + lhst[1],
  			lhsb[2]*rhst[0] + lhsb[6]*rhst[1] + lhsb[10]*rhst[2] + lhsb[14]*rhst[3] + lhst[2],
  			lhsb[3]*rhst[0] + lhsb[7]*rhst[1] + lhsb[11]*rhst[2] + lhsb[15]*rhst[3] + lhst[3],
  		},
  	}
  }
docs: // Concat multiplies a color matrix with the other color matrix.
  // This is same as muptiplying the matrix other and the matrix c in this order.