[Projekt] Mein STL-Viewer
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.
Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.
This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.
Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.
This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
- Schrompf
- Moderator
- Beiträge: 4855
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Ich find's beeindruckend.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: [Projekt] Mein STL-Viewer
Prima!
Warum die Begrenzung auf 4 Dateien?
Warum die Begrenzung auf 4 Dateien?
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Kurz gesagt: Weil’s noch im Prototypen-Stadium ist :DPsycho hat geschrieben:Warum die Begrenzung auf 4 Dateien?
- Spart Code für Memory Allocation
- Ich habe nicht den geringsten Plan, wie ich mehr als vier Schaltflächen zur Farbauswahl in der UI anordnen soll (ich kann ja schlecht hundert Buttons reinklatschen)
- Chromanoid
- Moderator
- Beiträge: 4258
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: [Projekt] Mein STL-Viewer
Vielleicht ein Panel mit Farbtopf, Thumbnail und Baumansicht pro Datei?
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Kleines Update: Ich zeichne nun Rückseiten von Polygonen. (Hier muss ich das zum Glück weniger ausführlich erklären als anderswo :D Ich muss das echt verpeilt haben; es gibt eigentlich keinen Grund, es nicht zu tun.)
Download wie immer unter https://papas-best.com/stlviewer_de
Virustotal sagt, dass mir dieses Mal alle Schlangenölprogramme außer Qihoo360 und Webroot aus dem Weg gehen. Trotzdem hat sich direkt jemand beschwert, dass Avira meckern würde. False Positive Report ist abgeschickt.
Kurze technische Erläuterung: Das große Problem bei doppelseitigem Zeichnen ist, dass man auf der Rückseite auch die Normale invertieren muss, sonst ist die Beleuchtung falsch. Zum Glück hat Direct3D bool SV_IsFrontFace als Pixel Shader-Parameter. Theoretisch müsste das zu einem Shift und einem XOR kompilieren. Praktisch muss ich das erst noch herausfinden. (Gibt es dafür gute Tools? Den AMD GPU Shader Analyzer hat man ja leider nicht fortgeführt. Mann war der gut für sowas …)
Chromanoid, dir zu antworten steht noch immer auf meiner TODO.
Download wie immer unter https://papas-best.com/stlviewer_de
Virustotal sagt, dass mir dieses Mal alle Schlangenölprogramme außer Qihoo360 und Webroot aus dem Weg gehen. Trotzdem hat sich direkt jemand beschwert, dass Avira meckern würde. False Positive Report ist abgeschickt.
Kurze technische Erläuterung: Das große Problem bei doppelseitigem Zeichnen ist, dass man auf der Rückseite auch die Normale invertieren muss, sonst ist die Beleuchtung falsch. Zum Glück hat Direct3D bool SV_IsFrontFace als Pixel Shader-Parameter. Theoretisch müsste das zu einem Shift und einem XOR kompilieren. Praktisch muss ich das erst noch herausfinden. (Gibt es dafür gute Tools? Den AMD GPU Shader Analyzer hat man ja leider nicht fortgeführt. Mann war der gut für sowas …)
Chromanoid, dir zu antworten steht noch immer auf meiner TODO.
Re: [Projekt] Mein STL-Viewer
Warum stellst du den Sourcecode nicht zur Verfügung? :shock:
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Tue ich doch:lolumad hat geschrieben:Warum stellst du den Sourcecode nicht zur Verfügung? :shock:
Psycho hat geschrieben:Hast Du Überlegungen, den Quelltext ebenfalls zu veröffentlichen?
Warum so? Weil’s Arbeit ist, so einfach ;)Krishty hat geschrieben:Klar – wer interessiert ist, kann sich melden und kriegt eine PM :)
Edit:
Gelöschte Datei
Erfordert Visual Studio 2017. Falls du die verteilte EXE 1:1 rekonstruieren möchtest, musst du zusätzlich dieses CFF-Explorer-Skript nutzen und die Systemuhr auf Sonntag, 17:58 zurückdrehen.
Zuletzt geändert von Krishty am 04.05.2018, 16:55, insgesamt 1-mal geändert.
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Könntest du bitte nochmal die aktuelle Version testen? Jemand beschwert sich, dass sie auf seinem Linux/Wine nicht funktioniert … was hattest du denn genutzt – die portable Version oder den Installer?MasterQ32 hat geschrieben:Sehr geil! Startet auch unter Linux64/Wine problemlos und lädt die Files echt flott.
Re: [Projekt] Mein STL-Viewer
Ich habe die portablen x86_64 und die x86 mit den default Wine profilen für Win7 und Win10 getestet und konnte keine Probleme feststellen.Krishty hat geschrieben:Könntest du bitte nochmal die aktuelle Version testen? Jemand beschwert sich, dass sie auf seinem Linux/Wine nicht funktioniert … was hattest du denn genutzt – die portable Version oder den Installer?MasterQ32 hat geschrieben:Sehr geil! Startet auch unter Linux64/Wine problemlos und lädt die Files echt flott.
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Super; ich danke dir vielmals dafür!
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Neue Version, aber ohne neue Features. Dafür umso mehr für ZFX – ich habe ein Bisschen Technische Schuld aufgeholt:
Versionierung überarbeitet
Ich wollte die Versionierung immer so einfach wie möglich halten, und habe sie deshalb im Quelltext mit __DATE__ und __TIME__ gemacht und im Setup von Hand. Das hat Nachteile:
Die Versionsnummern werden nun automatisch erzeugt, in UTC. Einfaches Batch-Skript. Die überflüssigen Nullen sind raus. (18.5.19 statt 18.05.19).
Ich habe gelernt, dass man WiX Umgebungsvariablen übergeben kann. Im Setup-Skript also SET WIX_PAPA_STLVIEWER_VERSION=… und im WiX-Skript Version='$(env.WIX_PAPA_STLTHUMBNAILS_VERSION)'. Nichts mehr händisch. Fuck yea.
Ich habe gelernt, dass man dem CFF Explorer Parameter für seine Skripte übergeben kann, indem man sie in die Kommandozeile hinter den Skriptnamen schreibt. Nun habe ich nur noch ein Skript zum Säubern aller EXEs/DLLs statt eines pro Datei. Fuck yea.
Neue WiX-Version.
WiX ist furchtbar zu nutzen, aber trotz allen Jammerns habe ich gerade keine Zeit, das Deployment auf was anderes umzusatteln. Also mache ich erstmal das Beste draus und halte es aktuell.
WiX hatte ein Sicherheitsproblem. Soweit ich das sehe, waren aber keine Setups betroffen, sondern nur Entwicklerrechner. Nagut. Neue Version, alles kompiliert noch, nichts ist größer geworden.
Neue Visual Studio-Version
Der Umstieg auf 2017.7 barg eine gute und eine schlechte Überraschung. Die gute war, dass Funktionsenden und if-Blöcke besser optimiert werden – solider Win in der Größe des Viewers.
Die schlechte war, dass eine Optimierung mit memcmp() weniger stark durchgeführt wird – solider Verlust in der Größe.
Unter’m Strich war der selbe Code fast ein KiB größer. Ich konnt’s aber mit anderen Änderungen ausbügeln:
Keine Microsoft-Header mehr
Ich habe noch an genau einer Stelle externe Header aus dem Windows SDK benutzt: Wenn ich benachbarte Dateien in einem Verzeichnis aufzähle, damit man mit den Pfeiltasten durchspringen kann.
Diesen Code wollte ich schon lange isolieren, aber es ist so eine richtig blöde Pfriemelarbeit. Ich nutze um die zehn COM-Interfaces der Windows-Shell, und muss jede einzelne Deklaration abkopieren, überarbeiten, und prüfen. Das hatte ich nun zwei Jahre vor mir hergeschoben. Hauptgrund: VARIANT. Guckt euch die Struktur an, sonst glaubt ihr es nicht. Die Kompatibilitäts-Workarounds. Die unions. Die structs mit und ohne Namen. Das nachzubauen war die Hölle.
Nun sind’s 1000 Zeilen eigener Code statt 300 Zeilen + Windows-, COM-, und Shell-Header. Die Kompilierzeit ist von „langsamste Datei des Projekts“ zu „nicht mehr messbar“ gesprungen.
Ich habe dabei gemerkt, dass ich einen String umständlich kopiert habe (StrRetToStr()), wo COM ihn direkt ausgeben kann (StrRetToBuf()). Ist nun etwas schneller, Fehlerbehandlung ist entfallen und der Viewer braucht einen COM-Import weniger. Größe geschrumpft.
An einer anderen Stelle hatte ich noch __uuidof() benutzt, statt händisch die UID der Schnittstelle anzugeben. Als ich das entfernt habe, ist die Größe geschrumpft. Ich hab’s nicht kontrolliert, aber Visual Studio scheint die UIDs nicht zu mergen, wenn sie durch Spracherweiterungen an COM-Deklarationen gebunden wurden. Wieder was gespart (und zusätzlich standardkonform geworden).
Dann habe ich von Hand Funktionen geinlinet, die nur einmal aufgerufen werden. Visual Studio sollte das seit 2017.6 angeblich von selber können, aber ich hab’s noch nie erlebt. Wieder 250 unnütze Bytes zurückgewonnen. Nun ist die neue Version kompakter als die vorherige.
Meine PDBs sind übrigens mit Verbannung der MS-Header satte 15 % kleiner geworden …
Versionierung überarbeitet
Ich wollte die Versionierung immer so einfach wie möglich halten, und habe sie deshalb im Quelltext mit __DATE__ und __TIME__ gemacht und im Setup von Hand. Das hat Nachteile:
- … „von Hand“.
- Builds sind nicht reproduzierbar, weil man immer mit anderem Datum kompiliert.
- __DATE__ und __TIME__ sind lokale Zeit statt UTC. Das ist recht verwirrend, vor allem mit dem Dateidatum.
- Ich möchte demnächst z.B. zwei Viewer in einem Setup kombinieren, und das geht damit nicht.
- Ich konnte bisher nur alle Projekte auf einmal deployen, nicht einzeln. Unsinn!
Die Versionsnummern werden nun automatisch erzeugt, in UTC. Einfaches Batch-Skript. Die überflüssigen Nullen sind raus. (18.5.19 statt 18.05.19).
Ich habe gelernt, dass man WiX Umgebungsvariablen übergeben kann. Im Setup-Skript also SET WIX_PAPA_STLVIEWER_VERSION=… und im WiX-Skript Version='$(env.WIX_PAPA_STLTHUMBNAILS_VERSION)'. Nichts mehr händisch. Fuck yea.
Ich habe gelernt, dass man dem CFF Explorer Parameter für seine Skripte übergeben kann, indem man sie in die Kommandozeile hinter den Skriptnamen schreibt. Nun habe ich nur noch ein Skript zum Säubern aller EXEs/DLLs statt eines pro Datei. Fuck yea.
Neue WiX-Version.
WiX ist furchtbar zu nutzen, aber trotz allen Jammerns habe ich gerade keine Zeit, das Deployment auf was anderes umzusatteln. Also mache ich erstmal das Beste draus und halte es aktuell.
WiX hatte ein Sicherheitsproblem. Soweit ich das sehe, waren aber keine Setups betroffen, sondern nur Entwicklerrechner. Nagut. Neue Version, alles kompiliert noch, nichts ist größer geworden.
Neue Visual Studio-Version
Der Umstieg auf 2017.7 barg eine gute und eine schlechte Überraschung. Die gute war, dass Funktionsenden und if-Blöcke besser optimiert werden – solider Win in der Größe des Viewers.
Die schlechte war, dass eine Optimierung mit memcmp() weniger stark durchgeführt wird – solider Verlust in der Größe.
Unter’m Strich war der selbe Code fast ein KiB größer. Ich konnt’s aber mit anderen Änderungen ausbügeln:
Keine Microsoft-Header mehr
Ich habe noch an genau einer Stelle externe Header aus dem Windows SDK benutzt: Wenn ich benachbarte Dateien in einem Verzeichnis aufzähle, damit man mit den Pfeiltasten durchspringen kann.
Diesen Code wollte ich schon lange isolieren, aber es ist so eine richtig blöde Pfriemelarbeit. Ich nutze um die zehn COM-Interfaces der Windows-Shell, und muss jede einzelne Deklaration abkopieren, überarbeiten, und prüfen. Das hatte ich nun zwei Jahre vor mir hergeschoben. Hauptgrund: VARIANT. Guckt euch die Struktur an, sonst glaubt ihr es nicht. Die Kompatibilitäts-Workarounds. Die unions. Die structs mit und ohne Namen. Das nachzubauen war die Hölle.
Nun sind’s 1000 Zeilen eigener Code statt 300 Zeilen + Windows-, COM-, und Shell-Header. Die Kompilierzeit ist von „langsamste Datei des Projekts“ zu „nicht mehr messbar“ gesprungen.
Ich habe dabei gemerkt, dass ich einen String umständlich kopiert habe (StrRetToStr()), wo COM ihn direkt ausgeben kann (StrRetToBuf()). Ist nun etwas schneller, Fehlerbehandlung ist entfallen und der Viewer braucht einen COM-Import weniger. Größe geschrumpft.
An einer anderen Stelle hatte ich noch __uuidof() benutzt, statt händisch die UID der Schnittstelle anzugeben. Als ich das entfernt habe, ist die Größe geschrumpft. Ich hab’s nicht kontrolliert, aber Visual Studio scheint die UIDs nicht zu mergen, wenn sie durch Spracherweiterungen an COM-Deklarationen gebunden wurden. Wieder was gespart (und zusätzlich standardkonform geworden).
Dann habe ich von Hand Funktionen geinlinet, die nur einmal aufgerufen werden. Visual Studio sollte das seit 2017.6 angeblich von selber können, aber ich hab’s noch nie erlebt. Wieder 250 unnütze Bytes zurückgewonnen. Nun ist die neue Version kompakter als die vorherige.
Meine PDBs sind übrigens mit Verbannung der MS-Header satte 15 % kleiner geworden …
Re: [Projekt] Mein STL-Viewer
Habs nur ganz kurz angesehen, aber da du nach Verbesserungsvorschlägen gefragt hast: Es gibt keine Drag'n'Drop Unterstützung? Mein normaler Workflow sieht so aus, dass ich ein Explorerfenster mit meinem Projekt offen haben, ein Programm über eine Verknüpfung zu starten und das Modell ins Fenster zu ziehen mache ich da wahnsinnig gerne, weil es viel schneller ist, als über den Öffnen-Dialog erst mühsam zum richtigen Ordner zu navigieren.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
Re: [Projekt] Mein STL-Viewer
Hoffentlich bringst du bald einen eigenen Compiler heraus, der auch ohne manuelles Herumwurschteln "Aufgaben" in Maschinencode zu übersetzen kann, die nicht irgendwelchen strukturellen Overhead haben.Krishty hat geschrieben:Ja; ich wurde gerade eben gefragt, noch andere Programme zu testen. Darunter fstl, den „fastest STL Viewer“. Der ist tatsächlich *viel* schneller als die anderen Programme (ich habe meine Seite entsprechend aktualisiert), braucht für Binärdateien aber noch fast doppelt so lang wie ich.
Für ASCII-Dateien braucht er sogar 10-Mal so lang. Da sind die meisten anderen Programme sowieso fast um den Faktor 100 langsamer als ich; aber das kann ich ja nicht hinschreiben, glaubt mir doch keiner …
Geschlagen werde ich im RAM-Verbrauch. Das liegt zum einen daran, dass ich Farben unterstütze (fstl & Co nicht) und zum anderen daran, dass ich die Normalenvektoren aus der Datei verwende, statt sie im Geometry Shader neu zu berechnen, weil ich halt zeigen möchte, wie die Datei ist statt wie sie sein sollte. (Das ist hoffentlich eine ausreichende Entschuldigung, aber ich schaue mal, ob ich’s irgendwann optimiert kriege.)
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Verdammt, du hast recht. Ich bin normalerweise auch totaler Drag’n’Drop-Fan, aber die Abhängigkeitshölle (da hängen COM-Schnittstellen dran) war mir kurzfristig zu aufwendig zu wrappen und dann hab ich’s vergessen. Ist nun wieder auf der To-do.Jonathan hat geschrieben:Habs nur ganz kurz angesehen, aber da du nach Verbesserungsvorschlägen gefragt hast: Es gibt keine Drag'n'Drop Unterstützung? Mein normaler Workflow sieht so aus, dass ich ein Explorerfenster mit meinem Projekt offen haben, ein Programm über eine Verknüpfung zu starten und das Modell ins Fenster zu ziehen mache ich da wahnsinnig gerne, weil es viel schneller ist, als über den Öffnen-Dialog erst mühsam zum richtigen Ordner zu navigieren.
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Drag & Drop ist drin (erstmal nur für einzelne Dateien): https://papas-best.com/stlviewer_de
- Die „neue“ Windows-NT-Schnittstelle (IDropTarget) ist wirklich höllisch kompliziert und unheimlich schwer nutzbar. Ich bin fast dran verzweifelt und nutze stattdessen …
- … die alte Win-3.1-Schnittstelle (WM_DROPFILES). Ist viel einfacher und kompakter. Man kann halt nur nichts filtern, nicht den Cursor ändern, oder COM-Objekte wie Streams ablegen.
- Das Feature ist mit 168 B zu buche geschlagen. Wenn ich statt dem WS_EX_ACCEPTFILES-Stil explizit DragAcceptFiles() aufrufen würde, wären es nochmal 36 B mehr – darum immer alles schön statisch in die Templates kompilieren!
Re: [Projekt] Mein STL-Viewer
joah, tut ganz gut :)
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Wieder eine neue Version:
https://papas-best.com/stlviewer_en#download
Mit Bugfix und verbessertem Antialiasing.
Hintergrund und eine Empfehlung für D3D-Programmierer:
Ein User hat sich bei mir gemeldet, weil der Viewer abstürzt. Er hat mir seinen Crash Dump gesendet, und der sah erstmal recht merkwürdig aus – D3D war zu zwei Dritteln initialisiert, aber die Objekte waren total kaputt.
Das war die Folge von drei kleinen Fehlern:
Daher meine Empfehlung an D3D-Programmierer: Sucht das höchste unterstützte Multisample-Level (ID3D11Device::CheckMultisampleQualityLevels()) und nutzt das. Dann macht Legacy-Hardware keine Probleme und neue GPUs profitieren von besserem MSAA (mittlerweile scheint jeder 8× zu unterstützen, obwohl D3D nur 4× garantiert). Das macht mein Viewer nun auch. (Ich weiß nur noch nicht, wie ich es in meinen anderen Programmen mit Coverage-Based Texture Transparency kombiniere, ohne vier verschiedene Shader zu schreiben.)
Kosten: ca. 140 B.
https://papas-best.com/stlviewer_en#download
Mit Bugfix und verbessertem Antialiasing.
Hintergrund und eine Empfehlung für D3D-Programmierer:
Ein User hat sich bei mir gemeldet, weil der Viewer abstürzt. Er hat mir seinen Crash Dump gesendet, und der sah erstmal recht merkwürdig aus – D3D war zu zwei Dritteln initialisiert, aber die Objekte waren total kaputt.
Das war die Folge von drei kleinen Fehlern:
- Ich habe blind Antialiasing auf 4× gestellt. Schließlich garantiert D3D ab 10.1, dass jede GPU mindestens 4× unterstützt! Nur habe ich vor geraumer Zeit die Hardware-Anforderungen auf 10.0 gesenkt … und tadaaa, da ist Antialiasing komplett optional. Der User hatte nur 10.0.
- Die Swap Chain ließ sich problemlos mit 4×MSAA erstellen. Der Depth Buffer jedoch nicht. (WTF?! Komischer Treiber, aber … ist halt erlaubt.)
- Dafür hatte ich Fehlerbehandlung, aber die enthielt einen Flüchtigkeitsfehler beim Setzen eines Zeigers. Dadurch funktionierte sie nur einmal. Mein Viewer beginnt sofort beim Start in einem separaten Thread mit dem Laden von D3D, weil das so ewig lange dauert (erster Versuch, hinterlässt kaputten Zeiger) und beim Laden einer Datei dann nochmal (zweiter Versuch erwischt kaputten Zeiger). Crash.
- Der Treiber unterstützt nur 32 MiB VRAM, obwohl D3D 10 garantierten Platz von 128 MiB pro Ressource vorschreibt. Das hat zwar nichts zum Absturz gebracht, aber es führt dazu, dass der User auch nach der Korrektur nur mini-STLs öffnen kann.
Daher meine Empfehlung an D3D-Programmierer: Sucht das höchste unterstützte Multisample-Level (ID3D11Device::CheckMultisampleQualityLevels()) und nutzt das. Dann macht Legacy-Hardware keine Probleme und neue GPUs profitieren von besserem MSAA (mittlerweile scheint jeder 8× zu unterstützen, obwohl D3D nur 4× garantiert). Das macht mein Viewer nun auch. (Ich weiß nur noch nicht, wie ich es in meinen anderen Programmen mit Coverage-Based Texture Transparency kombiniere, ohne vier verschiedene Shader zu schreiben.)
Kosten: ca. 140 B.
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Willkommen zu den langweiligsten Showroom-Screenshots auf ZFX ever!
Die letzten zehn Wochen habe ich das Setup überarbeitet (mein MSI-Thread spricht Bände) um von einem WiX-basierten Setup wegzukommen und meine Setups selber zu bauen. Warum ich das wollte?
Übrigens geht das Setup nun ohne Admin-Rechte – es sei denn, ihr habt bereits eine alte Version installiert. Dann braucht es ein Mal Admin-Rechte, um die alte Version zu aktualisieren. Bei zukünftigen Updates aber nicht mehr.
Vorher-Nachher
Erstinstallation
Das erste, was der Anwender vom Programm sieht. Früher:
Oh Gott wie hässlich.
Updates
Wahrscheinlich noch häufiger als Erstinstallationen sind Updates. Da habe ich früher einfach das selbe Update nochmal abgespult, inklusive EULA-Zustimmung. Hat User verwirrt, weil ich ein Update ankündige und sie eine Installation kriegen. „Muss ich die alte Version vorher deinstallieren?“ – berechtigte Frage. WiX kann zwar Upgrades erkennen, aber das war mir zu aufwändig.
Nun blende ich direkt einen Update-Bildschirm ein. Samt Changelog, damit die Nutzer nicht denken, ich würde neue Versionen nach Lust und Laune verteilen:
Deinstallation
Die größte Pest war bisher das Deinstallieren. WiX führt einen durch fünf(!) Fenster durch. LIEBER GOTT, LASS ES ENDLICH VORÜBER SEIN. Hat überhaupt jemals irgendjemand alle diese Textwände gelesen?!
Jetzt geht das ruck, zuck:
So. Leider keine aufregenden Sachen heute, sondern nur das. Die kleinen Fehler, die mir beim Anfertigen der Screenshots aufgefallen sind, behebe ich für die nächste Version. Ich bin einfach nur froh, dass ein zehnwöchiger Alptraum zuendegeht und warte auf Feedback …
Übrigens ist nicht alles WiX’s Schuld. Die haben auch eine neue, modernere UI in ihrem Burn-Bootstrapper. Aber damit kriegt ihr Bloat im Megabyte-Bereich.
Die letzten zehn Wochen habe ich das Setup überarbeitet (mein MSI-Thread spricht Bände) um von einem WiX-basierten Setup wegzukommen und meine Setups selber zu bauen. Warum ich das wollte?
- Bloat. Die Setups sind nun von 220 KiB auf 72 KiB geschrumpft. Für einen 60 KiB kleinen Viewer sollte die Setup-Größe überhaupt nicht dreistellig sein!
- Mehr Anpassungsmöglichkeiten. Das erkläre ich aber in der Bilderstrecke unten.
- Weniger Abhängigkeiten zu pflegen. Statt eines 120 MiB großen WiX-Downloads inklusive .NET-Framework habe ich jetzt 3000 Zeilen eigenen Code, die quasi das gleiche machen.
- Build-Speed. WiX hat zehn Sekunden zum Bauen des Setups gebraucht; mein eigenes Tool ist rund hundert Mal schneller. Scheiß XML, scheiß .NET, scheiß WiX.
- Ich wollte verdammt nochmal verstehen, wie ein Setup überhaupt funktioniert.
Übrigens geht das Setup nun ohne Admin-Rechte – es sei denn, ihr habt bereits eine alte Version installiert. Dann braucht es ein Mal Admin-Rechte, um die alte Version zu aktualisieren. Bei zukünftigen Updates aber nicht mehr.
Vorher-Nachher
Erstinstallation
Das erste, was der Anwender vom Programm sieht. Früher:
Oh Gott wie hässlich.
- Die freie Spalte links ist, weil man da sein Logo platzieren soll. Ich will aber kein Logo platzieren! Und WiX unterstützt nichts anderes. Darum ist der Platz halt ungenutzt.
- Beachtet, dass das Setup als Schriftart Tahoma nutzt und die EULA in Calibri, weil das halt die Standardschriftarten in WiX und Rich Text sind. Die Standardschriftart in Windows ist aber Segoe UI (Titelleiste!), also mischen wir da drei Schriftarten. WTF.
- Die Knöpfe sind zu klein für den Windows-Standard. (Folge der falschen Schriftart.)
- Der Print-Knopf verbraucht 70 KiB, weil ein WiX-Plugin dahintersteckt. Und man kriegt ihn nicht ohne riesen Aufwand weg. Kann man sich nicht ausdenken.
- Wenn man Back nicht benutzen kann, warum ist es überhaupt da? (Protip: Weil die WiX-Programmierer faul sind.)
- Warum eine Checkbox für Accept und ein separater Knopf zum Installieren?! Warum nicht beides auf einen Knopf?! (Machen Visual Studio & Co auch seit Jahren so.)
- Im Header des Fortschrittsfensters habe ich mir dann ein Bisschen Branding erlaubt, aber … wenn wir mal ehrlich sind, ist das doch scheiße. Weg damit.
- Abschlussfenster: Wieder die linke Spalte verschwendet.
- Warum eine Checkbox, um das Programm zu starten? Warum kein Knopf? Protip: Weil WiX es nicht anders kann. Fun Fact: Es kann auch keinen transparenten Hintergrund für die Checkbox; ein Hintergrundbild könnt ihr also auch vergessen.
- Endlich mal konsistente Schriftarten und ordentliches Layout. (Entspricht ungefähr dem Visual Studio- und Office-Setup.)
- Die Großschreibung in der MIT-Lizenz könnt ihr weglassen – es geht darum, dass der Haftungsausschluss nach amerikanischem Recht direkt erkennbar sein muss. Großschreibung ist Mittel der Wahl, aber bei kurzen Lizenzen geht es auch ohne. Und jetzt passt das Ding endlich mal komplett auf den Bildschirm!
- Ich wollte eigentlich eine Klausel hinzufügen, die militärischen Einsatz verbietet – vergessen. Nächstes Mal.
- Die Fortschrittsleiste verdeckt teilweise den Statustext. Fiel mir ohne Schnappschuss nie auf; ich behebe das für die nächste Version.
- Launch startet das Programm. Wer das nicht will, kann ja X benutzen. Aber ich behaupte mal, dass das Verhältnis 9:1 und die Zeitersparnis für die Masse groß ist. (Visual Studio macht’s übrigens auch so.)
Updates
Wahrscheinlich noch häufiger als Erstinstallationen sind Updates. Da habe ich früher einfach das selbe Update nochmal abgespult, inklusive EULA-Zustimmung. Hat User verwirrt, weil ich ein Update ankündige und sie eine Installation kriegen. „Muss ich die alte Version vorher deinstallieren?“ – berechtigte Frage. WiX kann zwar Upgrades erkennen, aber das war mir zu aufwändig.
Nun blende ich direkt einen Update-Bildschirm ein. Samt Changelog, damit die Nutzer nicht denken, ich würde neue Versionen nach Lust und Laune verteilen:
Deinstallation
Die größte Pest war bisher das Deinstallieren. WiX führt einen durch fünf(!) Fenster durch. LIEBER GOTT, LASS ES ENDLICH VORÜBER SEIN. Hat überhaupt jemals irgendjemand alle diese Textwände gelesen?!
Jetzt geht das ruck, zuck:
So. Leider keine aufregenden Sachen heute, sondern nur das. Die kleinen Fehler, die mir beim Anfertigen der Screenshots aufgefallen sind, behebe ich für die nächste Version. Ich bin einfach nur froh, dass ein zehnwöchiger Alptraum zuendegeht und warte auf Feedback …
Übrigens ist nicht alles WiX’s Schuld. Die haben auch eine neue, modernere UI in ihrem Burn-Bootstrapper. Aber damit kriegt ihr Bloat im Megabyte-Bereich.
- xq
- Establishment
- Beiträge: 1581
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Ich finds gut, dass du dir auch über sowas Gedanken machst. Hut ab und Daumen hoch!
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
Re: [Projekt] Mein STL-Viewer
Ich mag ja Deine Detailverliebtheit und den Verzicht auf Bloat.
Aber ein eigener Installer..uiuiui. Das Ding einmal zu schreiben, ok. Das es auf allen möglichen Systemen so funktioniert wie es soll, schwer zu testen. Und dann das Maintainen..aber wirst schon wissen, was Du machst.
In welchen Ordner installiert sich der Viewer denn, wenn es ohne Admin-Rechte geht?
Aber ein eigener Installer..uiuiui. Das Ding einmal zu schreiben, ok. Das es auf allen möglichen Systemen so funktioniert wie es soll, schwer zu testen. Und dann das Maintainen..aber wirst schon wissen, was Du machst.
In welchen Ordner installiert sich der Viewer denn, wenn es ohne Admin-Rechte geht?
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Meine MSI ist ja „nur“ die Schnittstelle zum Windows Installer-Dienst, der dann dafür sorgt, dass es auf allen möglichen Systemen so funktioniert wie es soll. Orca bietet auch eine umfassende Validierung der Pakete.
Eine Auflistung, was mit und ohne Admin-Rechte wo landet, hast du hier: https://docs.microsoft.com/en-us/window ... on-context
Du meist wohl unter Folder Redirection das ProgramFilesFolder; das liegt bei mir unter A:\Users\Krishty\AppData\Local\Programs. Darunter dann noch ein Unterordner Papa’s Best\STL Viewer. Hier übrigens schon ein Problem: Weil da kein x86 oder x64 im Namen ist, können die Installationen unterschiedlicher Plattformen in Konflikt kommen … wird aber noch behoben.
Eine Auflistung, was mit und ohne Admin-Rechte wo landet, hast du hier: https://docs.microsoft.com/en-us/window ... on-context
Du meist wohl unter Folder Redirection das ProgramFilesFolder; das liegt bei mir unter A:\Users\Krishty\AppData\Local\Programs. Darunter dann noch ein Unterordner Papa’s Best\STL Viewer. Hier übrigens schon ein Problem: Weil da kein x86 oder x64 im Namen ist, können die Installationen unterschiedlicher Plattformen in Konflikt kommen … wird aber noch behoben.
Re: [Projekt] Mein STL-Viewer
Oh, ich verstehe. In dem Fall nehme ich jegliche Kritik zurück. ;) Gut gemacht.
Re: [Projekt] Mein STL-Viewer
Ich finds cool Krishty. Du zeigst wie viel Potential verschwendet wird. Wie viel besser Software sein könnte. Wir bauen immer schnellere Geräte aber verschwenden diese Leistungssteigerung durch ineffizients.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Mein STL-Viewer
Schwieriges Kapitel. Denn diese Effizienz will ja auch erst mal erarbeitet sein. Und das kostet eben Manpower. Und wieso sollte man Manpower in was investieren was schon geht? Das rechnet sich für die allermeisten Entwickler nicht.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Die deutsche 3D Community: https://www.3d-ring.de
- xq
- Establishment
- Beiträge: 1581
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Ja, ich denke, das hier das Problem in "Gute Performance ist kein Qualitätsmerkmal" liegt. Mich regt das in den letzten Jahren auch auf, dass immer mehr Leute einfach "Node+Chromium" nehmen und sagen: "das ist jetzt mein framework, weil das kann ich als webprogrammierer und darum nehm ich das jetzt". Aber: ich schweife ab, das passt wie immer mehr in den jammerthread (können ja da gerne weiterdiskutieren)Tiles hat geschrieben:Schwieriges Kapitel. [...] Und wieso sollte man Manpower in was investieren was schon geht? Das rechnet sich für die allermeisten Entwickler nicht.
Zu Krishty: Thumbs up für die ganze Sache mit MSI, der Installer läuft auch mit Wine hervorragend und schön schnell :)
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Boah vielen Dank, das beruhigt mich mega!MasterQ32 hat geschrieben:Zu Krishty: Thumbs up für die ganze Sache mit MSI, der Installer läuft auch mit Wine hervorragend und schön schnell :)
- Chromanoid
- Moderator
- Beiträge: 4258
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: [Projekt] Mein STL-Viewer
Voll cool, ich installiere nachher mal :) schon mal daran gedacht ein package bei http://chocolatey.org bereitzustellen?
Re: [Projekt] Mein STL-Viewer
Ja das Setup ist wirklich blitzschnell und gab keine Probleme (Win 10 x64 - October Build). Hab jetzt auch Deinen MSI-Thread gesehen. Klasse gemacht!
- Krishty
- Establishment
- Beiträge: 8240
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Mein STL-Viewer
Danke, danke!
Aber das Ausschlaggebende für das Setup war nicht die Leistung, sondern das Vertrauen. Ich gebe WiX ein 60 KiB großes Programm und bekomme ein 224 KiB großes Setup zurück. Warum das so groß ist und was das macht? Keine Ahnung. Da liegt auch eine DLL drin, die größer ist, als mein Viewer. Was die tut? Weiß niemand. Versucht, doch mal das herauszufinden! (WiX ist Open Source, kann doch nicht schwer sein – am Arsch.)
Und nun soll ich dieses viel zu große Paket, über das ich nichts weiß, den Usern zur Ausführung mit Admin-Rechten geben.
Niemals. Da schreibe ich doch lieber alles selber. Beim neuen Paket kann ich zu ~80 % den Zweck des Inhalts nachvollziehen, und am Rest arbeite ich noch.
Aber das Ausschlaggebende für das Setup war nicht die Leistung, sondern das Vertrauen. Ich gebe WiX ein 60 KiB großes Programm und bekomme ein 224 KiB großes Setup zurück. Warum das so groß ist und was das macht? Keine Ahnung. Da liegt auch eine DLL drin, die größer ist, als mein Viewer. Was die tut? Weiß niemand. Versucht, doch mal das herauszufinden! (WiX ist Open Source, kann doch nicht schwer sein – am Arsch.)
Und nun soll ich dieses viel zu große Paket, über das ich nichts weiß, den Usern zur Ausführung mit Admin-Rechten geben.
Niemals. Da schreibe ich doch lieber alles selber. Beim neuen Paket kann ich zu ~80 % den Zweck des Inhalts nachvollziehen, und am Rest arbeite ich noch.
Re: [Projekt] Mein STL-Viewer
In meiner VM ist der Text leider etwas abgeschnitten und ich muss scrollen: