Seite 5 von 7

Re: Diskussionen zu 64 bit beta

Verfasst: 18.08.2022 12:17:14
von Leonard K.
Carsten Hölscher hat geschrieben: 16.08.2022 22:18:31 Leonards Fehler konnte ich übrigens nicht nachstellen.
Der Stack-Überlauf kommt bei mir auch nach dem letzten Update. Welches Betriebssystem war denn bei dem Test im Einsatz? Bei dem NAN-Problem ist es evtl. ja auch so, dass es nur unter Windows 10 und 11 auftritt, nicht aber mit Windows 7. Bei mir läuft Windows 11, ich habe es aber auch mal mit Windows 10 getestet (gleiches Ergebnis). Windows 7 steht mir leider nicht zur Verfügung.

Re: Diskussionen zu 64 bit beta

Verfasst: 18.08.2022 21:03:00
von F. Schn.
F. Schn. hat geschrieben: 28.06.2022 21:03:17 Ich habe mal auf Verdacht den Schlüssel HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management\AllocationPreference auf 0x100000 gesetzt (siehe viewtopic.php?p=257903#p257903 ) und habe den Rechner neu gestartet. Jetzt stürzt Zusi schon beim ersten ganz normalen Start (Streckenbaututorium, Üg) mit einer SIGSEGV ab.
Ich würde mal melden, dass es bei mir in der 3.4.99.37 weiterhin auftritt. Ich kann hier nur vorschlagen, aber ich fürchte, das ist die einfachste Repro, die sich finden lässt, und ich habe so ein bisschen die Hoffnung, dass die von Jonezz25 und vielleicht auch Adrian oder sogar Leonard gemeldete Fehler dann automatisch weg sind.

Re: Diskussionen zu 64 bit beta

Verfasst: 24.08.2022 15:48:44
von Carsten Hölscher

Code: Alles auswählen

function TD3DZusiFont.TexturGenerieren(const strFontName: PChar; Hoehe, Flags: DWORD):HResult;
type
  pBit = array[0..0] of DWORD;
  PpBit = ^pBit;
var
  hndFont,
  hndFontOld: Windows.HFONT;  //Font-Handles
  hDC: Windows.HDC;
  hndBitmap: HBITMAP;         //Bmp-Handle
  hbmOld: HGDIOBJ;
  ErsterDurchlauf: Boolean;   // Flag clear after first run
  pBitmapBits: PpBit;         //Pointer auf Device-Independent bmp
  bmpInfo: TBitmapInfo;
  x, y: DWORD;
  d3dlr: TD3DLockedRect;
  pDstRow: PByte;
  pDst16: PWord;
  bAlpha: Byte;               // 4-bit measure of pixel intensity
  a: LongWord;
  FontName:TFontName;
begin
  StrLCopy(FontName, strFontName, SizeOf(FontName) div SizeOf(Char));
  FontName[SizeOf(FontName) div SizeOf(Char) - 1]:= #0;
  FontHoehe:=Hoehe;
  FontFlags:=Flags; // or D3DFONT_FILTERED;

  hndFont:=0;
  hndFontOld:=0;
  hndBitmap:=0;
  hbmOld := 0;

  // Assume we will draw fonts into texture without scaling unless the
  // required texture size is found to be larger than the device max
  Skalierungsfaktor:=1.0;

  hDC:=CreateCompatibleDC(0);
  SetMapMode(hDC, MM_TEXT);

  Result:=CreateGDIFont(FontName, hDC, hndFont);
  if succeeded(Result) then
  begin
    hndFontOld:=SelectObject(hDC, hndFont);

    // Calculate the dimensions for the smallest power-of-two texture which
    // can hold all the printable characters
    TexturHoehe:=128;
    TexturBreite:=TexturHoehe;
    Result:=PaintAlphabet(strFontName, hDC, True);
    while (Result=D3DERR_MOREDATA) do
    begin
      TexturBreite:=TexturBreite*2;
      TexturHoehe:=TexturHoehe*2;
      Result:=PaintAlphabet(strFontName, hDC, True);
    end;

    //Texturgröße der Graka überschritten ?
    if (TexturBreite>d3dCaps.MaxTextureWidth) then
    begin
      Skalierungsfaktor:=d3dCaps.MaxTextureWidth/TexturBreite;
      TexturHoehe:=d3dCaps.MaxTextureWidth;
      TexturBreite:=TexturHoehe;

      ErsterDurchlauf:= True;
      repeat
        // If we've already tried fitting the new text, the scale is still
        // too large. Reduce and try again.
        if not ErsterDurchlauf then Skalierungsfaktor:=Skalierungsfaktor * 0.9;

        // The font has to be scaled to fit on the maximum texture size; our
        // current font is too big and needs to be recreated to scale.
        DeleteObject(SelectObject(hDC, hndFontOld));

        Result:=CreateGDIFont(FontName, hDC, hndFont);
        if succeeded(Result) then
        begin
          hndFontOld:=SelectObject(hDC, hndFont);
          ErsterDurchlauf:=False;

          Result:=PaintAlphabet(strFontName, hDC, True);
        end
      
      until Result<>D3DERR_MOREDATA;
    end;

    if succeeded(Result) then
    begin
      Result:=pIDirect3DDevice9^.CreateTexture( TexturBreite,
                                                TexturHoehe,
                                                1,
                                                0,
                                                D3DFMT_A4R4G4B4,
                                                Zusi_TexStandardPool,
                                                FontTexture,
                                                nil);
      if succeeded(Result) then
      begin
        // Prepare to create a bitmap
        ZeroMemory(@(bmpInfo.bmiHeader), SizeOf(TBitmapInfoHeader));
        bmpInfo.bmiHeader.biSize:=SizeOf(TBitmapInfoHeader);
        bmpInfo.bmiHeader.biWidth:=TexturBreite;
        bmpInfo.bmiHeader.biHeight:=TexturHoehe;
        bmpInfo.bmiHeader.biPlanes:=1;
        bmpInfo.bmiHeader.biCompression:=BI_RGB;
        bmpInfo.bmiHeader.biBitCount:=32;
        bmpInfo.bmiHeader.biHeight:=-bmpInfo.bmiHeader.biHeight;

        // Create a bitmap for the font
        hndBitmap:=CreateDIBSection(hDC, bmpInfo, DIB_RGB_COLORS, Pointer(pBitmapBits), 0, 0);

        hbmOld:=SelectObject(hDC, hndBitmap);

        // Set text properties
        SetTextColor(hDC, RGB(255, 255, 255));
        SetBkColor(hDC, $00000000);
        SetTextAlign(hDC, TA_TOP);

        // Paint the alphabet onto the selected bitmap
        Result:=PaintAlphabet(strFontName, hDC, False);
        if succeeded(Result) then
        begin
          // Lock the surface and write the alpha values for the set pixels
          FontTexture.LockRect(0, d3dlr, nil, 0);
          pDstRow := d3dlr.pBits;
          {$R-} //wegen der shr/shl-Aktionen
          for y := 0 to (TexturHoehe - 1) do
          begin
            pDst16 := PWord(pDstRow);
            for x := 0 to (TexturBreite - 1) do
            begin
              bAlpha := (pBitmapBits^[TexturBreite*y + x] and $ff) shr 4;
              if (bAlpha > 0) then
              begin
                pDst16^ := Word((bAlpha shl 12) or $0fff);
                Inc(pDst16);
              end else
              begin
                pDst16^ := $0000;    //  <--------------------- Zugriffsverletzung
                Inc(pDst16);
              end;
            end;
            pDstRow := PByte(Integer(pDstRow) + d3dlr.Pitch);
          end;
          {$R-}

             
          Result:= S_OK;
        end;

      end

    end

  end
  
  if (FontTexture<>nil) then FontTexture.UnlockRect(0);

  SelectObject(hDC, hbmOld);
  SelectObject(hDC, hndFontOld);
  DeleteObject(hndBitmap);
  DeleteObject(hndFont);
  DeleteDC(hDC);
end;
An der markierten Stelle zerlegt es den Editor bei aktivem Regirtry-Eintrag. Was für eine byte-Akrobatik der Programmierer der Textfunktion da angewendet hat, hat sich mir auf die Schnelle nichr erschlossen. Wenn jemand Muße hat, kann er gerne Vorschläge machen. Sonst muss ich mir das mal anschauen, wenn etwas mehr Zeit ist.

Carsten

Re: Diskussionen zu 64 bit beta

Verfasst: 24.08.2022 16:15:44
von F(R)S-Bauer
Zurückgezogen.

Ralf

Re: Diskussionen zu 64 bit beta

Verfasst: 24.08.2022 16:45:25
von SebastianH

Code: Alles auswählen

pDstRow := PByte(Integer(pDstRow) + d3dlr.Pitch);
Die Umwandlung vom 64-Bit Zeiger pDstRow in ein 32-Bit Integer schneidet Teile der Adresse ab, da müsste man denke ich Int64 nehmen.

Re: Diskussionen zu 64 bit beta

Verfasst: 24.08.2022 19:59:07
von Max Senft
Hi,
SebastianH hat geschrieben: 24.08.2022 16:45:25

Code: Alles auswählen

pDstRow := PByte(Integer(pDstRow) + d3dlr.Pitch);
Die Umwandlung vom 64-Bit Zeiger pDstRow in ein 32-Bit Integer schneidet Teile der Adresse ab, da müsste man denke ich Int64 nehmen.
ja, sieht nach der Ursache des Problems aus.

Anstelle von Int64 vielleicht eher NativeInt nehmen (siehe https://docwiki.embarcadero.com/Librari ... .NativeInt oder https://www.freepascal.org/docs-html/rt ... veint.html). Das ist dann je nach Zielsystem passend.

Gruß
Max

Re: Diskussionen zu 64 bit beta

Verfasst: 08.10.2022 18:41:57
von Gorgi [Vale]
Nabend,
ich bin grade zufällig auf einen reproduzierbaren Fehler im 3D-Editor gestoßen.
Es geht darum, das im Meldungsfenster keine "Warnungen" gemeldet werden trotz aktivem Haken, konkret geht es darum das ich einen Fehler in eine Signalassistentdatei eingebaut habe, beispielsweise fehlt im Text der Datei bei der verlinkten Datei das "xml" am Ende. Dadurch kann die andere Datei nicht aufgerufen werden im Assistenten, wenn man diese auswählt.

Wählt man diese nun aus im Signalassistent verhält er sich ganz normal, allerdings wird die Datei nicht geöffnet und es erscheint "Keine Warnung" vom Nichtaufrufen der Datei im Meldungsfenster.
In der 3.4 habe ich noch Warnungen erhalten wenn Fehler vorlagen, wie eine falsche Verknüpfung in der Datei.

Ich konnte es leider nicht in der 32bit testen.

Gruß
Gorgi

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 16:22:48
von Leonard K.
Leonard K. hat geschrieben: 02.06.2022 22:05:04 Polygonbaumodus 3D-Editor 64-Bit: Wenn man mit dem Farbeimer Randelemente markieren lässt, werden die u-Koordinaten alle auf "NAN" statt 0 gesetzt. Mit der 32-Bit Version passiert das nicht:

Bild
Das Problem besteht bei mir weiterhin. Statt der u-Koordinate wird jetzt aber die v-Koordinate auf NAN gesetzt, während die u-Koordinate auf 0 steht ;)

Einfache Repro: 3D-Editor 64bit öffnen, Objektbaumodus, Streckenelement markieren und Formkurve anwenden. Dann ein beliebiges Dreieck markieren und im Polygonbaumodus auf den Farbeimer drücken:
Bild

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 17:24:16
von Christian Lehanka
Hallo,
Christian Lehanka hat geschrieben: 18.08.2022 10:48:56 Hallo,
Christian Lehanka hat geschrieben: 09.06.2022 09:34:37 Hallo,

bei der 64bit-Version funktioniert die Fahrzeugvorschau im Fahrplaneditor nicht mehr richtig.
Bild
links 32-bit rechts 64-bit

Gruß Christian
Carsten Hölscher hat geschrieben: 09.06.2022 17:16:01 Dann wartet vielleicht einfach aufs nächste Update, denn bei mir geht es ja im aktuellen Stand.

Carsten
das Problem besteht bei mir weiterhin (ZusiSim.exe : 3.4.99.37).

Gruß
Christian
das Problem besteht weiterhin (ZusiSim.exe : 3.4.99.51)

Gruß
Christian

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 18:21:57
von Carsten Hölscher
Die Meldungen in diesem Thema sind noch nicht alle in das aktuelle Uodate eingeflossen. Das checke ich gerade noch durch.

Carsten

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 19:56:19
von Carsten Hölscher
Gorgi hat geschrieben: 08.10.2022 18:41:57 Nabend,
ich bin grade zufällig auf einen reproduzierbaren Fehler im 3D-Editor gestoßen.
Es geht darum, das im Meldungsfenster keine "Warnungen" gemeldet werden trotz aktivem Haken, konkret geht es darum das ich einen Fehler in eine Signalassistentdatei eingebaut habe, beispielsweise fehlt im Text der Datei bei der verlinkten Datei das "xml" am Ende. Dadurch kann die andere Datei nicht aufgerufen werden im Assistenten, wenn man diese auswählt.

Wählt man diese nun aus im Signalassistent verhält er sich ganz normal, allerdings wird die Datei nicht geöffnet und es erscheint "Keine Warnung" vom Nichtaufrufen der Datei im Meldungsfenster.
In der 3.4 habe ich noch Warnungen erhalten wenn Fehler vorlagen, wie eine falsche Verknüpfung in der Datei.

Ich konnte es leider nicht in der 32bit testen.

Gruß
Gorgi
Ist das noch aktuell? Wenn ja bräuchte ich bitte mal eine exakte Anleitung mit den dafür nötigen Daten. Und ist das wirklich eine reine 64bit-Frage? Also 32bit verhält sich korrekt?
Carsten

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 22:02:18
von Carsten Hölscher
Leonard K. hat geschrieben: 06.01.2023 16:22:48
Das Problem besteht bei mir weiterhin. Statt der u-Koordinate wird jetzt aber die v-Koordinate auf NAN gesetzt, während die u-Koordinate auf 0 steht ;)

Einfache Repro: 3D-Editor 64bit öffnen, Objektbaumodus, Streckenelement markieren und Formkurve anwenden. Dann ein beliebiges Dreieck markieren und im Polygonbaumodus auf den Farbeimer drücken:
Bild
Bei mir weiterhin OK. Können das bitte mal ein paar weitere Leute testen, um mal ein Gefühl für die Verbreitung des Problems bzw. mögliche Ansätze zu bekommen?

Carsten

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 22:04:58
von Carsten Hölscher
Adrian hat geschrieben: 28.06.2022 17:08:07 So also:

Lade ich den Fahrplan aus dem offiziellen Bestand funktioniert alles - Referenz ist ICE 715 aus dem 2025 D-Takt der VDE.

Lade ich nun gleichen Fahrplan und Zug aus dem eigenen Verzeichnis tritt die Zugriffsverletzung auf.
bei mir nicht reproduzierbar.
Carsten

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 22:05:20
von Alwin Meschede
Leonard K. hat geschrieben: 06.01.2023 16:22:48 Das Problem besteht bei mir weiterhin. Statt der u-Koordinate wird jetzt aber die v-Koordinate auf NAN gesetzt, während die u-Koordinate auf 0 steht ;)
Bei mir auch. Dass im neuen Editor jetzt aber die v-Koordinate auf NAN gesetzt wird kann ich nicht bestätigen. Bei mir ist es weiterhin die u-Koordinate.

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 22:08:39
von oberstrom (Markus)
Alwin Meschede hat geschrieben: 06.01.2023 22:05:20 Bei mir ist es weiterhin die u-Koordinate.
Bei mir ebenfalls.

Re: Diskussionen zu 64 bit beta

Verfasst: 06.01.2023 23:15:01
von Thomas U.
Win7 -> funktioniert.
Win11 -> u-Koordinate auf NAN.

Re: Diskussionen zu 64 bit beta

Verfasst: 07.01.2023 11:08:18
von Adrian
Carsten Hölscher hat geschrieben: 06.01.2023 22:04:58
bei mir nicht reproduzierbar.
Carsten
Moin Carsten,

mit der neuen Beta hab ich das Problem nicht mehr, auch die Mini-Ruckler sind weg, danke

Gruß Adrian

Re: Diskussionen zu 64 bit beta

Verfasst: 07.01.2023 13:29:42
von Carsten Hölscher
Leonard K. hat geschrieben: 18.08.2022 12:17:14 Der Stack-Überlauf kommt bei mir auch nach dem letzten Update. Welches Betriebssystem war denn bei dem Test im Einsatz? Bei dem NAN-Problem ist es evtl. ja auch so, dass es nur unter Windows 10 und 11 auftritt, nicht aber mit Windows 7. Bei mir läuft Windows 11, ich habe es aber auch mal mit Windows 10 getestet (gleiches Ergebnis). Windows 7 steht mir leider nicht zur Verfügung.
Tritt das noch auf? Bei mir ist es weiterhin unauffällig.

Carsten

Re: Diskussionen zu 64 bit beta

Verfasst: 07.01.2023 14:24:59
von Leonard K.
Carsten Hölscher hat geschrieben: 07.01.2023 13:29:42
Leonard K. hat geschrieben: 18.08.2022 12:17:14 Der Stack-Überlauf kommt bei mir auch nach dem letzten Update.
Tritt das noch auf? Bei mir ist es weiterhin unauffällig.
Das Problem mit dem Stack-Überlauf scheint jetzt behoben zu sein.

Re: Diskussionen zu 64 bit beta

Verfasst: 07.01.2023 15:09:01
von Carsten Hölscher
Christian Lehanka hat geschrieben: 09.06.2022 09:34:37 Hallo,

bei der 64bit-Version funktioniert die Fahrzeugvorschau im Fahrplaneditor nicht mehr richtig.
Bild
links 32-bit rechts 64-bit

Gruß Christian
In meinem aktuellen Stand läuft es korrekt. Bitte testet es mit dem gleich folgenden Update noch einmal.
Undbei Fehlern dann bitte mal Fahrplan und Zug dazu.

Carsten