- procedure TEditor.Pick(var pI,pK,pH,pM: Integer);
- var PixelData: array[0..9] of Longword;
- count,i: Longword;
- pX,pY: Integer;
- r: Longword;
- rv: array[0..3] of byte absolute r;
- begin
- //Init
- count:=0;
- r:=0;
- pI:=-1;
- pK:=-1;
- pH:=-1;
- pM:=-1;
- //mauscoords zubereiten
- pY:=round(CHEIGHT-mY);
- pX:=round(mX);
- if pX>0 then if pX<CWIDTH then dec(pX) else dec(pX,2);
- if pY>0 then if pY<CWIDTH then dec(pY) else dec(pY,2);
- //states setzen, rendern, zurück setzen
- glClearColor(1.0,1.0,1.0,1.0);
- glEnable(GL_SCISSOR_TEST);
- glDisable(GL_LIGHTING);
- glScissor(pX,pY,3,3);
- Render(True);
- glDisable(GL_SCISSOR_TEST);
- glEnable(GL_LIGHTING);
- glClearColor(0.15,0.15,0.15,0);
- //pixeldata füllen
- glReadPixels(pX,pY,3,3,GL_RGBA,GL_UNSIGNED_BYTE, @PixelData[0]);
- //zählen ob min 3 gleich
- for i:=0 to 9 do
- begin
- if PixelData[i]=PixelData[4] then inc(count);
- if (count>3) then
- begin
- r:=PixelData[4] and $FFFFFF;
- //auswerten
- pI:=rv[0];
- pK:=rv[1];
- pH:=rv[2];
- pM:=rv[3];
- Exit;
- end;
- end;
- end;