Hi!
There is a 3D scene with my units. User selects units by rectangling them. Then this rectangle goes to function:
unsigned *gapi_processSelection (const Rectf *rect, unsigned h, GDrawer *drawer)
{
unsigned selectBuf[BUFFSIZE];
int viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
glSelectBuffer(BUFFSIZE, selectBuf);
(void)glRenderMode(GL_SELECT);
glInitNames();
glPushName(0);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
double wc = rect->lr.x + (rect->ul.x - rect->lr.x)/2;
double hc = rect->lr.y + (rect->ul.y - rect->lr.y)/2;
gluPickMatrix( (double) wc,
(double) hc,
(double) (rect->ul.x - rect->lr.x),
(double) (rect->ul.y - rect->lr.y),
viewport );
gapi_setupProjectionSelection();
drawer->drawSelectionBB();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
h = glRenderMode(GL_RENDER);
unsigned *selBuf = (unsigned *)malloc(sizeof(unsigned) * h);
for (int i = 0; i < h; i++) {
selBuf[i] = selectBuf[4 * i + 3];
}
return selBuf;
}
But after this, when scene is drawing in normal mode, all glCallList() calls is much-much slower (about in 4 times). What I doing wrong?
Thank you!