Это мой код, который я использую для определения положения мыши в 3D-сцене:
void GetOGLPos(int x, int y, GLdouble &pX, GLdouble &pY, GLdouble &pZ){
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
winX = (float)x;
winY = (float)viewport[3]-(float)y;
glReadPixels(x, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &pX, &pY, &pZ);
}
Но я заметил одну плохую вещь ... 1-2 вызова этой функции на кадр делают загрузку процессора 100%, 3 или более вызовов 200% загрузки процессора (у меня 4 ядра, 1-2 вызова = 25%, 3 или больше звонков = 50%, я не могу сделать это выше, чем 50%, я думаю ..)
Есть ли другой способ сделать это эффективно? Я использую 4 вызова этой функции в каждом кадре, поэтому я знаю, какие области я должен отрисовать для моей сцены (я беру их с каждого угла экрана).
Также я использую это, чтобы знать, на какое место я указываю мышью, поэтому мне это нужно в режиме реального времени, но я бы хотел использовать меньше ЦП, потому что даже один вызов делает его 100% -ным использованием для одноядерных систем.
РЕДАКТИРОВАТЬ
Я пробовал метод glPushName (), но он даже медленнее, скорее, медленнее в моем GPU, чем в CPU. Кроме того, загрузка моего процессора составляет всего 0-1%, когда в моей программе не используется ни один вызов glReadPixels (). Странно то, что у меня высокая загрузка ЦП, но это не делает программу запаздывающей, как можно было ожидать при 100% использовании ... проблема возникает только тогда, когда я использую другие программы, когда моя программа включена, и их использование отстает .