I'm still grasping exactly how OpenGL works under the hood, and I was curious about the vertex transformations in particular. Does the built in "ftransform()" funciton (in the vertex shader) do entire matrix multiplications (project * model * vertex)? Since the projection matrix typically includes multiple zero values, you should be able to break down the multiplications and only do the known-to-be non-zero multiplications.
If ftransform() does all those possibly unnecessary multiplications, would it not be more efficient to pass in the transform matrices as uniform variables an only do the necessary multiplications? Besides just saving a few multiplications, I wanted to make sure that OpenGL pre-computes the (project * model) transformation during an entire vertex buffer, so that it is not re-computed per vertex. If that is the case, you could save nearly 16 multiplications per vertex, but I assumed OpenGL was not that inefficient.
If using the uniform variables could be faster, this would make a huge difference when considering it happens for every single vertex. Please let me know if you have speed tested this topic. Thanks.