Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
Delphi 10.4 Sydney
|
AW: Performanceproblem mit Firemonkey
16. Okt 2019, 11:24
Delphi-Quellcode:
procedure TTileItem.Paint;
var
w, h: Single;
R: TRectF;
{$IFDEF USEGPU}
Bmp: TTexture;
{$ELSE}
Bmp: TBitmap;
{$ENDIF}
begin
if Locked then
Exit;
if assigned(FOnBeforePaint) then
FOnBeforePaint(self);
PerformUpdate;
w := Width * FZoomFactor;
h := Height * FZoomFactor;
R := RectF((Width - w) / 2, (Height - h) / 2, w, h);
{$IFDEF BACKBUFFER}
if FActive then
Bmp := FSelected
else
Bmp := FNormal;
if Bmp <> nil then
begin
{$IFDEF USEGPU}
TCustomCanvasGpu(Canvas).DrawTexture(R, TRectF.Create(0, 0, Bmp.Width,
Bmp.Height), ALPrepareColor(TCustomCanvasGpu.ModulateColor,
AbsoluteOpacity), // https://quality.embarcadero.com/browse/RSP-15432
Bmp);
{$ELSE}
Canvas.DrawBitmap(Bmp, TRectF.Create(0, 0, Bmp.Width, Bmp.Height), R,
AbsoluteOpacity, true);
{$ENDIF}
end;
{$ELSE}
// Ich nehme an, dass hier wird dann zu oft aufgerufen, so dass du ein das Gefühl der Langsamkeit hast?! Wäre es nicht schlauer DefaultRenderItem(...) nur dann aufzurufen, wenn R oder FActive sich im Vergleich zum Letzten Paint-Aufruf geändert haben und ansonsten ein Offscreen-Bitmap/Backbuffer zu verwenden. So wie du es ein paar Zeilen höher machst, wenn BACKBUFFER definiert wäre?
DefaultRenderItem(Canvas, R, FImage, FActive);
{$ENDIF}
end;
|
|
Zitat
|