@MEissing: Vielen Dank für das Angebot, im Prinzip war das aber nichts anderes als folgendes:
Code:
function GetTickCount: Cardinal;
{$IFDEF MACOS}
begin
Result := AbsoluteToNanoseconds(UpTime) div 1000000;
end;
{$ENDIF MACOS}
{$IFDEF MSWINDOWS}
begin
Result :=
Winapi.Windows.GetTickCount;
end;
{$ENDIF}
function TForm1.RenderPane: Cardinal;
var
Row, Col: integer;
w, h, x, y: integer;
begin
Result := GetTickCount;
try
w := 30;
h := 25;
FBackBuffer.Canvas.BeginScene;
FBackBuffer.Canvas.Clear($FF000000);
FBackBuffer.Canvas.Font.Size := 30;
FBackBuffer.Canvas.Fill.Color := $FFFFFFFF;
for Row := 0 to 24 do
begin
y := Row * h;
for Col := 0 to 39 do
begin
x := Col * w;
FBackBuffer.Canvas.FillText(RectF(x, y, x + w, y + h), FGrid[Row, Col],
false, $FF, [], TTextAlign.taLeading);
end;
end;
FBackBuffer.Canvas.EndScene;
finally
Result := GetTickCount - Result;
end;
end;
Das Rendern des Grids dauert unter
GDI+ 2-10ms, mit D2D 30-100ms und auf OSX knapp 500ms. In unserem Anwendungsfall darf das nur <10ms kosten. Ich habe das mittels eines Font Rasterizers gelöst, da hat man eine 1Bit Textur für den Font und zeichnet das dann auf den Framebuffer. So gehts dann auch unter 4ms. Das andere Problem ist wesentlich schlimmer.
Wenn man eine einfache Listbox mit ein paar hundert Einträgen erstellt und scrollt, habe ich hier eine Rechenlast von >60% auf dem Mac.
Peter