код gluPickMatrix от Mesa - PullRequest
       0

код gluPickMatrix от Mesa

0 голосов
/ 28 декабря 2011

Я изучал некоторые коды OpenGL и нашел код Mesa для функции gluPickMatrix:

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] = что-то?

Это быстрее?или эффективнее?

1 Ответ

1 голос
/ 28 декабря 2011

Это никак не быстрее, компилятор увидит расширенный код (препроцессор расширяет макросы до того, как компилятор доберется до него).

Это просто удобство для сохранения ввода нескольких символов и повышения читабельности кода - жесткое кодирование эквивалентных констант будет гораздо менее понятным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...