Thema: Delphi XE3?

Einzelnen Beitrag anzeigen

Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#323

AW: Delphi XE3?

  Alt 27. Aug 2012, 10:58
@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
  Mit Zitat antworten Zitat