Original Post
If we send a row major matrix to glMultMatrix() and again get the matrix using glGet() function, we get the same matrix. For example 12th, 13th and 14th elements always consist of translation elements for both row major and column major matrices. But here's a quote from the book "More OpenGL game programming": Also note that the product of the projection matrices is transposed before being passed to glTexGenv(). This is necessary because all three matrices store data in column major order. After transposing, the result is in row major order which is what glTexGenfv() expects. ... The author uses this way to get the projection matrix: gluPerspective( fovy, aspect_ratio, 1, 100 ); glGetFloatv( GL_PROJECTION_MATRIX, ( GLfloat*)&mat4_projection ); But I'm wondering! Both row major and column major matrices store the data the same way. ( m[0], m[1], etc ). But the way that they deal with rows or columns is different. I have seen an Open Source example that simply works with row major matrices and pre multiplies them and then sends the result to glMultMatrix(). I guess that something is going wrong in his article.