- function TEditor.Pick: Integer;
- var SelectBuffer: array[0..512] of TGLUInt;
- Viewport: TGLArrayi4;
- HitCount,i: Integer;
- HitZ,HitName: TGLUInt;
- begin
- glGetIntegerv(GL_VIEWPORT,@Viewport);
- glSelectBuffer(512,@SelectBuffer);
- glRenderMode(GL_SELECT);
- glInitNames;
- glPushName(0);
- glMatrixMode(GL_PROJECTION);
- glPushMatrix;
- glLoadIdentity;
- gluPickMatrix(mX, Viewport[3]-mY, 5.0, 5.0, Viewport);
- gluPerspective(45,CWIDTH/CHEIGHT,1,2048);
- oCamera.Move;
- oEditor.Render;
- glMatrixMode(GL_PROJECTION);
- glPopMatrix;
- HitCount:=glRenderMode(GL_RENDER);
- HitName:=High(TGLUInt);
- HitZ:=High(TGLUInt);
- for i:=0 to HitCount-1 do
- if SelectBuffer[(i*4)+1]<HitZ then
- begin
- HitName:=SelectBuffer[(i*4)+3];
- HitZ:=SelectBuffer[(i*4)+1];
- end;
- Result:=HitName;
- end;