Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Außerdem: Ich habe es jetzt endlich aufgegeben, CMake zu benutzen. Zumindest gucke ich bis auf weiteres was passiert, wenn man es nicht benutzt. Schlimmer kann es eigentlich nicht werden.

Der Anstoß dazu war, dass ich eines meiner Projekte auf meinem Laptop installieren und dafür meine Entwicklungsumgebung (im Sinne von: installierte Abhängigkeiten) einrichten musste (unter Windows). Naheliegenderweise lädt man also die neusten Versionen von allem herunter, man will ja aktuell sein. Ich hatte eigentlich CMake Skripte für alles, aber natürlich funktionierten sie nicht. Denn, wie jeder weiß, ist der normale Betriebsmodus von CMake nicht 'ausführen' sondern 'debuggen'. Jedes verdammte Mal. Meine Fresse.

Da CMake noch nie sinnvolle Fehlermeldungen generiert hat, musste ich also die Skripte lesen um zu verstehen, was falsch läuft. Ich brauchte irgendein System, also fing ich alphabetisch bei Assimp an. Ich les mir also die Logik nach der .lib-Dateien und Includeverzeichnisse gesucht werden durch, und gleiche sie händisch mit der frisch installierten Version (siehe Anhang A) ab. Und muss feststellen, dass Assimp jetzt seine kompilierten Dateien nach einem Schema benennt, das die verwendete Compilerversion beinhaltet. Was ja ansich sinnvoll ist, weil die benötigte Anzahl an Builds in C++ exponentiell mit der Anzahl der Parameter wächst (!!!), und man für jeden einen eindeutigen Name braucht. Weil C++ eine verdammte Scheißsprache ist.

Ich bin also drauf und dran, mein CMake-Skript so anzupassen, dass es die neuen Dateien finde. Und halte inne. Ich war kurz davor, einen Sonderfall einzubauen, der garantiert nur auf meinem Rechner funktionieren wird. Man könnte es auch flexibler machen und Umgebungsvariablen benutzen, aber ich weiß jetzt schon, dass ich dann beim nächsten mal wieder meine CMake-Skripte lesen werde, nur um nachzusehen, wie die Umgebungsvariable heißen muss, nur um dann ein anderes Programm zu starten, mit dem ich besagte Variable setzen kann. Es gibt also keinerlei Grund, das nicht direkt hardcodiert in das Skript zu schreiben, das spart nur Arbeit.
Man könnte sich auch irgendeine andere Lösung überlegen, die generelle, flexibler ist. Aber ich bin mir absolut sicher, das ich damit nicht den Fall abdecken werde, der in einem Jahr auftreten wird, wenn ich den Code mal wieder auf einer anderen Maschine ausführen will. Bringt also alles nix.

Ich habe endgültig genug. Ich benutze CMake seit ca. 5 Jahren regelmäßig. Es hat bisher noch kein einziges mal das getan, was es tun sollte (Abhängigkeiten automatisch finden). Ich musste jedes mal Skripte lesen, gucken was passiert und manuell anpassen. Es funktioniert einzig und alleine dann, wenn man ein Projekt runterlädt, in dem alle Abhängigkeiten gebündelt sind, aber das ist ja auch der triviale Fall. Dafür kann man auch statische Projektdateien bauen. Da braucht man auch nur eine Version, denn die können ja auch automatisch konvertiert werden. Der relevante Fall 'oh, mir fehlt eine Abhängigkeit, naja ich installiere sie einfach schnell nach' klappt abgesehen von einigen sehr sehr gängigen Bibliotheken (Qt, Cuda, ...) in der Regel nicht. Und dann muss ich in fremden Code suchen, wieso irgendeine Bibliothek nicht gefunden wird, weil ich davon wieder eine andere Version installiert habe, und muss wieder von vorne anfangen, alles anzupassen.

Ich habe die Schnauze endgültig voll. Ich versuch jetzt mal alles über Visual Studio zu konfigurieren, das Property Sheet System sieht brauchbar aus und es ist tausendmal angenehmer, direkt einen Pfad einzutragen, als ein Skript anzupassen, welches pseudogenerisch den Pfad finden soll und anschließend 4 mal zu debuggen, bis es das tatsächlich tut. Mal sehen wie weit ich damit komme, vor Qt habe ich jetzt schon Angst.


Anhang A:
Assimp kompilieren hat auch schon nicht geklappt. Weil es eine zlib-Version findet und benutzt, diese aber leider nicht kompatibel ist. Ich bekomme Linker-Fehler, die so erstmal nichtssagend sind. Ich gebe CMake die Schuld, von einem Buildsystem erwarte ich nicht nur, irgendetwas zu finden, sondern auch zu wissen, ob es das richtige ist. Die Kompatibilitätsprüfung hat also entweder nicht stattgefunden oder versagt, vielleicht hätte man es mit einem besseren CMake-Skript beheben können, aber von einem vernünftigen System erwarte ich einfach mal, dass angaben zu kompatiblen Programmversionen eingefordert werden und auch der dümmste Benutzer die Kompatibilitätsprüfung nicht kaputt bekommt. Weil genau diese Benutzer 95% der CMake Skripte schreiben werden.
Netterweise liefert assimp die Abhängigkeiten gleich mit. Aber wieso wird dann überhaupt nach einer externen Version gesucht? Wer weiß. Jedenfalls finde ich nach einigen Minuten CMake-Skripte debuggen tatsächlich einen Schalter den man umlegen kann und dann geht es. Trotzdem hat die Aktion mich 15 Minuten gekostet.

Ich saß jetzt wieder ca. 2.5 Stunden an meinem Projekt und die Bilanz lautet: 'Kein messbarer Fortschritt'. So macht das wirklich keinen Spaß :(
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Jonathan hat geschrieben:Ich brauchte irgendein System, also fing ich alphabetisch bei Assimp an. Ich les mir also die Logik nach der .lib-Dateien und Includeverzeichnisse gesucht werden durch, und gleiche sie händisch mit der frisch installierten Version (siehe Anhang A) ab. Und muss feststellen, dass Assimp jetzt seine kompilierten Dateien nach einem Schema benennt, das die verwendete Compilerversion beinhaltet. Was ja ansich sinnvoll ist, weil die benötigte Anzahl an Builds in C++ exponentiell mit der Anzahl der Parameter wächst (!!!), und man für jeden einen eindeutigen Name braucht. Weil C++ eine verdammte Scheißsprache ist.
Kompilier Assimp doch als DLL, dann geht das mit jedem Compiler … (aber dann hast du keine Sonderzeichen in Dateinamen und keine Fortschrittsbalken mehr, lol)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Mich würde immer noch interessieren, wie sich Gradle für CPP anfühlt. Vielleicht willst Du das ja mal zum Anlass nehmen, es auszuprobieren: https://docs.gradle.org/current/usergui ... tware.html Unity3D wird damit wohl auch gebaut, falls das ein Anreiz ist. Wobei sie aktuell nicht mehr mit Unity Technologies auf der Hauptseite werben, nur noch hier https://gradle.com/about.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Dinge, die ich schon immer tun wollte, aber andere waren schneller weil sie Unity nutzen statt sich wochenlang ihre eigenen Formatierungsroutinen für Gleitkommazahlen zu schreiben; Teil 812:



und

https://twitter.com/HoussineMehnik/stat ... 5208351744

und

https://twitter.com/HKdevblog/status/686217337293418496
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Ich erkenne nicht, was daran der Trick ist? Selbstähnliche Replikation?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Naja, das eine ist ein Zettelgenerator. Das andere ist ein Rohrgenerator. Und dann ein Müll(verteilungs)generator. AFAIK nicht einmal mit großer Trickserei, aber dafür muten die hochproduktiv an.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: Jammer-Thread

Beitrag von joggel »

Sinnlos!!
Ich finde (zumindest nach einigem googlen) keinen gaaanz simplen Tilemap-Editor!!
Ich möchte einfach nur eine Map gestalten, auf den einzelnen Tiles Grafiken (1 Bild aus 251 Einzelnbildern) "packen", und das soll dann als leicht lesbare/importierbare Datei gespeichert werden...
Ich sehe es schon kommen, dass ich selber so einen TileMap-Editor schreiben muss :(
Benutzeravatar
RustySpoon
Establishment
Beiträge: 298
Registriert: 17.03.2009, 13:59
Wohnort: Dresden

Re: Jammer-Thread

Beitrag von RustySpoon »

Naja, die Standardlösung ist da halt immer noch Tiled. Es tut zumindest was es soll, auch wenn mich das Ding jedesmal aufs Neue aufregt. Das Exportformat ist zumindest auch straightforward.
joggel

Re: Jammer-Thread

Beitrag von joggel »

Das habe ich auch gefunden. Und dann TileStudio.
Mh... ich glaube, dann schaue ich mir mal Tutorials an. Ist bestimmt schneller als selber einen zu schreiben.

Was ich mir auch spontan überlegt habe:
Mit Gimp das zu machen.
Ich erstelle mir ein Bild. Meine Tilegrafiken sind zB 64x64Pixel.
Das heißt, das dieses Bild die Dimensionen von (breite x 64)x(höhe x 64) hat.
Ich lade die einzelnen TileGrafiken in Gimp und baue dann daraus meine Map.
Ich definiere zu jeder TileGrafik eine zusätzliche Ebene, die nur eine bestimmte Farbe hat, also jede TileGrafik verfügt dann über einen zusätzlichen Farbcode.
Beim Abspeichern schalte ich dann lediglich die originalGrafikEbene aus, und es werden nur die Farben auf den Ebenen abgespeichert.

Beim Importieren generiere ich die Map anhand der Farbcodes....

Würde sowas unter Gimp gehen?
Benutzeravatar
RustySpoon
Establishment
Beiträge: 298
Registriert: 17.03.2009, 13:59
Wohnort: Dresden

Re: Jammer-Thread

Beitrag von RustySpoon »

Gehen würde das sicher... aber Alter, was ein Stunt. :D

Im Vergleich zu Tiled wirst du da auch an Produktivität nichts gewinnen. Das Ding ist ja wirklich schon auf das Nötigste eingedampft: Karte anlegen, Tileset anlegen, lostilen, exportieren, fertig. Und das Exportformat ist 'ne billige XML für die es inzwischen auch zig Importer gibt.

Was mich an Tiled immer so genervt hat waren eher die fehlenden "intelligenten" Tools. Ich krieg z.B. die Krise, wenn ich eine Straße male und diese "Randtiles" immer noch händisch setzen muss. Oder man immer nur ein Tile auswählen kann, so das man z.B. "Rauschen" in großen Flächen immer händisch gestalten muss. Aber ich glaub da hat sich das Ding in den letzten Jahren auch schon verbessert.
joggel

Re: Jammer-Thread

Beitrag von joggel »

:D
Ja, die Idee ist sehr...naja..."besonders" :D

Na ich schaue mir mal dieses Tiled an. Danke trotzdem :)
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Was mich an Tiled immer so genervt hat waren eher die fehlenden "intelligenten" Tools. Ich krieg z.B. die Krise, wenn ich eine Straße male und diese "Randtiles" immer noch händisch setzen muss. Oder man immer nur ein Tile auswählen kann, so das man z.B. "Rauschen" in großen Flächen immer händisch gestalten muss. Aber ich glaub da hat sich das Ding in den letzten Jahren auch schon verbessert.
Mittlerweile kann Tiled Autotiles und das "fülle mit einem element zufällig aus mehr als einer tile", aber ich hab mittlerweile auch so eine halb-aversion gegen tiled. viele features sind schon geil, aber das programm ist mal wieder ein fall von "so generisch, das es weh tut"
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ooooh, diese Ficker bei Microsoft.

Wenn man in den Projekteinstellungen von Visual Studio nicht das XP-kompatible Toolset auswählt, startet die Anwendung nicht mehr unter XP.

Das ist überraschender, als es klingt: Selbst eine komplett leere Anwendung, die nichts tut und keine Abhängigkeiten hat, schmeißt den Fehler Foo.exe is not a valid Win32 application bzw. Foo.exe ist keine gültige Win32-Anwendung. – WTF?! Warum sollte die nicht laufen können?!

Es gibt keinen Grund. Die Schweinepriester setzen schlicht und einfach im Optional Header der PE die Felder Major/MinorSubsystemVersion auf 6.0 statt 5.1. Ohne weitere Not.

Und das scheiß Windows sagt nicht etwa „Zu neu für mich!“ oder „Mach erstmal Vorspiel!“, sondern schmeißt diesen bekackten kryptischen Win32-Fehler.

Ich kann die EXE also einfach im Hex-Editor öffnen, die vier Bytes überschreiben, und schon läuft wieder alles unter XP.

*spuck*

Nachtrag: Ich kann in den Projekteinstellungen → Linker → System → Minimal Required Version den Wert 5.01 eingeben, dann landet der im PE-Header und das Programm startet noch unter XP. Immerhin bleibt mir damit das Hex-Editing erspart. Ist vielleicht auch besser; Standardprogramme nutzen die CRT und starten wirklich nicht mehr unter XP, sobald man das nicht-XP-Toolset auswählt.
Zuletzt geändert von Krishty am 06.02.2018, 15:10, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Weil ich gefragt wurde, was überhaupt der Unterschied zwischen dem normalen Toolset und dem XP-kompatiblen Toolset ist:
  • Man kann das Verhalten der CRT einstellen (set_terminate(), _set_purecall_handler(), usw.)
  • Damit das funktioniert, muss die CRT an globalen Adressen Funktionszeiger speichern.
  • Wenn es ein Angreifer schafft, durch eine kleine Sicherheitslücke einen der Zeiger zu überschreiben, wird daraus eine große Sicherheitslücke (Remote Code Execution).
  • Als Mitigation werden globale Zeiger seit der 2010er CRT verschlüsselt gespeichert und bei Benutzung wieder entschlüsselt. Die Schlüssel werden bei Prozessstart zufällig gewählt. Ein Angreifer, der die Zeiger überschreiben kann, müsste also zusätzlich die richtige Ver- und Entschlüsselung erraten.
  • Das würde nichts bringen, wenn die Schlüssel im User Mode Address Space herumliegen (auf den der Angreifer ja schon Zugriff hat). Daher wurde diese Funktionalität in den Kernel geschoben – in die Funktionen EncodePointer() und DecodePointer() (hier übrigens wieder Grüße von Meltdown/Spectre!).
  • Diese Funktionen wurden während der Entwicklung von Windows XP intern genutzt, und ab Windows Vista öffentlich gemacht.
  • Dummerweise hat sich dabei die Importbibliothek geändert (Kernel32.dll vs KernelBase.dll).
  • Die 2010er-CRT produziert deshalb auf Windows XP Fehler à DecodePointer konnte nicht in Kernel32.dll gefunden werden.
  • Das XP-kompatible Toolset linkt eine spezielle Version der MSVCRT, die noch die XP-kompatiblen Einsprungspunkte für EncodePointer() und DecodePointer() unterstützt. (AFAIK unabhängig davon, ob man statisch oder dynamisch linkt.)
Stand 2013 war das der einzige Unterschied. Es kann aber natürlich gut sein, dass inzwischen mehr dazugekommen ist.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Mein Thumbnail-Handler zwingt manchmal das ganze System in die Knie. Obwohl er so irre schnell ist und so wenig Speicher verbraucht. Bei einem GB Arbeitssatz sollte doch mein Rechner nicht mit Paging anfangen?!

Nun habe ich es mal geschafft, einen Debugger anzuhängen, und … der Explorer lädt meinen Thumbnail Handler für die selbe Datei fünf Mal gleichzeitig mit identischen Parametern. WTF! Bei fünf GB Arbeitssatz sieht die Sache natürlich schon ganz anders aus.

Jetzt darf ich erstmal herausfinden, wo die vier überflüssigen Aufrufe herkommen und ob ich die irgendwie loswerde.

Nachtrag: Der Call Stack ist immer identisch:

  Krishty.dll!Thumbnails::GetThumbnail(unsigned int maximalDimension, OS::Win32::GDI::Bitmap * * result, OS::Win32::Shell::ThumbnailAlphaType * alpha)
  thumbcache.dll!RunExtractor(struct IUnknown *,unsigned int,struct HBITMAP__ * *,enum WTS_ALPHATYPE *,unsigned long *)
  thumbcache.dll!CThumbnailCache::_PerformFullExtraction(struct IShellItem *,unsigned int,unsigned int,int,struct HBITMAP__ * *,enum WTS_ALPHATYPE *,int *,int *)
  thumbcache.dll!CThumbnailCache::_GetThumbnailImpl(class CThumbnailMoniker &,struct IShellItem *,unsigned int,enum WTS_FLAGS,int,struct ISharedBitmap * *,int *,int *)
  thumbcache.dll!CThumbnailCache::GetThumbnail(struct IShellItem *,unsigned int,enum WTS_FLAGS,struct ISharedBitmap * *,enum WTS_CACHEFLAGS *,struct WTS_THUMBNAILID *)
  shell32.dll!CShellItem::_GetThumbnail(struct tagSIZE,int,struct ISharedBitmap * *)
  shell32.dll!CShellItem::GetSharedBitmap(struct tagSIZE,int,struct ISharedBitmap * *)
  shell32.dll!CImagePrefetchWorkItem::_LoadThumbnail(int,struct IShellFolder2 *,struct _ITEMID_CHILD const *,struct IItem *,struct ISharedBitmap * *)
  shell32.dll!CImagePrefetchWorkItem::_PrefetchImages(int,struct IShellFolder2 *,unsigned int,int)
  shell32.dll!CImagePrefetchWorkItem::DoWork()


Die einzigen Ergebnisse für CImagePrefetchWorkItem sind drei automatisch erzeugte Crash Reports und eine chinesische Seite. I’m so sick of this shit
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Darum schreibt niemand Thumbnail Handler für 3D-Dateien, Teil 25: Wenn beim Rendern ein GPU-Timeout auftritt und nicht richtig behandelt wird, zerfetzt es den Kernel.

Nachtrag: Oh, das ist sogar gewollt!
https://docs.microsoft.com/en-us/windows-hardware/drivers/display/limiting-repetitive-gpu-hangs-and-recoveries hat geschrieben:If the operating system detects that six or more GPU hangs and subsequent recoveries occur within 1 minute, the operating system bug-checks the computer on the next GPU hang.
Warum landet dann kein Eintrag in meinem Event Log? Warum muss das Dateisystem auf meiner Platte repariert werden? Warum sind alle gefeuert?

Die Situation ist also: Explorer will ein Thumbnail für eine Datei haben. Explorer ruft sechsfach parallel (wirklich!) meinen Thumbnail Handler für die selbe Datei auf. Die Systemressourcen gehen nicht sofort in die Knie, weil ich den Fall schon serialisiere. Weil die Datei knifflig ist, hagelt es GPU Timeouts. Als der sechste Thumbnail-Handler seinen Timeout erreicht, schaltet der Kernel auf Bluescreen. Ich habe NICHTS verkehrt gemacht, aber der User ist bluescreen’d. I CAN'T EVEN
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Soooo; ich bin auf Software-Rendering umgestiegen, wie Albi schonmal empfohlen hatte (via WARP).
  • Abstürze durch GPU-Timeouts: Nicht mehr möglich.
  • Ewige Ladezeit wegen schlecht optimierten Nvidia-Treibern: Weg. Alles initialisiert um die zehn Mal schneller als vorher.
  • Abstürze wegen Problemen mit Intel-Treibern: Kein Problem mehr.
  • Geschwindigkeit: Bei kleinen und mittleren Dateien schneller als vorher; nur bei richtig großen Dateien langsamer als Hardware.
Ob das auch bei den Usern gut funktioniert, bleibt abzuwarten (ich weiß nicht, ob WARP überall so ordentlich installiert ist, wie Microsoft es verspricht.) Mal gucken …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: Jammer-Thread

Beitrag von joggel »

Ich weiß nicht was ich von dieser Studie halten soll...
https://www.kaspersky.de/blog/chip-unte ... nein/7303/

Okay... sehe gerade, dass ca die Hälfte der in Deutschland lebenden sich so etwas implantieren lassen würde.
Mir persönlich wirkt das etwas....."befremdlich"
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Visual C++ kompiliert alle Shader mit Reflection (falls man das FX-Framework nutzt) und bietet keine UI-Möglichkeit, das abzuschalten. Daher immer als zusätzliche Kommandozeilenoption angeben:

/Qstrip_debug /Qstrip_priv /Qstrip_reflect
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

1&1 Webhosting ist offline. Toll.

Ich kann mich noch einloggen und E-Mail abholen, aber Webspace antwortet nicht mehr. Supportseite ist auch nicht erreichbar.
The page you are looking for is temporarily unavailable.
Please try again later.
Lügen.png
LÜGNER

Nachtrag: Seit 14 Uhr behoben.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Rechner eingeschaltet, Bootvorgang, Pause – Dateisystem muss auf Fehler überprüft werden.

Okay.

Hunderte Fehler flitzen über den Bildschirm, die meisten mit DLLs und Manifests im Windows-Verzeichnis. Sieht übel aus.

Windows bootet tadellos. Ich will nachsehen, was los war.

Event Log hat nur die ersten 16.000 Buchstaben.

Die Zusammenfassung, die Liste betroffener Dateien, – alles weg. Wurde einfach nicht mitgespeichert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ich kriege Visual C++ nicht dazu, das Overflow-Flag zu benutzen.

Clang/GCC haben __builtin_umul_overflow() und Konsorten. Das erzeugt direkt ein jo oder jno (Jump on Overflow/Jump on No Overflow). Aber Visual C++ hat sowas nicht. Am nächsten kommt man ran, indem man 32·32=64 multipliziert (__emulu) und dann die höchsten 32 Bits in einem unsigned int isoliert (bloß nicht als 64-Bit-Zahl lassen!) und sie auf Null testet.

Wie traurig, dass man in Software emulieren muss, was die CPU sowieso tut. Ein Befehl mehr, ein Register mehr.

Wieauchimmer. Alles ist 10 Mal effizienter als die Vorschläge auf StackOverflow.

Code: Alles auswählen

// Multiplies the given integers and stores the result.
//  • returns “yes” if overflowing
bool overflowingMultiplication(size_t & result, size_t const a, size_t const b) {
	// • x86 has hardware support via “overflow” flag after multiplication

#	if COMPILED_BY_VISUAL_CPP

		// • Visual C++ does not grant access to the “overflow” flag
		// • the closest we have is a 32·32=64 or 64·64=128 multiplication with a check for the discarded bits
		// • available via “__emulu()”/“_umul128()” intrinsics
		// • do NOT repeat the multiplication (Visual C++ 2017 cannot merge duplicate multiplications)
#		if COMPILED_FOR_X86_32
			auto const result64 = __emulu(a, b);
			result = size_t(result64);
			return 0 != uint32_t(result64 >> 32); // check the 32 discarded bits
#		elif COMPILED_FOR_X86_64
			unsigned __int64 discarded;
			result = _umul128(a, b, &discarded);
			return 0 != discarded; // check the 64 discarded bits
#		else
#			error TODO
#		endif

#	elif COMPILED_BY_CLANG || COMPILED_BY_GCC

		// “overflow” flag checks are available via “__builtin_umul_overflow()”/“__builtin_umulll_overflow()” built-ins
#		if COMPILED_FOR_X86_32
			return __builtin_umul_overflow(a, b, &result);
#		elif COMPILED_FOR_X86_64
			return __builtin_umulll_overflow(a, b, &result);
#		else
#			error TODO
#		endif

#	endif
}
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Jammer: wir haben gerade im Freundeskreis ne Phase, wo wir so Early Access-Survival-Spiele zusammen... erm... überleben. Gerade im Team macht buddeln und die Welt zurechtformen echt Spaß für ne Weile. Leider: die meisten Survival-Spiele sind Unity-Projekte. Und man merkt einfach ganz fies, dass die Leute dahinter absolut keinen Plan von Softwareentwicklung haben. Ein bisschen Packet Loss, wenn man gerade ne Truhe schließt, sorgt dafür, dass bis zum Ausloggen des jeweiligen Spielers keiner mehr die Truhe öffnen kann. Ein paar Maispflanzen nach dem Aussähen wieder abzuernten sorgt für locker 10 Sekunden Totalaussetzer auf Seiten des Servers. Plus regelmäßige ~5s-Lags, die ich der Garbage Collection zuschreibe. Die schiere Inkompetenz im Umgang mit Ressourcen ist bisweilen erschütternd. Und trotzdem verkauft sich der Scheiß zweieinhalb Millionen mal. Weil's heutzutage nunmal nicht mehr auf das Handwerk ankommt, sondern auf Glück und ein Näschen für Trends. Zum Heulen.

Dass der ganze Scheiß dann auch immer einen Windows-Server erfordert, ist auch klar. Man kann zwar mit Wine und viel Gebastel auch auf Linux hosten, behaupten verschiedene Anleitungen im Netz, aber funktioniert hat das bei mir nie und Wine kommt mit seiner ganz eigenen Liste von Dummheiten - es öffnet zum Beispiel einen passwortfreien Samba-Komplett-Zugang, ohne überhaupt was zu sagen. Zum Glück hat HostEurope regelmäßige Checks für sowas und schickt dann Warnmails.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
joggel

Re: Jammer-Thread

Beitrag von joggel »

Wenigstens hast Du Freunde mit denen du spielen kannst :(

Aber ja...bin kein unity-nutzer, und wahrscheinlich auch kein herausragender Programmierer, aber irgendwie mutet mir C++ noch nach "echten Handwerk" an.
#DuckAndCover oder so^^
joggel

Re: Jammer-Thread

Beitrag von joggel »

joggel hat geschrieben:..., aber irgendwie mutet mir C++ noch nach "echten Handwerk" an.
Diese Aussage ist doch etwas zu platt, als das ich sie so stehen lassen will!
Ich glaube, egal welche Sprache oder Engine, etc. man nutzt, es kommt wohl auf die technische Umsetzung an => internes Design!!
Es gibt, und gab, hier ja genügend Projekte die mit den unterschiedlichsten Sprachen/Tools kreiert wurden, und auch performant und gut sind...
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Ich glaube, egal welche Sprache oder Engine, etc. man nutzt, es kommt wohl auf die technische Umsetzung an => internes Design!!
Jop, so isses. Ich kann in C++ anfangen, mein Spiel mit nem Software Renderer zu implementieren und die Fenster manuell zu erstellen, ... Oder ich nehme Unreal Engine und programmiere damit meine Spielelogik aus, der Rest schon fertig.
Das gilt aber auch für Java oder Python.

Die Frage ist immer, mit welchen Layern eines Programms man sich gerne herumschlagen würde und wo man alles unter Kontrolle haben will.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
joggel

Re: Jammer-Thread

Beitrag von joggel »

Genau so war es auch gemeint.
Und mein erster Beitrag war eben aus meiner "Ich mache gerne so viel wie möglich in C++ (benutze aber trotzdem eine Engine)"-Sicht.
Naja, egal...
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Visual C++ richtet alle String-Konstanten an 16 B aus, also mit bis zu 15 B Padding.

Bei mir bedeutet das im Schnitt 8 % Größen-Overhead auf alle String Literals – obwohl keines davon geschwindigkeitskritisch ist.

Ich suche seit Jahren nach einer Möglichkeit, das abzuschalten, aber finde keine.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: Jammer-Thread

Beitrag von joggel »

Jammer:
Meine Festplatte ist vor einer Weile abgerauscht.
Alles weg. Daten, Projekte, Musik, Filme.... :(

Seit dem speicher ich mir ganz wichtiges Zeug in der Cloud.
Aber bei Weitem eben nicht alles.

Frage:
Weiß jemand, wo ich preiswert eine externe Festplatte erwerben kann?
Also wo es besonders preiswert ist?
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Tiles »

Hi Joggel,

Die üblichen Verdächtigen schenken sich da leider nicht viel. Amazon, Mindfactory, Alternate etc. sind preislich inzwischen recht gleich. Kommt natürlich drauf an was du anlegen willst und wie gross die Platte sein muss. Aber eine externe 1 Gb HDD bekommst du schon recht günstig für um die 50 Euro.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Antworten