DGL
https://delphigl.com/forum/

Mein erster Shader!
https://delphigl.com/forum/viewtopic.php?f=20&t=3782
Seite 1 von 1

Autor:  La Boda [ Fr Feb 11, 2005 16:50 ]
Betreff des Beitrags:  Mein erster Shader!

Habe meine erste Shader-Demo fertig programmiert! *ganzstolzbin* :P
Schaut ihn euch mal an. Mich würde vor allem interessieren, wies bei euch Performance-mäßig ausschaut.
Download: http://laboda.delphigl.com/aProjekt.htm
PS: Die Normalen der Teekanne sind noch falschrum, ein Fehler des 3ds-Exporters von Cinema4D

//EDIT: Sch...ade, eine FPS-Anzeige fehlt. Werde ich mal bald einbauen, bitte mal mit Fraps ausprobieren :oops:

Autor:  Sascha Willems [ Fr Feb 11, 2005 19:08 ]
Betreff des Beitrags: 

Bei mir scheint das nicht so zu funktionieren wie es soll. Es spielt nämlich keine Rolle was ich einstelle, es sieht immer gleich aus. (Radeon 9700, Catalyst 5.1)

Autor:  La Boda [ Fr Feb 11, 2005 19:27 ]
Betreff des Beitrags: 

Argh....jetzt geht die Suche los :cry:
Bei mir und Adler (beide GF 6600 GT) funzts einwandfrei, ebenso auf einer GF 6800 und auf ner GF 5200 (uralte Treiber). Hab das ganze eigentlich komplett herstellerunabhängig geproggt. Ich weis jedenfalls im Moment nicht weiter :x
Hat da jemand schon Erfahrungen?

Noch zwei Screens, wies eigentlich ausschauen sollte:
Phong - geshadet:
Bild
Blinn-Phong-Algorhytmus:
Bild

Autor:  LarsMiddendorf [ Fr Feb 11, 2005 19:35 ]
Betreff des Beitrags: 

Ich habe man in den blinn.fp ans Ende "gl_FragColor = vec4(1,1,1,1);" geschrieben, aber es zeigt sich keine Änderung. Überprüf mal das InfoLog. Vielleicht ist ein Fehler drin.
Der ATI GLSL Compiler ist nicht so robust wie der von NVidia. Da habe ich lange Zeit eine Menge Ärger mit gehabt, so daß ich mittlerweile nur noch ARB_fp nehme.

Autor:  Sascha Willems [ Fr Feb 11, 2005 19:37 ]
Betreff des Beitrags: 

NVidia hält sich leider nicht 100% an die glSlang-Standards, dort kann man Sachen machen die man eigentlich nicht darf. Hier die Ausgabe des Shaderlogs auf meiner R9700 :

Blinn :
Code:
  1. Output of current glSlang-Implementation (ATI Technologies Inc. - RADEON 9700 x86/MMX/3DNow!/SSE - 1.5.4830 WinXP Release) :
  2. Vertex shader...
  3. ERROR: 0:15: '/' :  wrong operand types  no operation '/' exists that takes a left-hand operand of type '3-component vector of float' and a right operand of type 'const int' (or there is no acceptable conversion)
  4. ERROR: 1 compilation errors.  No code generated.
  5.  
  6.  
  7. Fragment shader...
  8. ERROR: 0:11: 'max' : no matching overloaded function found
  9. ERROR: 0:13: 'max' : no matching overloaded function found
  10. ERROR: 2 compilation errors.  No code generated.
  11.  
  12.  
  13. Program object...
  14.  Link failed. All shader objects have not been successfully compiled.
  15.  


Phong :
Code:
  1. Output of current glSlang-Implementation (ATI Technologies Inc. - RADEON 9700 x86/MMX/3DNow!/SSE - 1.5.4830 WinXP Release) :
  2. Vertex shader...
  3. Fragment shader...
  4. ERROR: 0:11: 'max' : no matching overloaded function found
  5. ERROR: 0:13: 'max' : no matching overloaded function found
  6. ERROR: 2 compilation errors.  No code generated.
  7.  
  8.  
  9. Program object...
  10.  Link failed. All shader objects have not been successfully compiled.

Autor:  LarsMiddendorf [ Fr Feb 11, 2005 19:40 ]
Betreff des Beitrags: 

Wenn man die 2 durch 2.0 und die 0 durch 0.0 jeweils ersetzt dann geht es. Das ist zwar wie Sascha meinte, schon das richtige Verhalten gemäß der Spezifikation, aber trotzdem finde ich es seltsam, dass Integer Konstanten nicht nach float konvertiert werden. Da muß man dann eben drauf achgeben. Die Demo von Delphi3D.Net hatte genau das gleiche Problem, dass es wegen dieser Unstimmigkeiten auf der GeForce lief, aber nicht hätte laufen dürfen und auf der ATI Karte korrekterweise nicht funktioniert hat.

Autor:  La Boda [ Fr Feb 11, 2005 19:52 ]
Betreff des Beitrags: 

Es ist so, wie es Sascha sagt. Das ärgert mich jetzt schon ein bissl, dass NV/ATI hier unterschiedlich tolerant sind...
Das Problem mit dem "/" hab ich jetzt so gelöst, dass ich nicht mehr durch ne feste Zahl teile, sondern einen Vektor (vec2 two = {2.0, 2.0, 2.0}; ).
Ich hab jetzt blos keine Ahnung, wie ich das "max" so ersetzen kann, dass es Vektoren verarbeitet, außer dass ich jede Komponente (xyz) einzeln verarbeite. Wäre dankbar für einen Tipp, der hier das ganze vereinfachen würde!

//Edit: Oh, Lars war schneller. Danke, werde das einbauen!

Autor:  La Boda [ Sa Feb 12, 2005 13:39 ]
Betreff des Beitrags: 

Also Danke nochmal. Ich habe es jetzt so geändert, wies Lars vorgeschlagen hat.
Die neueste Version für alle, die meine Hammer-Lighting-Demo :wink: nun auch auf Radeon-Grafikkarten genießen wollen, gibts inklusive FPS-Anzeige (Wow!) bei o.g. Link.

Autor:  KidPaddle [ Sa Feb 12, 2005 16:38 ]
Betreff des Beitrags: 

Läuft bei mir mit ca. 750-800FPS (ATI Radeon 9800pro)

Gruß
KidPaddle

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/