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

Aktuelle Zeit: Fr Aug 17, 2018 07:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: nvoglv32.dll exception
BeitragVerfasst: So Feb 11, 2018 22:02 
Offline
DGL Member

Registriert: So Feb 11, 2018 19:44
Beiträge: 2
Programmiersprache: C++
Hallo,

ich bin gerade dabei ein Programm zu schreiben, welches einen Baum prozedural mithilfe eines Geometry Shaders und Transform Feedback generiert.
Dafür habe ich ein VertexArrayObject, zwei VertexBufferObjects und zwei TransformFeedbackBufferObjects verwendet.
Je größer ich dann die Size von der BufferData wähle, desto häufiger tritt folgende Eception auf:

Ausnahmefehler bei 0x05FF1CAE (nvoglv32.dll) in Abgabe Tree.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00901000

Mal wird das gewünschte Ergebnis angezeigt und Mal kommt diese Exception.

Ich kann mir leider nicht erklären woran das liegt. Hier mal ein Codefragment des Programms:
Code:
  1.  
  2. unsigned int VAO;
  3. unsigned int currVB;
  4. unsigned int currTFB;
  5. GLuint vertexBuffer[2];
  6. GLuint transformFeedback[2];
  7.  

In der Main dann:
Code:
  1.  
  2. // Init the renderpass
  3.     // -------------------
  4.     glGenVertexArrays(1, &VAO);
  5.     glBindVertexArray(VAO);
  6.     first = true;
  7.     currVB = 0;
  8.     currTFB = 1;
  9.     glGenBuffers(2, vertexBuffer);
  10.     glGenTransformFeedbacks(2, transformFeedback);
  11.    
  12.     for (int i = 0; i < 2; i++) {
  13.         glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, transformFeedback[i]);
  14.         glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer[i]);
  15.         glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, vertexBuffer[i]);
  16.         glBufferData(GL_ARRAY_BUFFER, sizeof(vertices)*100, vertices, GL_STATIC_DRAW); 
  17.     }
  18.  

Darüber hinaus habe ich dann eine Methode, die die Geometrie rekursiv erweitert und eine die den Baum zeichnet.

Ich glaube der Fehler liegt an der Initialisierung des ganzen Programmes.

Hat jemand eine Idee was ich falsch mache?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: nvoglv32.dll exception
BeitragVerfasst: Mo Feb 12, 2018 11:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2523
Wohnort: Berlin
Programmiersprache: C/C++, C#
Du kannst es ja mal mit CodeXL starten, das meldet dir sämtliche Fehlerhaften Aufrufe.
Es muss auch nicht unbeding an OpenGL Code liegen, du kannst auch ein Memory-Leak irgendwo im Code haben, der nur nun auffällt, weil cpu-gpu speicher synchronisiert werden müssen.
Ich hatte das mal, da hatte ich ein Fehler in einem string und da die shader über die strings laufen ist der dann aufgefallen.
Der trat auch nicht immer auf, nur ab und zu.
Es kann also auch dann Sinn machen, wenn CodeXL keine Fehler meldet, dass du mal mit ein Memory-Leak-Detektor startest.
Zitat:
sizeof(vertices)*100

Keine gute Idee, je nachdem, wie vertices definiert ist, hast du ein unbestimmtes verhalten aber ich tippe mal darauf, dass du hier gerade den Fehler hast.
sizeof syntax erwartet ein typ und keine Variable, seit C++11 kann man mit anderer syntax auch variablen verarbeiten.
Code:
  1. sizeof vertices

Das ist wie gesagt sehr fehleranfällig, von daher empfehle ich dir sowas prinzipiell anders im Code zu handhaben.
Nutz ein Container.
STL
Code:
  1. typedef float[3] vec3f;
  2. class DynamicVectorArray {
  3. public:
  4.   size_t ByteSize()const{return sizeof(vec3f)*count;}
  5.   size_t ElementCount()const{return count;}
  6.   vec3f* Data(){return data.get();}
  7.   VectorArray(const size_t ElementCount)
  8.   :count(ElementCount)
  9.  {
  10.    data = new vec3f[ElementCount];
  11.  }
  12. private:
  13.   unique_ptr<vec3f> data;
  14.   size_t count;
  15. };
  16. DynamicVectorArray vertices(100);
  17. glBufferData(GL_ARRAY_BUFFER, vertices.ByteSize(), vertices.Data(), GL_STATIC_DRAW);

Nutzt du kein STL, dann schreib dir eine Klasse ohne unique_ptr und mit entsprechenden Constructor, Destructor, Copy-,Move-Constructor, sowie assign operator.

_________________
"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: nvoglv32.dll exception
BeitragVerfasst: Mo Feb 12, 2018 19:08 
Offline
DGL Member

Registriert: So Feb 11, 2018 19:44
Beiträge: 2
Programmiersprache: C++
Danke für die schnelle Antwort!!

Ich habe das Problem nun gelöst. Ich habe nichts bedacht, die Größe meines VertexArrays anzupassen. Habe das jetzt riesig gewählt und nun läuft das Programm einwandfrei =)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.025s | 17 Queries | GZIP : On ]