Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

Hier kann alles Allgemeine rund um Zusi 3 gefragt und beantwortet werden. Neuigkeiten zum Programm werden hier erscheinen.
Nachricht
Autor
H. Ww
Beiträge: 112
Registriert: 21.04.2024 07:22:49

Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#1 Beitrag von H. Ww »

Hallo,

ich habe nach längerer Zeit mal wieder mit dem Führerstandeditor ( Version 3.5.9.12 ) gearbeitet. Die Zeiten zum Öffnen einer Textur unter" Instrument bearbeiten" dauert ungewöhnlich lange. Man hat das Gefühl da passiert nichts.
Getestet habe ich das auch mit einer älteren Version 3.5.8.6 , aber da dauert es neuderdings auch sehr lange . Kann es sein, dass es mit dem gesamten letzten Beta Update zu tun hat? Hat noch jemand diese Probleme ? Es sind die 64 Bit Versionen installiert.

MfG
Zuletzt geändert von H. Ww am 19.03.2025 15:39:37, insgesamt 2-mal geändert.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 34133
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#2 Beitrag von Carsten Hölscher »

Wenn man die Datei ein zweites Mal öffnet, ist sie vom ersten Laden noch im Dateicache der Festplatte und lädt sehr viel schneller. Also vorsichtig sein mit solchen Vergleichen.

Carsten

H. Ww
Beiträge: 112
Registriert: 21.04.2024 07:22:49

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#3 Beitrag von H. Ww »

Carsten Hölscher hat geschrieben: 18.03.2025 23:13:53 Wenn man die Datei ein zweites Mal öffnet, ist sie vom ersten Laden noch im Dateicache der Festplatte und lädt sehr viel schneller. Also vorsichtig sein mit solchen Vergleichen.

Carsten
Dem ist leider nicht so, denn die lädt jetzt auch beim zweiten oder dritten Mal leider nicht schneller. Ich habe jetzt immer zwischen 45-60 s bis die Datei öffnet. Das ging vorher deutlich schneller. Das Testen von einem Beta Update dient meines Erachtens auch dazu evtl. Fehler aufzuzeigen, wenn etwas nicht mehr so funktioniert wie zuvor. Was die Firma Hölscher dann damit anfängt bleibt ihr überlassen. ;)

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 34133
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#4 Beitrag von Carsten Hölscher »

Der Code dafür ist seit Jahren unverändert, da muss man schon mal kurz schauen, ob es an was anderem liegen kann.
Also wenn Du wechselweise direkt nacheinander - ohne sonst was anderes am Rechner zu machen - neuen und alten Editor nimmst, dann geht ist das Laden immer beim neuen Editor deutlich langsamer als beim Alten?

Carsten

Benutzeravatar
Johannes
Beiträge: 3380
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#5 Beitrag von Johannes »

Carsten Hölscher hat geschrieben: 19.03.2025 12:28:56 Der Code dafür ist seit Jahren unverändert
Es ist ja auch seit Jahren langsam :)

Re: Liste der bekannten Programmfehler
(587) Führerstandeditor - Meldertextur bearbeiten: Fenster öffnet extrem langsam und unter hoher CPU-Last
(vermutlich auch im 3D-Editor). Grund ist, dass je nach Texturgroesse bis zu mehreren Millionen Mal die API-Funktion RedrawWindow ausgefuehrt wird, vermutlich einmal pro Pixel. Man sollte die Textur zunaechst in ein Offscreen-Bitmap zeichnen, bevor man sie darstellt.

Bugreport vom Juli 2015

H. Ww
Beiträge: 112
Registriert: 21.04.2024 07:22:49

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#6 Beitrag von H. Ww »

Hallo Carsten,
die neuste Beta Version der ZusiSim exe ist installiert, und die neuste Version des Ftd. Editors. Hier gibt es lange Öffnungszeiten.

Mit einer älteren Version des Ftd. Editors wurde die Öffnungszeit nicht schneller.

Wo ein evtl. Fehler liegen könnte, welcher die Öffnungszeiten verlängert, weiß ich nicht. Am PC selbst wurde nichts verändert oder erneuert. Ich kann dir nur schreiben wie es sich verhält, und was ich versucht habe.

Benutzeravatar
F. Schn.
Beiträge: 7548
Registriert: 24.10.2011 18:58:26

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#7 Beitrag von F. Schn. »

H. Ww hat geschrieben: 19.03.2025 14:19:05 Wo ein evtl. Fehler liegen könnte, welcher die Öffnungszeiten verlängert
Wahrscheinlich am Aufkommen von immer mehr HD- / UHD-Führerständen. Die Funktion war schon immer langsam, und zwar abhängig von der Texturgröße, und rein subjektiv kommt sie mir auch nicht langsamer vor als früher. Was Johannes da schreibt passt perfekt.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Benutzeravatar
Thomas U.
Beiträge: 3373
Registriert: 15.03.2004 16:39:15
Wohnort: Gelsenkirchen

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#8 Beitrag von Thomas U. »

Im 3D-Editor ist das ja nicht anders, wobei ich das Gefühl habe, dass es unter Win11 schlimmer geworden ist als mit Win7. Ein Testobjekt mit 4k-Textur braucht sagenhafte 2:40 Minuten, bis sich das "Mesh-Subset bearbeiten"-Fenster öffnet.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 34133
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#9 Beitrag von Carsten Hölscher »

Sind jetzt 2 Themen. Zusi-Versionsfrage scheint es dann ja nicht zu sein, sondern irgendwas am Rechner oder an der Textur muss der Grund sein.

Dass es unnötige Aufrufe gibt, schau ich mir mal an.

Carsten

H. Ww
Beiträge: 112
Registriert: 21.04.2024 07:22:49

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#10 Beitrag von H. Ww »

Carsten Hölscher hat geschrieben: 19.03.2025 23:11:19 Sind jetzt 2 Themen. Zusi-Versionsfrage scheint es dann ja nicht zu sein, sondern irgendwas am Rechner oder an der Textur muss der Grund sein.

Dass es unnötige Aufrufe gibt, schau ich mir mal an.

Carsten
Die Textur ist aus dem Zusi Bestand und 2048 x 2048 Pixel groß. Am Rechner wurde nichts verändert, ausser das die Beta Updates installiert wurden. Ein MS Update wurde auch zwischen der letzten Zusi Versionen und dem Update nicht installiert. Performance Einbrüche bei anderen Programmen gibt es auch nicht. Es bleibt spannend. Vielleicht findest du ja etwas .

MfG

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 34133
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#11 Beitrag von Carsten Hölscher »

Was soll ich denn da finden, Du schreibst ja hier, dass es keine Änderung mit dem Update der exe gab:
H. Ww hat geschrieben: 19.03.2025 14:19:05 Hallo Carsten,
die neuste Beta Version der ZusiSim exe ist installiert, und die neuste Version des Ftd. Editors. Hier gibt es lange Öffnungszeiten.

Mit einer älteren Version des Ftd. Editors wurde die Öffnungszeit nicht schneller.
Carsten

H. Ww
Beiträge: 112
Registriert: 21.04.2024 07:22:49

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#12 Beitrag von H. Ww »

Carsten Hölscher hat geschrieben: 21.03.2025 00:09:03 Was soll ich denn da finden, Du schreibst ja hier, dass es keine Änderung mit dem Update der exe gab:
H. Ww hat geschrieben: 19.03.2025 14:19:05 Hallo Carsten,
die neuste Beta Version der ZusiSim exe ist installiert, und die neuste Version des Ftd. Editors. Hier gibt es lange Öffnungszeiten.

Mit einer älteren Version des Ftd. Editors wurde die Öffnungszeit nicht schneller.
Carsten
Die ältere Version bezogen sich nur auf den Ftd.-Editor, nicht auf ZusiSim.exe. Fakt ist , dass sich die Zeiten mit dem Update bei mir verlängert haben. Warum weiß ich nicht, hatte eben sogar fast 2 min benötigt. Es bricht nicht die Welt zusammen, aber das Arbeiten mit dem Editor ist so nicht zielführend, schon ärgerlich.

MfG

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 34133
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#13 Beitrag von Carsten Hölscher »

Es geht in dem ganzen Thema doch um das Öffnen im ftd-Editor. Damit hat der Sim rein gar nichts zu tun.

Hatte mir das jetzt mal angeschaut: Im Editor wird der ganze Vorgang versehentlich beim Öffnen des Formulars ein 2. Mal ausgeführt. Das hab ich entfernt. Das Zeichnen auf ein 2. Bitmap bringt auch noch ein bißchen. Die Zeit geht dafür drauf, die Farben umzusortieren, da DX und Delphi eine andere RGB-Reihenfolge nutzen und der Alphawert entfernt werden muss. Das läuft aktuell pixelweise und ließe sich vermutlich durch irgendeinen schlauen Kniff beschleunigen, aber auf die Schnelle fiel mir nichts ein.

Carsten

H. Ww
Beiträge: 112
Registriert: 21.04.2024 07:22:49

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#14 Beitrag von H. Ww »

Carsten Hölscher hat geschrieben: 21.03.2025 10:57:53 Es geht in dem ganzen Thema doch um das Öffnen im ftd-Editor. Damit hat der Sim rein gar nichts zu tun.

Hatte mir das jetzt mal angeschaut: Im Editor wird der ganze Vorgang versehentlich beim Öffnen des Formulars ein 2. Mal ausgeführt. Das hab ich entfernt. Das Zeichnen auf ein 2. Bitmap bringt auch noch ein bißchen. Die Zeit geht dafür drauf, die Farben umzusortieren, da DX und Delphi eine andere RGB-Reihenfolge nutzen und der Alphawert entfernt werden muss. Das läuft aktuell pixelweise und ließe sich vermutlich durch irgendeinen schlauen Kniff beschleunigen, aber auf die Schnelle fiel mir nichts ein.

Carsten
Das ist super, dass du dich da gekümmert hast, vielen Dank dafür und ein schönes Wochenende.

MfG

Benutzeravatar
Johannes
Beiträge: 3380
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#15 Beitrag von Johannes »

Carsten Hölscher hat geschrieben: 21.03.2025 10:57:53Das läuft aktuell pixelweise und ließe sich vermutlich durch irgendeinen schlauen Kniff beschleunigen, aber auf die Schnelle fiel mir nichts ein.
Vielleicht magst du den Code ja der hier versammelten Schwarmintelligenz zum Fraß vorwerfen? :)

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 34133
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#16 Beitrag von Carsten Hölscher »

Hab's mal das Drumrum entfernt, Picture kommt aus der Komponente im Formular.

Code: Alles auswählen

D3DXCreateTextureFromFileEx( DXDevice,
                             pchar(Datei),
                             D3DX_DEFAULT,
                             D3DX_DEFAULT,
                             1,
                             0,
                             D3DFMT_A8R8G8B8,     
                             D3DPOOL_SYSTEMMEM,   
                             D3DX_FILTER_NONE,    
                             D3DX_FILTER_NONE,
                             0,
                             @Info,
                             nil,
                             Textur);

setlength(FarbenTemp, Picture.Bitmap.Width*Picture.Bitmap.Height);  // FarbenTemp:array of TD3DColor;
Textur.LockRect(0, t, nil, D3DLOCK_READONLY);         // t:TD3DLockedRect;
System.Move(t.pBits^, FarbenTemp[0], 4*length(FarbenTemp));
Textur.UnlockRect(0);
bmp:=Graphics.TBitmap.Create;
// hier geht >99% der Rechenzeit für die ganze Aktion rein:
for a:=0 to bmp.Height-1 do
begin
  for aa:=0 to bmp.Width-1 do
  begin
    bmp.Canvas.Pixels[aa, a]:=FarbeUmdrehen(FarbenTemp[a*bmp.Width+aa] and $ffffff);
  end;
end;
Picture.Bitmap.Assign(bmp);
bmp.Free;

Christian Sch.
Beiträge: 511
Registriert: 15.01.2009 23:29:56
Wohnort: Haidlfing

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#17 Beitrag von Christian Sch. »

Hallo Carsten,

gibt es denn für den Wert "D3DFMT_A8R8G8B8" des Parameters Format keinen Passenderen Wert?

D3DFMT_A8B8G8R8, D3DFMT_X8B8G8R8 springen mir da ins Auge.

oder

D3DFMT_UNKNOWN und D3DFMT_FROM_FILE

Quelle:
https://learn.microsoft.com/en-us/windo ... fromfileex
https://learn.microsoft.com/en-us/windo ... /d3dformat

Wie

Gruß
Christian

Benutzeravatar
Johannes
Beiträge: 3380
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#18 Beitrag von Johannes »

Was macht man in so einem Fall?

0. Lauffähiges Programm aus dem Beispielcode herstellen …
1. Messen statt raten!
Bild

OK, TCanvas.SetPixel macht offenbar für jeden Pixel einen Systemaufruf, das ist nicht sehr effizient.

2. Lesen

In der Delphi-Dokumentation von TBitmap, Abschnitt "Drawing on the Bitmap" https://docwiki.embarcadero.com/RADStud ... the_Bitmap steht: "An efficient way to draw images when you need to access individual pixels is to use the Vcl.Graphics.TBitmap.ScanLine property. For general-purpose usage, you can set up the bitmap pixel format to 24 bits and then treat the pointer returned from ScanLine as an array of RGB.". Die Doku verlinkt auch auf ein Beispiel: https://docwiki.embarcadero.com/CodeExa ... e_(Delphi)

3. Umsetzen und erneut messen:
Bild

Das Laden geht jetzt so schnell, dass ich den Button 33x betätigen musste (statt vorher 4x), um überhaupt genügend Samples zu bekommen. Insbesondere fällt das Vertauschen der Farben nicht ins Gewicht, kann also fürs erste so bleiben. Wahrscheinlich könnte man das Ganze auch mit BitBlt o.Ä. lösen statt manuell, oder pf32Bit und eines der von Christian genannten Texturformate verwenden, aber so funktioniert es wie vorher und ist schnell genug. Obwohl Delphi gefühlt den langsamstmöglichen Code generiert.

Fertiger Code:

Code: Alles auswählen

function FarbeUmdrehen(F: TD3DColor): TRGBTriple;
begin
  Result.rgbtBlue := Byte(F);
  Result.rgbtGreen := Byte(F shr 8);
  Result.rgbtRed := Byte(F shr 16);
end;

procedure TForm1.Button1Click(Sender: TObject);
type
  TRGBTripleArray = ARRAY[Word] of TRGBTriple;
  PRGBTripleArray = ^TRGBTripleArray;
  PD3DColor = ^TD3DColor;
var
  lockedRect: TD3DLockedRect;
  textur: IDirect3DTexture9;
  bmp: Vcl.Graphics.TBitmap;
  x, y: Integer;
  hr: HRESULT;
  imageInfo: D3DXIMAGE_INFO;
  SrcColor: PD3DColor;
  DestRow: PRGBTripleArray;
begin
  hr := D3DXCreateTextureFromFileEx( lpd3ddevice,
                               pchar('test.dds'),
                               D3DX_DEFAULT,
                               D3DX_DEFAULT,
                               1,
                               0,
                               D3DFMT_A8R8G8B8,
                               D3DPOOL_SYSTEMMEM,
                               D3DX_FILTER_NONE,
                               D3DX_FILTER_NONE,
                               0,
                               @imageInfo,
                               nil,
                               Textur);
  if Failed(hr) then
  begin
    raise Exception.Create(IntToHex(hr));
  end;

  hr := textur.LockRect(0, lockedRect, nil, D3DLOCK_READONLY);         // t:TD3DLockedRect;
  if failed(hr) then
  begin
    raise Exception.Create(IntToHex(hr));
  end;

  try
    bmp := Vcl.Graphics.TBitmap.Create;
    try
      bmp.PixelFormat := pf24Bit;
      bmp.Width := imageInfo.Width;
      bmp.Height := imageInfo.Height;
      for y := 0 to bmp.Height - 1 do
      begin
        SrcColor := PD3DColor(PByte(lockedRect.pBits) + y * lockedRect.Pitch);
        DestRow := bmp.ScanLine[y];
        for x := 0 to bmp.Width - 1 do
        begin
          DestRow[x] := FarbeUmdrehen(SrcColor^);
          Inc(SrcColor);
        end;
      end;
      Image1.Picture.Bitmap.Assign(bmp);
    finally
      bmp.Free;
    end;
  finally
    textur.UnlockRect(0);
  end;
end;

Benutzeravatar
Johannes
Beiträge: 3380
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#19 Beitrag von Johannes »

P.S. Spaßeshalber noch mit dem 32-Bit-Texturformat, d.h. DirectX und GDI übernehmen die Pixelschubserei für uns. Ich gebe zu, es ist nochmal deutlich schneller und der Code ist kürzer. Ich bin mir aber mit der Byte-Reihenfolge nicht so sicher – andererseits, im Test sind die Farben korrekt.

Bild

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
type
  TRGBQuadArray = ARRAY[Word] of TRGBQuad;
  PRGBQuadArray = ^TRGBQuadArray;
var
  lockedRect: TD3DLockedRect;
  textur: IDirect3DTexture9;
  bmp: Vcl.Graphics.TBitmap;
  y: Integer;
  hr: HRESULT;
  imageInfo: D3DXIMAGE_INFO;
begin
  hr := D3DXCreateTextureFromFileEx( lpd3ddevice,
                               pchar('test.dds'),
                               D3DX_DEFAULT,
                               D3DX_DEFAULT,
                               1,
                               0,
                               D3DFMT_A8R8G8B8,
                               D3DPOOL_SYSTEMMEM,
                               D3DX_FILTER_NONE,
                               D3DX_FILTER_NONE,
                               0,
                               @imageInfo,
                               nil,
                               Textur);
  if Failed(hr) then
  begin
    raise Exception.Create(IntToHex(hr));
  end;

  hr := textur.LockRect(0, lockedRect, nil, D3DLOCK_READONLY);
  if failed(hr) then
  begin
    raise Exception.Create(IntToHex(hr));
  end;

  try
    bmp := Vcl.Graphics.TBitmap.Create;
    try
      bmp.PixelFormat := pf32Bit;
      bmp.Width := imageInfo.Width;
      bmp.Height := imageInfo.Height;
      for y := 0 to imageInfo.Height - 1 do
      begin
        Move(
          (PByte(lockedRect.pBits) + y * lockedRect.Pitch)^,
          PRGBQuadArray(bmp.ScanLine[y])^,
          4 * imageInfo.Width)
      end;
      Image1.Picture.Bitmap.Assign(bmp);
    finally
      bmp.Free;
    end;
  finally
    textur.UnlockRect(0);
  end;
end;

H. Ww
Beiträge: 112
Registriert: 21.04.2024 07:22:49

Re: Ftd.- Editor sehr lange Bearbeitungszeiten seit Update

#20 Beitrag von H. Ww »

Hallo Johannes, hallo Carsten,

das liest sich gut für mich, auch ohne Ahnung , und lässt hoffen.

MfG

Antworten