I've been having issues with transformations using the * operator between a mat4 and a vec4. I have isolated all matrix transformations in a 'mul' function and discovered that these two implementations give different results (as seen from the result of the transformations on the scene):

Code :
vec4 mul1(mat4 matrix, vec4 vector)
{
  return matrix * vector; // Doesn't do the expected transformation
}
 
vec4 mul2(mat4 matrix, vec4 vector)
{
  return vector * transpose(matrix); // Does the expected transformation
}

It was my understanding that OpenGL should consider the vector as a column vector in the first case and as a row vector in the second case. Because of this, I was expecting those two functions to be equivalent (apart for the row/column-ness of the resulting vector, but that should be ignored...?). I even confirmed this using Maple and didn't see anything to indicate that the * operator behaves differently in the GLSL spec.

This is in a #version 140 shader using the latest drivers for my nvidia card.

Any idea what I am missing here?