来自Mesa的gluPickMatrix代码

我正在研究一些OpenGL代码,我找到了gluPickMatrix函数的Mesa代码:

void gluPickMatrix(GLdouble x, GLdouble y, GLdouble width, GLdouble height, GLint viewport[4]) { GLfloat m[16]; GLfloat sx, sy; GLfloat tx, ty; sx = viewport[2] / width; sy = viewport[3] / height; tx = (viewport[2] + 2.0 * (viewport[0] - x)) / width; ty = (viewport[3] + 2.0 * (viewport[1] - y)) / height; #define M(row, col) m[col*4+row] M(0, 0) = sx; M(0, 1) = 0.0; M(0, 2) = 0.0; M(0, 3) = tx; M(1, 0) = 0.0; M(1, 1) = sy; M(1, 2) = 0.0; M(1, 3) = ty; M(2, 0) = 0.0; M(2, 1) = 0.0; M(2, 2) = 1.0; M(2, 3) = 0.0; M(3, 0) = 0.0; M(3, 1) = 0.0; M(3, 2) = 0.0; M(3, 3) = 1.0; #undef M glMultMatrixf(m); } 

我在这种情况下的疑问是使用M宏和’col * 4 + row’操作。 据我所知,这个等式是获取选择矩阵的索引,然后为它们赋值。

这个宏是一个比简单地使用m [0] =更好的方法吗?

它更快吗? 还是更有效率?

它不会以任何方式加速,编译器将看到扩展的代码(预处理器在编译器获取之前扩展宏)。

保存键入少量字符只是一种方便,并使代码更具可读性 – 对等效常量进行硬编码将不太清楚。