Registriert: Di Sep 30, 2003 22:22 Beiträge: 78 Wohnort: irgendwo in den Korridoren der Von Braun
Dieser etwas unorthodoxe Shader ist mein erster Versuch mit GLSLang die GPU zu programmieren, also besser nicht zu viel erwarten. Das Programm zeichnet lediglich ein Quadrat und der Shader berechnet darin ein Julia Set. Damit das Messen der Framerate etwas interessanter wird, bekommt der Shader 2 Parameter, wodurch eine "Animation" stattfindet. Wenn in der MessageBox nach Programmstart nichts drinne steht ist das nicht schlimm, sie zeigt nur das Fehlerlog vom Shader linken.
Der Shader ist schon etwas optimiert, mir fällt momentan nur eine Verbesserung ein, um die fps zu erhöhen. Man könnte die fps bis zu verdoppeln, indem man nur eine Hälfte des Fraktals zeichnet und eine Punktspiegelung durchführt, bzw. in eine Textur rendern und diese gespiegelt zeichnen. Falls jemand noch eine Verbesserungsmöglichkeit kennt, würde ich sie gerne hören!
Zum Aufbau:
Das Delphi-Programm initialisiert OpenGL, Shader und beliefert den Shader mit CETX und CETY, welche für die "Animation" des Fraktals zuständig sind. Die Farben werden über eine 1D Textur bestimmt, die zufällig aus einer der 4 .bmp Dateien beim Programmstart geladen wird, um das ganze etwas interessanter zu machen. Die eigentliche Berechnung der Grafik findet in Julia.FS2.txt (16 Iterationen) statt, ich habe mal den ungetesten Julia.FS3.txt (beliebig viele Iterationen) beigefügt, den Ihr in der FormCreate eintragen könnt, wenn Ihr neugierig sein solltet. Die .bmps müssen für korrekte Darstellung des FS3-Shaders wohl von 16*1 auf maxiterations*1 vergrößert werden, oder Ihr ändert die Zuweisung von gl_FragColor auf greyscale.
Der Source compiliert fehlerfrei mit Delphi 6 PE. Die dglopengl.pas Unit wird benötigt, ist aber wegen ihrer Größe nicht enthalten. Ich weise darauf hin, daß der Source (bis auf den Code der Template) keine gute Quelle zum lernen über Delphi, OpenGL oder Julia Sets ist, mich würde es nicht wundern wenn ich mit dem {$I} ein Verbrechen begangen habe, das mit lebenslänglichem Compiler-Verbot bestraft wird.
Bisherige Benchmarks ohne Übertaktung:
Geforce FX 5200 - 3,4 fps
Geforce FX 5600 - 5,0 fps
Schreibt bitte mal Eure fps oder Compiler-Fehler auf, mich würden vor allem Ergebnisse auf Radeon-Karten interessieren, und natürlich Ergebnisse auf den aktuellen GPUs.
Dateianhänge:
Dateikommentar: GLSL Julia Set Delphi Source Code (Radeon friendly) GLSL Julia Set.rar [5.86 KiB]
365-mal heruntergeladen Dateikommentar: Screenshot Screenshot.gif [ 16.96 KiB | 6863-mal betrachtet ]
_________________ "Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?" - Shodan
Zuletzt geändert von Silk am Sa Feb 12, 2005 15:48, insgesamt 1-mal geändert.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wie schon bei LaBodas Shader vor Kurzem angemerkt : glSlang kennt keine dynamischen Typecasts, weshalb pow(..., 2) auf Radeons (da die sich an die Sprachvorgaben halten, im Gegensatz zu NVidia) nen Fehler wirft, es muss laos pow(..., 2.0) lauten. Danach gibts zwar keine Shaderfehler mehr, aber aufgrund der Länge des Shaders (wird ja auf SM2.0-Karten entrollt) läuft er leider in Software und ist somit auf R300-Karten leider nicht brauchbar.
Registriert: Di Sep 30, 2003 22:22 Beiträge: 78 Wohnort: irgendwo in den Korridoren der Von Braun
Ich habe die Shader mal aktualisiert, war mir nicht bewusst das es sich bei dem Exponenten auch um einen float handelt (habe ja alle anderen floats mit Punktierung geschrieben). x^54.829 ist mir ehrlich gesagt auch noch nicht über den Weg gelaufen
_________________ "Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?" - Shodan
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Auf meiner ATI 9800pro läuft der Shader, wie Sascha gesagt, nur im Software-Modus und bringt keine Ausgabe. Nach einigen Sekunden scheint sich das Programm dann aufzuhängen, es wird jedenfalls nicht angezeigt.
Registriert: Di Sep 30, 2003 22:22 Beiträge: 78 Wohnort: irgendwo in den Korridoren der Von Braun
Leider bekomme ich keine Information vom Treiber, in Sascha's Tutorial hatte er ja eine Msgbox, die darüber informiert was in software/hardware läuft, das wohl auf die ATI-Treiber zurückzuführen ist? Auf typhoonlabs.com fand ich eine ähnliche Anwendung, die Fraktale auf der GPU berechnet, deren Shader sieht meinem recht ähnlich und benötigt ebenfalls SM 3.0 Karten. Ich werde mir das wohl nicht antun "blind" den Shader zu kürzen bis er in SM 2.0 hardware passt (schätze mal Kidpaddle's crash ist auch darauf zurückzuführen), sondern ziehe eine neue Grafikkarte in Betracht.
Hat denn niemand eine SM 3.0 Karte auf der er den Shader mal testen könnte? Auf alter Hardware ist er wohl nicht wirklich ohne Hilfe der CPU zu realisieren, würde mich schon interessieren, ob der Shader auf einer x800 GPU einwandfrei läuft?
_________________ "Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?" - Shodan
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Also die Informationen vom Treiber bekommst du wie in dem Tutorial beschrieben auch auf NV-Karten. Dort fehlen aber meiner Meinung nach Infos, wie zB Warnungen bei 2 statt 2.0.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Di Sep 30, 2003 22:22 Beiträge: 78 Wohnort: irgendwo in den Korridoren der Von Braun
Eine Meldung wie "Link successful. The GLSL vertex shader will run in hardware. The GLSL fragment shader will run in hardware." habe ich bisher nicht bekommen, obwohl bei jedem Programmstart das glSlang_GetInfoLog( ProgramObject ) nach dem linken angezeigt wird.
_________________ "Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?" - Shodan
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Ach so, dass, das hat mir auch gefehlt. Aber immerhin werden eventuelle Fehler angezeigt.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: So Jun 13, 2004 17:17 Beiträge: 43 Wohnort: GER/OBB/TÖL-WOR/Icking
Sers,
wolte grad mal testen, verstehe zwar fast nix von OpenGL.
Mein Problem:
an dieser Stelle kommt der fehler: Ungültige Typumwandlung wenn ich übersetzen will (Delphi 7 Prof.)
Registriert: Do Mär 06, 2003 15:27 Beiträge: 281 Wohnort: Bochum
also bei mir läuft dat ding mit ~100FPS (system: amd64 3500+, radeon x850 XT)
sieht allerdings buggy aus:
Dateianhänge:
Dateikommentar: ier noch n buggy screenshot Neu Bitmap.JPG [ 27.75 KiB | 6680-mal betrachtet ] Dateikommentar: sieht nich aus wie auf deinem screenshot Neu Bitmap.JPG [ 27.75 KiB | 6681-mal betrachtet ]
Registriert: Di Sep 30, 2003 22:22 Beiträge: 78 Wohnort: irgendwo in den Korridoren der Von Braun
Danke für das Feedback, Extrawurst. Habe Deine Antwort schon vor Wochen gesehen, aber ehrlich gesagt bis jetzt keine Radeon in die Finger bekommen um das Problem mal genauer zu untersuchen. Auf der Geforce 6600GT läuft es einwandfrei, selbst mit 128 Iterationen noch mit stattlichen ~20 fps ohne Grafikfehler.
Das ganze sieht mir stark nach Rundungsfehlern aus, könnte aber auch auf den Catalyst, den Du benutzt hast, zurückzuführen sein. Letzteres wäre ja leicht zu prüfen, mit einer Radeon und aktuellen Treibern, wenn man denn eine hat
_________________ "Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?" - Shodan
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.