Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 05:02

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: VertexShader Tutorial
BeitragVerfasst: Mo Aug 04, 2003 08:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

also ich hab mich jetzt nochmal an die VertexShader gesetzt... so 100%ig ist mir zwar immernochnicht klar was ich damit machen können soll, was nich auch ohne geht, aber ok.. *g*

Aufjedenfall... SoS, du schreibst in dem Tutorial dass das eine Script da das kürzeste was möglich ist sei... aber, ist nicht das kürzeste so?? -->

Code:
  1. !!ARBvp1.0
  2.  
  3. PARAM ModelViewProj[4] = { state.matrix.mvp };
  4.  
  5. DP4 result.position, ModelViewProj[3], vertex.position;
  6. MOV result.color, vertex.color;
  7. MOV result.texcoord, vertex.texcoord;
  8.  
  9. END


Den der umweg über die Temp-Variable is doch irgendwie überflüssig.. oder sehe ich das falsch???

Und, die sache mit dem Fehlerfinden... klappt zwar, allerdings bekomme ich da immer nur "invalid parameter"... steht nix von ner line oder so da... hab ich da jetzt was verkehrt gemacht, oder liegt das einfach an meiner GraKa?

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VertexShader Tutorial
BeitragVerfasst: Mo Aug 04, 2003 09:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Aya hat geschrieben:
Aufjedenfall... SoS, du schreibst in dem Tutorial dass das eine Script da das kürzeste was möglich ist sei... aber, ist nicht das kürzeste so?? -->

Code:
  1. !!ARBvp1.0
  2.  
  3. PARAM ModelViewProj[4] = { state.matrix.mvp };
  4.  
  5. DP4 result.position, ModelViewProj[3], vertex.position;
  6. MOV result.color, vertex.color;
  7. MOV result.texcoord, vertex.texcoord;
  8.  
  9. END


Den der umweg über die Temp-Variable is doch irgendwie überflüssig.. oder sehe ich das falsch???

Ja, eigentlich muss man die Temp-Variablen nicht nutzen, da das ARB dies aber so vorschlägt hab ich mich halt daran gehalten, zumal es der Überischtlichkeit zugute kommt.

Aya hat geschrieben:
Und, die sache mit dem Fehlerfinden... klappt zwar, allerdings bekomme ich da immer nur "invalid parameter"... steht nix von ner line oder so da... hab ich da jetzt was verkehrt gemacht, oder liegt das einfach an meiner GraKa?

Ja, die Fehlerausgabe bei einem Vertex-/Fragmentprogramm ist Sache des Grafikkartentreibers.Anscheinend habens nVidia mal wieder nicht hinbekommen hier brauchbare Infos zu geben.Meine ATI-Treiber liefern auf jeden Fall (wie im Tut ja zu sehen) neben dem Fehler auch noch die Zeile in der dieser aufgetreten ist mit.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VertexShader Tutorial
BeitragVerfasst: Mo Aug 04, 2003 09:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Son of Satan hat geschrieben:
Ja, eigentlich muss man die Temp-Variablen nicht nutzen, da das ARB dies aber so vorschlägt hab ich mich halt daran gehalten, zumal es der Überischtlichkeit zugute kommt.


Mich würde mal interessieren, ob das mit der Tempvariable nicht auch ein wenig langsamer sein würde.
Es ist ja auch so, wenn man sauber und strukturiert programmiert (oop), dann kann dadurch ein overhead entsteht. Mich würde mal interessieren wie sich so etwas bei der Grafikkarte verhält. Wenn man dort nämlich ein wenig zu viel macht, dann bremmst man damit ja so ziemlich alles aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 09:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Also wenn ich persönlich mich zwischen Übersichtlichkeit und Geschwindigkeit entscheiden müsste (wenn der Geschwindigkeitsgewinn nur marginal wäre), dann würd ich in jeder Situation Übersichtlichkeit wählen.Lieber ein paar FPS weniger, aber dafür Programmstrukturen die sich leicht lesen und verändern lassen.
Bei nem Vertex-/Fragmentprogramm bin ich mir allerdings fast schon sicher, das der Treiber (wenn er denn gut programmiert) ist, das VP/FP beim Hochladen nochmal durchläuft und optimiert, so wie das mit Displaylisten auch geschieht.Ich bin mir deshalb auch fast sicher, das die übersichtlichere Variante nicht langsamer ist.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: VertexShader Tutorial
BeitragVerfasst: Mo Aug 04, 2003 10:11 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Aya hat geschrieben:
so 100%ig ist mir zwar immernochnicht klar was ich damit machen können soll, was nich auch ohne geht, aber ok.. *g*


Wo die nützlich sind durfte ich vor kurzem ausprobieren :wink:
Wenn Du deine Objekte als Vertex-Array oder Vertexbuffer hast, kannst Du diese dann mit einem Vertex-Program ändern, anstatt die Daten im Vertex-Array jeden Frame zu aktualisieren, wodurch ja der Vorteil des Vertex-Arrays nahezu aufgehoben wäre.
Das nur mal so als ein Anwendungsgebiet.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 10:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
@SOS: Keine Frage ich ziehe Übersichtlichkeit der Geschwindigkeit auch vor. Sofern der Geschwindigkeitseinbruch vertretbar ist. Und eine Variablenzuweisung ist im Vergleich zu einer Berechnung eh kein Aufwand. Aber Interessieren würde es mich dennoch. Bin ja nicht neugierig oder so. ;)

@Aya: Mit VP's kannst du alle Dinge (z.B.: Oberflächen) simulieren die per Formel erechenbar sind. Bestes Beispiel dafür ist Wasser (Wellen). Du brauchst dann lediglich eine Fläche machen die in einzelne Stückchen unterteil ist (Heightmap mit höhe 0) und berechnest dann darauf deine Wellen. Und siehe da schon hast du 100% Hardwarebeschleunigtes Wasser.
Charakteranimationen sind damit nur bedingt realisierbar, da die meistens nicht berechenbar sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ich habe das mal ausprobiert und der Treiber scheint bei beiden ARB_** Programmen das Programm so zu optimieren, daß unnötige Zuweisungen wegfallen. Jedenfalls konnte man das anhand der Geschwindigkeit sehen, wenn man die entscheidenden Befehle, die das Ergebnis einer langen Berehnung verwenden auskommentiert, dann wurde das Programm so schnell als wenn diese Berechnung überhaupt nicht ausgeführt worden wäre. In so einem PDF von ATI habe ich auch mal gelesen, daß der Treiber die Befehle auch umordnet, damit die Hardware besser ausgelastet ist. Diese Programme haben zwar die Form von Assembler, aber sie sind nicht mit dem normalen Assembler zu vergleichen, bei dem jeder Befehl genau so umgesetzt wird. Deshalb glaube ich auch nicht, daß es durch die tmp Variable langsamer wird.


Die Fehlerposition wird in einer zusätzlichen Variable zurückgegeben.
Mit glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB,@i) kann man sich auch auf NVida Karten die Fehlerpositino anzeigen lassen.

Ich glaube das Programm wäre so richtiger:

Code:
  1. !!ARBvp1.0
  2.  
  3. PARAM ModelViewProj[4] = { state.matrix.mvp };
  4.  
  5. DP4 result.position.x, ModelViewProj[0], vertex.position;
  6. DP4 result.position.y, ModelViewProj[1], vertex.position;
  7. DP4 result.position.z, ModelViewProj[2], vertex.position;
  8. DP4 result.position.w, ModelViewProj[3], vertex.position;
  9.  
  10. MOV result.color, vertex.color;
  11. MOV result.texcoord, vertex.texcoord[0];
  12.  
  13. END


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 11:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
LarsMiddendorf hat geschrieben:
Die Fehlerposition wird in einer zusätzlichen Variable zurückgegeben.
Mit glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB,@i) kann man sich auch auf NVida Karten die Fehlerpositino anzeigen lassen.

Oh.. danke :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 11:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das dumme an GL_PROGRAM_ERROR_POSITION_ARB ist allerdings die Tatsache das die zurückgegebene Fehlerposition nicht die Zeile in der er auftrit zurückliefert, sondern den Byteoffset an dem der Fehler auftrat, sprich das Zeichen im Programmstring an dem der Fehler liegt.So muss man recht umständlich noch ausrechnen in welcher Zeile man suchen muss...

GL_ARB_VERTEX_PROGRAM-Spezifikation hat geschrieben:
Additionally, ProgramString will update the program error position
(PROGRAM_ERROR_POSITION_ARB) and error string (PROGRAM_ERROR_STRING_ARB).
If a program fails to load, the value of the program error position is set
to the ubyte offset into the specified program string indicating where the
first program error was detected. If the program fails to load because of
a semantic restriction that is not detected until the program is fully
scanned, the error position is set to the value of <len>. If a program
loads successfully, the error position is set to the value negative one.
The implementation-dependent program error string contains one or more
error or warning messages. If a program loads succesfully, the error
string may either contain warning messages or be empty.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 11:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Nu ja, ganz so umständlich ist's ja nu auchnet ... :)

Code:
  1.     glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB,@j);
  2.     Line:=1;
  3.     for i:=1 to j do
  4.       if S[i]=#13 then
  5.         Inc(Line);


Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 11:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi nochmal,

eine kleine frage hätte ich noch...

mit glGenProgramARB reservier ich mir speicher für das Programm.. aber wie geb ich des wieder frei?? Also wie lösch ich das generierte wieder???

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 04, 2003 12:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Konsequenterweise mit glDeleteProgramsARB.Steht übrigens in den Spezifikationen zu GL_ARB_VERTEX_PROGRAM.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 05, 2003 12:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

muß man irgendwas beachten wenn man glProgramStringARB benutzen möchte???

Ich bastle grad an nem kleinen Editor für die VertexShader rum, und bin total verwirrt.. :)
Bei glProgramStringARB gibt es immer ne AccessViolation... hab die Extension aber geladen und InitOpenGL von OpenGL12 gemacht...

bei meinem Spiel hab ich die Shader ja schon implementiert, da geht es... aber ich hab KA was ich da jetzt vergessen haben könnte...

Ich benutz z.B. hier in dem Editor kein OpenGL Fenster, also hab kein OpenGLContext.. aber auch wenn ich einen erstelle geht es net :(
Und ich hab KA was ich hier andersgemacht haben soll als bei meinem EngineEditor.. :(

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 05, 2003 13:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Stell sicher, das die mittels glGenProgramsARB erstellte ID für dein Programm auch gültig ist.Ansonsten dürfte es keine Probleme beim Übergeben des ProgramStrings an die Graka geben.Falls doch, dann schau dir die Spezfikation an, denn dort steht alles wichtige drin.

P.S. : Ohne Quellcode wird das Helfen schwer...

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 05, 2003 13:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

war nen dummer fehler *g* Ich hab total vergessen gehabt erstmal ne VP mit genPrograms zu erstellen :oops:

Ich hab mir für meinen VP Editor in meinem EngineEditor gestern eine art CodeInsight und SyntaxHighlighting gebastelt.. daraus hab ich vorhin nochmal nen kleinen StandAlone Editor gemacht :)

Runterladen könnt ihr euch den hier:
http://www.koshigaya.de/DelphiGL/VertexShaderSFX.exe

Das CodeInsight funktioniert genauso wie in Delphi.. mit STRG+Leertaste wird er aufgerufen.

Mit F9 wird der Code auf fehler überprüft.

Sollte interresse bestehen, kann ich den Editor gern noch ein wenig weiterentwickeln (Würde ich so nicht machen, da ich das ja wie gesagt direkt in meiner Engine eingebaut habe).

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 23 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]