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

Aktuelle Zeit: Sa Jul 12, 2025 22:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: GLSL Partikel mit Transformfeedback
BeitragVerfasst: Mo Jul 16, 2012 19:52 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moinsen,

ich versuche zur Zeit meine Partikel-Engine vollständig auf die GPU auszulagern. Dazu hab ich mir das Tutorial angesehen und versucht dies soweit ichs verstanden habe zu implementieren. Doch der erste Test war ernüchternd.. nicht ein Partikel zu sahen :? So nun bin ich daher gegangen und habe mir Framelogs an bestimmte positionen gesetzt und gesehen, das glTransformFeedBackVaryingsNV ein "Ungültiger Wert" auslöst. Anscheinend werden die Varyinglocations nicht richtig gefunden, obwohl eigentlich alles stimmt (denke ich).

Code:
  1.  
  2. var
  3.   locations : Array [0..1] of glint;
  4. ...
  5.   locations[0] := glGetVaryingLocationNV(shader.ProgramObject, 'gl_Position');   //Output Vertex Position  >>>> hier bekomm ich eine 0
  6.   locations[1] := glGetVaryingLocationNV(shader.ProgramObject, 'dir_out');       //Output Dir Vektor >>>> hier bekomm ich -1
  7.  
  8.   glTransformFeedBackVaryingsNV(shader.ProgramObject, 2, @locations, GL_SEPARATE_ATTRIBS_NV);
  9.  


hier der entsprechende Shader:

Code:
  1.  
  2. #extension GL_EXT_gpu_shader4 : enable
  3. #extension GL_EXT_geometry_shader4: enable
  4.                                
  5. uniform samplerBuffer tboDir;            
  6. uniform float gravity;    
  7. uniform float timeElapsed;      
  8.                                  
  9. varying out vec4 dir_out;          
  10.                                    
  11. void main() {
  12.   //Partikel Position
  13.   vec3 position = gl_PositionIn[0].xyz;  
  14.   //Richtungsvektor aus TBO holen
  15.   vec3 dir = texelFetchBuffer(tboDir, gl_PrimitiveIDIn).xyz;
  16.   //Wenn Position < 0 dann Partikel tot und nicht mehr schreiben
  17.   if (position.y < 0.0) {return;}      
  18.  
  19.   //Partikel Update
  20.   position += dir * timeElapsed;              
  21.   dir.y -= gravity * timeElapsed;
  22.   //Position zurück in den FlipFlop Buffer schreiben
  23.   gl_Position = vec4(position, 0.0);
  24.   //Richtungsvektor zurück ins TBO schreiben
  25.   dir_out = vec4(dir, 0.0);
  26.   EmitVertex();              
  27. }            
  28.  


Anbei mal die komplette Klasse. Irgendwas mach ich hier falsch...
Dateianhang:
U_GPUParticleSystem.pas


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jul 16, 2012 21:22 
Offline
DGL Member

Registriert: Sa Mär 31, 2012 23:14
Beiträge: 26
Programmiersprache: PASCAL
Also...
1. nur zur Sicherheit: es ist ne NVidia-Karte, oder? sonst könnten gl*NV-Calls ins leere gehen...
2. so weit ich weiß kannst du nur varyings (zb dein dir_out), aber nicht attribs (zb gl_Position) mit glGetVaryingLocationNV und glTransformFeedbackVaryingsNV bearbeiten. statt gl_Position zu lesen also lieber ne weitere varying spendieren (oder mit glTransformFeedbackAttribsNV arbeiten).
3. so nebenbei: du hast scheinbar Vec3 in deinen puffern, liest aber Vec4-Varyings. Das kann so eig. nicht gut gehen.

was davon (oder auch etwas anderes) der fehler ist kann ich dir auch nicht sagen, aber das sind sachen an denen es liegen könnte.

_________________
The force, strong it is in OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 17, 2012 06:02 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
1. ja hab GTX580
2. mhh ich hatte das hier gesehen http://www.opengl.org/discussion_boards ... er-binding
3. wie kommst du darauf? Die Buffer sind RGBA32F, also 4 Komponenten oder irre ich mich da?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 17, 2012 11:48 
Offline
DGL Member

Registriert: Sa Mär 31, 2012 23:14
Beiträge: 26
Programmiersprache: PASCAL
du liest nur das xyz aus den puffern. Habs aber zugegebenermaßen auch nur überflogen.
Sorry ^^
hast du pkt. 2 mal geändert? und wenn ja: funktioniert es dann?

_________________
The force, strong it is in OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 17, 2012 11:48 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
mhh also glGetVaryingLocationNV gibt mir immer -1 zurück, ausser bei gl_Position.. Shader ist doch korrekt und wurde auch fehlerfrei gebunden.. versteh das nich..


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jul 17, 2012 15:20 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Ähm.... 2 Threads? für ein und das selbe topic? .... falls ja, siehe anderer Thread :)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 18, 2012 12:37 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Ja muss ja nicht nur zwangsläufig an dem liegen. Du meintest das er die varying weg compiliert haben könnte.. Aber es wird doch ein Wert drauf zugewiesen also kann's daran ja Nicht liegen oder?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 18, 2012 15:56 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
mag ja sein das ein Wert zug3wiesen wird, aber wenn er im Endeffekt doch nicht gebraucht wird, warum auch immer. ... ist nur ne Idee warum Du -1 bekommen könntest...

Das hat mich, bei HLSL zumindest, schon ein paar Haarfetzen gekostet :)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 18, 2012 16:17 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
guck doch mal ob deine grafikkarte "normales" transform-feedback (nicht extensions) unterstützt

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 18, 2012 17:19 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Könntest dafür Sascha's glCapsViewer mal bemühen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 18, 2012 19:40 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
bzw. gucken ob die extension überhaupt unterstützt wird...

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 18, 2012 20:58 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
http://delphigl.de/glcapsviewer/generat ... portID=276
Nun die GTX580 ist eine ziemlich neue Karte...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 18, 2012 22:37 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
hast Du mal mitnem glsl debugger reingeschaut? geDebugger... oder glsldevil http://www.geeks3d.com/20091124/debug-your-glsl-shaders-with-glsldevil ... ob die Variable denn nun doch wegoptimiert wird oder nicht.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 19, 2012 09:40 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Mit glslDevil stürzt mein Program mit diversen Zugriffsverletzungen ab, sowie es versucht einen Geometry Shader zu laden... (aber nicht den hier, denn ich verwende noch mehrere, welche aber alle funktionieren)..


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 19, 2012 10:04 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
glslDebugger nutzt ja selber transform feedback... lässt sich denn was anderes damit debuggen? ne 0815 gl anwendung, iwas ausm delphigl wiki oder tutorial........

und mit dem gDebugger?

was für schutzverletzungen?

<LesenImKaffeesatz>
verursacht der debugger vielleicht opengl fehler die du nicht abfängst/behandelst?
</LesenImKaffeesatz>


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.009s | 15 Queries | GZIP : On ]