Делаю выбор объектов с помощью glReadPixels
var
n : Integer;
pixel : array[0..3*4-1] of GLubyte;
begin
state.select:=True;
glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
FParent.Draw(False);
glReadPixels ( x, FParent.Height-y, 2, 2, GL_RGB, GL_UNSIGNED_BYTE, @pixel );
n:=Round((pixel[0]+pixel[1] shl 8+pixel[2] shl 16)/32-1);
glReadPixels ничего не пишет в буфер, т.е., например до вызова glReadPixels pixel=(208, 59, 160, 1, 69, 197, 68, 0, 92, 3, 0, 0) и после вызова значения в массиве не меняются. Если обнулять, то после вызова будут соответственно нули.
Контекст opengl в программе один, кроме того FParent.Draw(False) делает его активным, без смены буферов. Код почти полностью взял из предыдущего проекта.