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

Aktuelle Zeit: Fr Mär 29, 2024 02:14

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glDrawArrays mit SIGSEV
BeitragVerfasst: Fr Okt 09, 2015 15:55 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Code:
  1.   glBufferData(GL_ARRAY_BUFFER, sizeof(Cube), @Cube, GL_STATIC_DRAW); //  korrekte Länge
  2.   glBufferData(GL_ARRAY_BUFFER, sizeof(Cube) div 2, @Cube, GL_STATIC_DRAW);   // Wie erwarte, es zeichnet nur den halben Würfel
  3.   glBufferData(GL_ARRAY_BUFFER, 1, @Cube, GL_STATIC_DRAW);  // Es rendert nichts, aber es gibt auch kein SIGSEV
  4.   glBufferData(GL_ARRAY_BUFFER, 0, @Cube, GL_STATIC_DRAW);  // Es wird ein SIGSEV bei glDrawArray ausgelöst
  5.  
  6.   glDrawArrays(GL_TRIANGLES, 0, Length(Cube) * 3); // Wird bei allen 3-Varianten nicht verändert    


Wieso kommt der SIGSEV-Fehler nur bei einer Länge von 0 ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glDrawArrays mit SIGSEV
BeitragVerfasst: Fr Okt 09, 2015 16:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Woher kommt die SIGSEV? Ich vermute mal aus dem ICD deines OpenGL-Treibers? Vermutlich erwartet der Treiber hier einen Wert > 0 und validiert auch nicht. Aber man ruft glBufferData ja auch normalerweise nicht mit size = 0 auf.

Gibt es eine Meldung über die Debugging-Funktionen von OpenGL?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glDrawArrays mit SIGSEV
BeitragVerfasst: Fr Okt 09, 2015 18:36 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Aber man ruft glBufferData ja auch normalerweise nicht mit size = 0 auf.

Ich bin momentan an einem obj-Viewer am schreiben, und da hatte ich die TexCoord noch nicht in meine Array geladen, somit hatte dies eine Länge von 0.

Zitat:
Gibt es eine Meldung über die Debugging-Funktionen von OpenGL?

Es gäbe dafür einen Befehl, nur kommt er mir nicht gerade in den Sinn.
Kann ich das überhaupt noch abfragen, da ich ja ein SIGSEV bekomme ?

Gemäss dieses Wiki gibt es gar nicht so viele Fehler: http://wiki.delphigl.com/index.php/glDrawArrays

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glDrawArrays mit SIGSEV
BeitragVerfasst: Fr Okt 09, 2015 19:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Gemäss dieses Wiki gibt es gar nicht so viele Fehler: http://wiki.delphigl.com/index.php/glDrawArrays


Das ist ja auch kein OpenGL Fehler, sondern ein Fehler der OpenGL Implementation deines IHVs. Wenn der Code im Treiber an der Stelle keine 0 erwartet, dann knallts im Treiber selbst (bzw. der OpenGL ICD) und das sorgt dann für ein SIGSEV (bzw. AV).

Die Debugfunktionen von OpenGL greifen evtl. schon beim Übergeben der Parameter an die Funktion und spucken dann evtl. eine Warnung aus.

In Vulkan gibt es für sowas z.B. einen Validierungslayer für alle Parameter, der dann in einem solchen Fall darauf hinweisen würde.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glDrawArrays mit SIGSEV
BeitragVerfasst: Fr Okt 09, 2015 20:00 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich habe es jetzt so abgefangen, so kommt wenigstens kein SIGSEV mehr.

Ob das ideal ist, da bin ich mir nicht sicher.

Code:
  1.   if Length(GLfloatArray) <> 0 then begin
  2.     glBindBuffer(GL_ARRAY_BUFFER, VBO);
  3.     glBufferData(GL_ARRAY_BUFFER, SizeOf(GLfloat) * Length(GLfloatArray), Pointer(GLfloatArray), GL_STATIC_DRAW);
  4.     glEnableVertexAttribArray(Shader_Attriut_ID);
  5.     glVertexAttribPointer(Shader_Attriut_ID, VertexSize, GL_FLOAT, False, 0, nil);
  6.   end;

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glDrawArrays mit SIGSEV
BeitragVerfasst: Di Okt 13, 2015 07:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Es ist definitiv ein Fehler in der Treiber Implementierung, denn die Specs sagen explizit, dass nur ein negativer Wert ein falscher Wert für "size" ist und 0 ein valider Wert ist.
Sowas kenne ich von NV Treiber, da die in der Regel über die Spec gucken und dann einfach mal zur Seite packen und was machen was in die Richtung geht aber mit den Specs hat es dann nicht mehr viel zu tun.
Wenn du OpenGL3 Debug API anschaltest, solltest du eine Warnung vom Treiber bekommen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glDrawArrays mit SIGSEV
BeitragVerfasst: Di Okt 13, 2015 16:33 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Sowas kenne ich von NV Treiber,

Ich habe eine NVidia mit Referenz-Treiber mit Linux.

_________________
OpenGL


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 32 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.170s | 16 Queries | GZIP : On ]