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

Aktuelle Zeit: Sa Jul 19, 2025 15:46

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Mai 05, 2012 12:24 
Offline
DGL Member

Registriert: Sa Mär 31, 2012 23:14
Beiträge: 26
Programmiersprache: PASCAL
Hallo Community,
ich sitze vor meinem Partikelsystem basierend auf Transform Feedback. Doch immer beim Aufruf von glBeginTransformFeedbackNV(); wird der GL-Fehler "invalid operation" erzeugt. Hier der relevante Code:

Code:
  1. [...]
  2. FPrgmUpdate.Bind;
  3. [...]
  4. glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, FBuffers[FOutBuffer].ID);
  5. FPrgmUpdate.TransformVaryingsLoc(4, @FTransformVars[0],       // ruft nur glTransformFeedbackVaryingsNV()für das Update-Program auf
  6.                                  GL_INTERLEAVED_ATTRIBS);   
  7. glBeginTransformFeedback(GL_POINTS);                          // Erzeugt "invalid operation"
  8. [...] 

Das Programm wird erfolgreich gelinkt, die 4 FTransformVars[] werden mittels glGetVaryingLocationNV() ausgelesen und haben korrekte Werte.
Der Quellcode des Geometry-Shaders (der Vertex-Shader reicht einfach nur die Daten weiter):

Code:
  1. #version 150
  2. [...]
  3. layout(points) in;
  4. layout(points, max_vertices = 1) out; 
  5.  
  6. out vec4 PosAndSize;                        // Varyings für Transform Feedback
  7. out vec4 VelAndLife;
  8. out vec4 Color;
  9. out vec4 Data;
  10. [...]
  11.  
  12. PosAndSize = ~~~;
  13. VelAndLife = ~~~;
  14. Color = ~~~;
  15. Data = ~~~;
  16. EmitVertex();
  17.  

Ich verstehe nicht was da genau die invalid operation ist, vor allem da ich ein anderes Partikelsystem mit dem gleichen relevantem Code habe, das einwandfrei läuft.
Ich würde mich über jede Hilfe freuen...

_________________
The force, strong it is in OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mai 05, 2012 13:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Es ist häufig hilfreich einen Blick in die Spec zu werfen:
http://www.opengl.org/registry/specs/NV ... edback.txt
(nach BeginTransformFeedbackNV suchen...)

Dort werden einige Möglichkeiten aufgeführt:
  • Primitive Modes von Transform-Feedback und Geometry-Shaderoutput stimmen nicht überein.
  • BeginTransformFeedbackNV wurde aufgerufen während Transform-Feedback schon aktiv ist
  • kein Buffer auf Index 0 gebunden bei INTERLEAVED_ATTRIBS_NV
  • gebundene Buffer passen nicht zu SEPARATE_ATTRIBS_NV
  • ...

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mai 05, 2012 16:50 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Macht TransformFeedback heutzutage wo es OpenCL gibt eigentlich für soetwas wie ein Partikelsystem noch sinn?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mai 05, 2012 20:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
@Aya: Klar, das ist nicht wirklich komplexer als etwa einen VBO mit Daten zu befüllen. Entsprechend flott hat man das eingebaut und kann die gleiche Infrastruktur wie beim Rendern nutzen oder unter Umständen gar direkt im gleichen Pass rendern. => Macht durchaus Sinn wenn man nicht nicht mit OpenCL, CUDA & Co rumschlagen möchte :)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Mai 06, 2012 12:49 
Offline
DGL Member

Registriert: Sa Mär 31, 2012 23:14
Beiträge: 26
Programmiersprache: PASCAL
Ja, an die Specs hatte ich auch gedacht...
Aber alle Fehlerquellen die da stehen könnens eig. nicht sein...
Die Primitivtypen stimmen (points), TF ist noch nicht aktiv, Buffer wird in Zeile 4 an Index 0 gebunden...
und mit INTERLEAVED_ATTRIBS binde ich auch nur einen Buffer...

Das was mich verwirrt ist hauptsächlich dass der gleiche Quelltext (Berechnungen etc mal außen vor gelassen)
in 'nem anderem Programm macht was er machen soll... und hier irgendwie nicht.
Ich bin hier mit meinem GLSL am Ende...

_________________
The force, strong it is in OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 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.011s | 14 Queries | GZIP : On ]