- glUniform1fARB( glGetUniformLocationARB( ProgramObject, PGLCharARB('CETX')), cetx );
- glUniform1fARB( glGetUniformLocationARB( ProgramObject, PGLCharARB('CETY')), cety );
DGL https://delphigl.com/forum/ |
|
GLSL Julia Set https://delphigl.com/forum/viewtopic.php?f=20&t=3784 |
Seite 1 von 1 |
Autor: | Silk [ Sa Feb 12, 2005 15:33 ] | |||
Betreff des Beitrags: | GLSL Julia Set | |||
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.
|
Autor: | Sascha Willems [ Sa Feb 12, 2005 15:38 ] |
Betreff des Beitrags: | |
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. |
Autor: | Silk [ Sa Feb 12, 2005 16:03 ] |
Betreff des Beitrags: | |
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 ![]() |
Autor: | KidPaddle [ Sa Feb 12, 2005 16:37 ] |
Betreff des Beitrags: | |
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. Gruß KidPaddle |
Autor: | SoulChild [ So Feb 13, 2005 13:08 ] |
Betreff des Beitrags: | |
Also auf meiner GeForce Fx5200 läuft es ohne Probleme allerdings nur mit 3,6 FPS. Hattest du aber bereits oben geschrieben. |
Autor: | Silk [ Di Feb 15, 2005 18:12 ] |
Betreff des Beitrags: | |
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? |
Autor: | La Boda [ Di Feb 15, 2005 18:19 ] |
Betreff des Beitrags: | |
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. |
Autor: | Silk [ Di Feb 15, 2005 18:30 ] |
Betreff des Beitrags: | |
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. |
Autor: | La Boda [ Di Feb 15, 2005 18:40 ] |
Betreff des Beitrags: | |
Ach so, dass, das hat mir auch gefehlt. Aber immerhin werden eventuelle Fehler angezeigt. |
Autor: | LarsMiddendorf [ Di Feb 15, 2005 20:07 ] |
Betreff des Beitrags: | |
Humus hat auch noch so ein Fraktal für Radeon Karten gemacht. |
Autor: | MyChaOS [ Di Mär 15, 2005 18:02 ] |
Betreff des Beitrags: | |
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.) Code:
kann mir einer sagen wieso? Michael |
Autor: | Extrawurst [ Do Mär 17, 2005 13:36 ] | |||
Betreff des Beitrags: | ||||
also bei mir läuft dat ding mit ~100FPS (system: amd64 3500+, radeon x850 XT) sieht allerdings buggy aus:
|
Autor: | Silk [ Do Mai 19, 2005 15:09 ] |
Betreff des Beitrags: | |
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 ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |