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
Schrompf
Moderator
Beiträge: 4856
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Weil der XServer von Haus aus keine Mehrfach-Mäuse und -Tastaturen unterstützt. Um jede Maus und jede Tastatur separat abfragen zu können, muss man halt was anderes nehmen. XInput2 soll das aber können - das ist mein aktuelles Ziel.

Ich fand es einfach bemerkenswert, dass da jemand ein Subsystem konzipiert hat, was sich als inherent nutzlos herausstellt.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Schrompf hat geschrieben:Na huch, damit könnte man ja dann Passwörter mitschnüffeln! Also sind die Input Devices nur noch mit Rootrechten lesbar. Input Devices. Nur mit Root-Rechten. Und damit das ganze System faktisch nutzlos. Schön ein neues Grab selbstgebuddelt. Habt ihr toll gemacht.

Einzig Joysticks, Gamepads und so werden noch mit Schreib/Leserechten für normale User eingebunden. Irgendwann in vielleicht einem halben Jahr fällt dann einem der Helden dort auf, dass man auf SteamOS ja auch Passwörter und Kreditkartendaten mit dem Gamepad eingibt. Dann werden wahrscheinlich auch die Eingabegeräte nur noch mit Rootrechten lesbar sein.
Am Rande: Das ist unter Windows genau so; dort darfst du Maus- und Tastatur-HIDs nur als Administrator benutzen (aus den selben Gründen). Da gibt es dann aber Raw Input, das auf den HID-Schnittstellen aufbaut und die Daten auf den Vordergrundprozess isoliert. Schützt uns aber leider nicht davor, eine Raw-Input-Schnittstelle (für Maus & Tastatur) und eine HID-Schnittstelle (für Joysticks, Gamepads, und alles andere) programmieren zu müssen – die selbe Scheiße. Oder eben DirectInput nutzen *hust, kicher hust*
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Bei Raymond Chen verliert man wieder den Glauben an das Gute in der Welt:
It appears that some programmers think that Windows already ships with that time machine the Research division is working on hat geschrieben:An application might issue an asynchronous request for a file to be renamed before they create the file itself. The program happened to work because it took time for the request to get scheduled and reach the file system, and that delay gave the application time to put the file on the disk just in time for the rename operation to see it.
I remember, we had once the situation where Directory.CreateDirectory() would successfully return, Directory.Exists() would return true, but writing to such directory would not work due to it thinking directory didn't exist. Furthermore, it was only happening on Windows 8, and we couldn't reproduce the issue on neither Windows XP, Windows 7 or OS X. We "worked around" it by sleeping for 50 ms after creating the directory, and never reproduced the issue again.

I wonder though, is it possible to actually make sure directory creation actually completes?

[Did you disable your anti-virus software? Those things tend to hook a lot of file operations and result in "impossible" things. -Raymond]
Ach, wir schlafen einfach ein paar Milisekunden, dann verschwindet der Bug. Aber was erwarte ich auch von jemandem, der C# programmiert.
Oh god, tell me about it. The anti-virus our security team makes us use causes Visual Studio builds to fail all the time. link.exe finishes making a new .exe file, and the anti-virus goes, "OMG, new .exe written! I must scan it!". Then Visual Studio runs mt.exe to embed the manifest into the new .exe's resource section, but the .exe is locked by the anti-virus program, so mt.exe fails.
Das nervt mich auch seit Jahren. Obwohl ich kein Anti-Virus-Programm installiert habe. Tritt auch nur bei eigenen Programmen auf, weil alles andere zu langsam linkt um die Race Condition zu treffen. Wie war das nochmal? Visual Studio besteht aus so viel Quelltext wie Windows XP?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2369
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Maaaan, Qt und RAII...

Ich möchte ein paar Daten (Bild) anzeigen. Da die Anzahl der Bilder Variabel ist, erstelle ich dynamisch QGlWidgets, eines für jedes Bild (zwecks ShaderEffekte zur Datenvisualisierung). Danach würde ich gerne das Bild als Textur setzen und alles wäre fertig. Geht aber nicht, da ich erst warten muss, bis für das Fenster OpenGL initialisiert ist. Das geschieht irgendwann nach dem erstellen und das QGlWidget bekommt auch eine Nachricht, damit es Daten laden kann.
Das nützt nur leider alle nichts, wenn ich in der selben Funktion das Widget erstellen und befüllen will. Nach dem Erstellen muss ich die aktuelle Funktion verlassen und warten, dass irgendwann mal OpenGL initialisiert wird und kann erst dann die Daten setzen. Oder ich muss im Widget die Daten zwischenspeichern und laden, sobald Gl initialisiert ist. Egal wie rum, es ist nerviger extra Code. Und das nur, weil es zu viel verlangt ist, dass ein Fenster nach dem Erstellen auch benutzbar ist. Na schönen Dank auch.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

UI ist schwer genug; wenn man versucht, da auch noch Polymorphie und RAII drüberzustülpen, ist Chaos vorprogrammiert. Ich sehe auch bei meinen eigenen Wrappern, dass sie alles nur schlimmer machen als C mit Funktionszeigern. Ein Trauerspiel.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Jonathan hat geschrieben:Qt
Well, there's your problem... ;)
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Jammer-Thread

Beitrag von Spiele Programmierer »

Meiner persönlichen Erfahrung nach ist OO, RAII und Polymorphie schon sehr gut für GUIs geeignet. RAII ist eigentlich nie nicht geeignet, es verhindert einfach Resourcenleeks und Uninitialisiertes.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Es geht doch schon damit los, dass Windows-Fenster Nachrichten bekommen, bevor CreateWindow() abgeschlossen ist – die Fenster-Methoden also benötigt werden, bevor das Fenster-Objekt RAII-mäßig initialisiert ist. Dann geht es damit weiter, dass Polymorphie damit nicht funktioniert, weil die abgeleitete Klasse noch nicht existiert wenn die Basisklasse deren Methoden aus CreateWindow() heraus braucht. Und die einfachste Möglichkeit, das alles zu umgehen, ist, eine Initialize()-Methode aufzurufen statt sich mit Konstruktoren herumzuärgern.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Jammer-Thread

Beitrag von Spiele Programmierer »

Windows Nachrichten werden doch in einer Nachrichtenschleife verarbeitet. Die Nachrichtenschleife wird doch erst dann aufgerufen, wenn "CreateWindow" auch abgeschlossen ist.
Außerdem gibt es ja noch GUIs außerhalb von Windows. Meine GUI Systeme außerhalb der WinAPI konnte ich bisher immer relativ gut mit RAII und auch Polymorphie abbilden. Ich habe aber auch ein paar GUI Klassen für die WinAPI die RAII & Polymorphie nutzen. Auf Probleme mit den genannten Konzepten bin ich aber nie gestoßen.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Spiele Programmierer hat geschrieben:Die Nachrichtenschleife wird doch erst dann aufgerufen, wenn "CreateWindow" auch abgeschlossen ist.
Probier's mal aus ;)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Spiele Programmierer hat geschrieben:Windows Nachrichten werden doch in einer Nachrichtenschleife verarbeitet.
Nicht alle; eigentlich nur die, die per Post*Message() versendet werden... ;)
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Jammer-Thread

Beitrag von Spiele Programmierer »

Hm. Ok.
Das war mir nicht bewusst.
Allerdings steht ja in der Dokumentation welche Nachrichten gesendet werden. Die werden nicht unbedingt gebraucht oder lassen sich zum Glück alle einigermaßen mit Polymorphie vereinbaren. Deshalb hat es bisher wohl damit keine Probleme bei mir gegeben.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2369
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

error : Template classes not supported by Q_OBJECT
na toll.


(das war ironisch. eigentlich ist es überhaupt nicht toll.)
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Schrompf
Moderator
Beiträge: 4856
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Erkenntnis des Tages:

Visual C++ hat x Overloads von abs() in seiner Runtime, darunter auch für float und double.
GCC hat genau einen Overload für abs(), nämlich den für int. Und alle float und double-Parameter werden selbst auf der höchsten Warnstufe stillschweigend zu int gecastet.

Global Search&Replace zu std::abs().
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Jammer-Thread

Beitrag von Spiele Programmierer »

Was mich dann in C++ wahnsinnig macht, dass soetwas wie "std::abs" erstmal wieder 50 Compilefehler hervoruft und man von Hand überall Header anpassen muss. :evil:
Die Variante von Standard C ist übrigens "fabs".
Benutzeravatar
Schrompf
Moderator
Beiträge: 4856
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Ja, ich hätte auch fabsen anstatt stdabsen können. Wollte dieses Mal aber immer den korrekten Overload haben, egal was der Parameter ist. Das passt besser zum modernen C++11-Stil mit auto.

Der eigentliche Jammer war ja, dass trotz höchster Warnstufe kein Hinweis aus dem GCC fiel, dass dort grade alle Nachkommastellen geopfert werden. Visual Studio hat solche Warnungen, also dachte ich, die alte verbitterte Oma GCC hätte auch welche.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Jammer-Thread

Beitrag von Artificial Mind »

Um soetwas vernünftig zu replacen kann ich LibClang empfehlen. Gibts auch mit C# Bindings und Python Bindings.

Habe mit der C# Variante schon ein paar kleine Tools geschrieben die anhand des ASTs Code replaced haben.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2369
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Ich würde vielleicht sogar sowieso dazu raten, clang zu benutzen / darauf umzusteigen. Ich habe neulich erst die letzte Windows Version nochmal ausprobiert und auch wenn sie noch nicht all meinen Code kompiliert, so konnte ich doch sehen, wie gut die Warnungen und Fehlermeldungen bei clang sind. Andere Compiler haben zwar aufgeholt aber ich glaube clang hat immer noch die Nase vorn. Und ich nehme an, dass du GCC für deine Linuxversionen benutzt und da sollte doch ansich alles gut mit clang funktionieren.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Clang auf Windows:
  • keine Exceptions
  • darum die halbe STL ohne Exceptions neu schreiben
  • kein SEH
  • keine Debug-Informationen
  • deshalb Disassembly und printf()-Debugging
  • keine LTCG/Whole Program Optimization
  • deshalb nur 25 % Leistung der Visual C++-Version
Aber dafür muss er sich keine Sorgen mehr um sein abs() machen!

Es reicht, wenn man einmal im Monat mit Clang kompiliert um die Fehlermeldungen zu genießen und gröbste Standardverletzungen zu bemerken, aber sonst nutzt nicht mal jemand mit so viel Hang zur Selbstgeißelung wie ich es produktiv.

Wenn sie irgendwann ihren eigenen Linker fertig haben, sollte das alles flutschen. Scheint aber noch zu dauern.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4856
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Einmal Jammern und wieder furchtbar viel gelernt. Ich danke euch allen für die Details. (Und das gehört dann eigentlich in den Anti-Jammer-Thread).
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Jammer-Thread

Beitrag von Spiele Programmierer »

keine Exceptions
darum die halbe STL ohne Exceptions neu schreiben
kein SEH
An Exceptions und SEH für Windows wird wohl intesiv entwickelt. Ich habe vor ein paar Wochen wie von Zeit zu Zeit immer mal wieder eine aktuelle Nightly ausprobiert und da hat beides in grundlegenden Ansätzen funktioniert. Es gab noch viele Probleme aber man hat gesehen, dass sich da etwas tut.
keine Debug-Informationen
deshalb Disassembly und printf()-Debugging
Angeblich unterstützt Clang immerhin Callstack-Denug-Informationen im Windows-Format. Das ist zwar nicht großartig aber immerhin...
keine LTCG/Whole Program Optimization
deshalb nur 25 % Leistung der Visual C++-Version
LLVM/Clang unterstützt doch inhärent LTCG! Schließlich gibt es ja den LLVM Zwischencode zu den man alles kompilieren kann. Zu Ende Kompiliert und "gelinkt", wird dann erst, wenn der Zwischencode zusammengefügt wird.

Man darf allerdings nicht den speziellen Clang Linker LLD einsetzen, weil der unterstützt wohl weder jegliche Debuginformationen noch SEH.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Wenn ohne LLD-Linker kompiliert wird, können die doch gar keine LTCG machen, weil der Linker nicht zu Clang gehört und keinen LLVM-Zwischencode ausspuckt, sondern Microsofts ist und MS-Zwischencode benutzt. Und ebender hat sich bis zu meinen letzten Versuchen vor drei Wochen beschwert, dass LTCG zwar angegeben ist, aber für die Module nicht unterstützt wird, und ich es ausschalten solle. Die Ausführungsgeschwindigkeit hat auch klar gezeigt, dass keine LTCG da war. Vielleicht war ja irgendeine Option inkompatibel, aber ich habe bis heute keine LTCG mit Clang auf Windows gesehen.

LLD habe ich auch nicht zum Laufen gekriegt, wegen fehlenden GCC-spezifischen Symbolen. Und selbst wenn ich hätte, unterstützt das noch kein x64. (Kann man in die Liste oben aufnehmen.)

Es reicht also jetzt höchstens, um eine nicht-WinRT-Demo aus dem DirectX SDK zu kompilieren, und auch nur wenn man nichts debuggen muss, und auch nur für x86-32. Und bei der Fortschrittsgeschwindigkeit der letzten Jahre wird das auch noch eine Weile so bleiben. Ich habe mich ja wirklich in jeder Hinsicht irrsinnig auf Clang für Windows gefreut, und hatte vor lauter Ungeduld sogar ClangVSX, aber ich bin einfach in jeder Hinsicht enttäuscht worden. Auch bei den Warnungen, denn die sind zwar detaillierter, aber einige nützliche MS-Warnungen fehl(t?)en.

Clang ist halt nicht die Lösung für alles.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Jammer-Thread

Beitrag von Spiele Programmierer »

Wenn ohne LLD-Linker kompiliert wird, können die doch gar keine LTCG machen
Nein. Wenn du mit Clang LTGC machst, musst du mit Clang den Code zusammenlinken. Der Linker wird noch mehr zum Umkopier-Tool für Exen degradiert. Das macht auch Sinn, denn ein Linker sollte meiner Meinung nach eigentlich kein Codegenerator sein, sondern eben bloß ein Linker der die Symbole zusammenfügt.

LLD ist in der Tat momentan noch kaum in der Praxis brauchbar.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Dass die Funktionen der WinAPI mit drei, vier Zwecken überladen sind ist ja nichts Neues. Aber dass Google nur Müll ausspuckt wenn man danach sucht, das ist echt zum Kotzen.

Normalerweise ist Google da ja relativ clever wenn es darum geht, Sachgebiete zu raten. So listet es mir – geneigtem Verschwörungstheoretiker – bei einer Suche nach "pi" die Pi-News noch vor der Kreiszahl. Ich bin zwar linksradikal, aber das ist schonmal bemerkenswert gut geraten, für so ’ne Maschine.

Jetzt wollte ich aber wissen, wie ich eine Speicherkachel in die Page File zwinge. Also damit nicht 1 GiB Undo-Redo-Information, die nie gebraucht werden, im RAM rumhängen. Dafür google ich nach allen Kombinationen von "page", "memory", "swap file", "working set", … fünfzehn Minuten lang. Mir wird angezeigt, wie man in MS Word die Seitenzahlen verändert, wie man die Auslagerungsdatei auf ein anderes Laufwerk hievt, aber Google kommt trotz jahrelangen Mitlesens meiner Programmier-E-Mails NICHT darauf, dass ich was mit virtuellem Speicher suche -.-

Von Hand durch die MSDN-Übersichten hangeln hat mich dann auf die Lösung gebracht: Wird VirtualUnlock() auf eine Speicherkachel aufgerufen, die vorher nicht gelockt wurde, dann wird sie aus dem Arbeitssatz des Prozesses entfernt (und bei Gelegenheit in die Auslagerungsdatei geschrieben).
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Alexander Kornrumpf
Moderator
Beiträge: 2113
Registriert: 25.02.2009, 13:37

Re: Jammer-Thread

Beitrag von Alexander Kornrumpf »

Krishty hat geschrieben:Normalerweise ist Google da ja relativ clever wenn es darum geht, Sachgebiete zu raten. So listet es mir – geneigtem Verschwörungstheoretiker – bei einer Suche nach "pi" die Pi-News noch vor der Kreiszahl. Ich bin zwar linksradikal, aber das ist schonmal bemerkenswert gut geraten, für so ’ne Maschine.
Bist du sicher, dass das personalisiert ist? Bei mir ist es dasselbe und ich will nicht glauben, dass das von meinem Surfverhalten kommt.
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Stimmt; auch mit Tor ist die Kreiszahl nur Nummer 2. Dann muss ich das Bisschen Positives auch noch zurücknehmen ;) Man merkt aber, was man hat, wenn man auf Startpage ausweicht. Obwohl die ihre Ergebnisse mit Google-Suche verbessern, finde ich da nie was. Zum Haareraufen.

inb4 Monopolstellungsdiskussion
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2369
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Jonathan »

Ich glaube, ich habe soeben den Tiefpunkt in der Cuda-Dokumentation gefunden...
CudaDuBistSoGeil.PNG
Wer jetzt verwirrt ist und sich frage was dieser kleine Abschnitt soll: Das ist tatsächlich die gesamte Dokumentation zu dieser Struktur. Und ja, der Beschreibungstext für jedes Element ist tatsächlich jeweils genau 1 Zeichen lang...
Sonst schreiben sie wenigstens noch sowas wie "Number of asynchronous engines" zu "cudaDeviceProp::asyncEngineCount", was im Grunde auch 0 zusätzliche Information liefert, aber wenigstens nicht ganz so peinlich aussieht...
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Das Positive daran ist: Die Namen sind so aussagekräftig, dass die Dokumentation nichts hinzufügen kann. Dass sie dann nicht die Klappe hält, ist wohl dem Cargo Cult geschuldet („Was nicht dokumentiert ist, ist schlecht, also schreib was hin!“).

Diesen Aktionismuszwang (Wir können das nicht so lassen, wir müssen irgendetwas tun – X ist irgendetwas – also tun wir X) hasse ich am Menschen. Steine haben sowas nicht. Darum mag ich Steine lieber als Menschen. Aber ich schweife ab.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8244
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Igitt, Eulerwinkel.

Ich habe hier eine Software, die damit ihre Physik durchführt: Jedes Objekt hat Roll/Yaw/Pitch.

Nun ist diesen Leuten irgendwann aufgefallen, dass ihre Mathematik bei 90° Pitch zusammenbricht. Was sie dann getan haben, habe ich noch nicht erlebt: Sie haben einen ZWEITEN Satz Roll/Yaw/Pitch eingeführt, aber in einem 90° rotierten Koordinatensystem. Ist abs(pitch) zwischen 0° und 30°, wird das normale Koordinatensystem verwendet. Zwischen 60° und 90° wird das zweite Koordinatensystem verwendet. Zwischen 30° und 60° wird von den beiden dasjenige verwendet, das zuerst da war. Und für die Umrechnung nutzen sie die Rotationsmatrix, die sie *ebenfalls* vorhalten, und je nach Flag aus dem einen oder anderen berechnet wird.

… und dann der Code, um Winkelgeschwindigkeiten zu addieren. Kennt ihr das, wenn ihr einen Stein hochhebt, und da sind tausend Kellerasseln drunter? Genau so, nur mit sin() und cos(), die rumkrabbeln.

Und das muss ich jetzt irgendwie mit meinem eigenen Kram verschalten, der Quaternions nutzt. In einem rechtshändigen Koordinatensystem. Das haben sie nämlich auch nicht. Dafür haben sie Z nach unten.

Obgleich ich in nostalgischer Verstimmung gern von früher schwärme – damals kann überhaupt nichts besser gewesen sein. Es gab Mitte der 90er, als der Haufen entwickelt wurde, kein breit verfügbares Internet. Man konnte nicht mal eben auf ZFX fragen, ob Eulerwinkel oder Matrizen besser sind. Oder erfahren, dass es sowas wie Quaternions gibt. Stattdessen musste man Bücher kaufen. Und man hat sich nicht für jede Funktion, die man schreibt, alle Bücher durchgelesen und die klugen Ideen in den Code übertragen.

(Ironischerweise fußt ZFX auf Zerbies Büchern, und hat zugleich geholfen, sie überflüssig zu machen. Wie viele Millionen Mannstunden Wartung und Irrsinn die Diskussionen hier gespart haben, ist ja kaum zu zählen. Muss man auch nicht, denn sie wurden ja durch den „das sieht aber geil aus das will ich auch“-Effekt wieder zunichte gemacht.)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4856
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 kriege beim MacPort rudelweise absurde Crashes, bei denen der Debugger mir ins Programm reingrätscht und mir irgendeine halbwegs reproduzierbare Stelle meines Codes anzeigt, OHNE mir mitzuteilen, warum er denn jetzt an der Stelle angehalten hätte. Und alle lokalen Vars usw. sehen auch gut aus. Stellt sich heraus: das ist ein Bug in QtCreator.

Immerhin ist der mit V3.4 schon gefixt. Nur ist das irgendwie ein anderer Download als der vorher - das ist auch eine .dmg-Datei, aber wenn ich das identisch aussehende Symbol darin doppelklicke, startet er das Programm direkt, anstatt es wie beim letzten Download zu installieren. Und OSX besteht ja so furchtbar darauf, dass man als Endnutzer ja gar nix mit dem Dateisystem zu tun haben muss. Was hier darauf hinausläuft, dass mir einfach mal alle Informationen fehlen, die ich bräuchte, um zu verstehen, was dort eigentlich abgeht. Jetzt habe ich zwei Installationen von Qt Creator auf dem System, die eine crasht beim Debuggen wahllos, die andere liest und schreibt subtil andere Config-Dateien und produziert deswegen schon beim Bauen Konflikte.

Hat irgendwer ne Idee, was da Best Practise sein soll, wie man damit umgeht?

[edit] Möp, mal wieder zu früh gemeckert und selbst schuld gewesen. Meine Klassen benutzen Mehrfachvererbung, weil ich plattformspezifisches Mac-Zeugs zusammenfassen wollte. Und wenn man den so entstandenen this-Pointer dann als void* in einen OSX-Callback reinpackt, kann man den natürlich nicht mehr so einfach zurückcasten. Pfff.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten