我研究了一些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=什么更好的方法?
是不是更快?或者更高效?
发布于 2011-12-29 03:43:44
它不会以任何方式更快,编译器将看到扩展的代码(预处理器在编译器到达之前展开宏)。
这只是一个方便,以节省键入几个字符,并使代码更具可读性-硬编码等效常量将变得不那么清楚。
https://stackoverflow.com/questions/8660454
复制相似问题