2016-07-21 9 views
0

Ich zeichne OpenGL mit indizierten Zeichnung. Ich sende die Eckpunkte & die Indizes an die Grafikkarte und versuche dann, die lokalen Puffer freizugeben. Freigabe der Vertices-Puffer - kein Problem, aber wenn ich den Index-Puffer freigeben, wird nichts angezeigt.opengl release memory nach dem Aufruf von glBufferData bewirkt, dass die Daten nicht angezeigt werden

es einfach setzen, dieser Code funktioniert:

glGenBuffers(1, &m_VBO); 
glBindBuffer(GL_ARRAY_BUFFER, m_VBO); 
glBufferData(GL_ARRAY_BUFFER, m_Vertices.size()*6*sizeof(float), m_Vertices.data(),GL_STATIC_DRAW); 

m_Vertices.clear(); 
m_Vertices.shrink_to_fit(); 

glGenBuffers(1, &m_IBO); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_IBO); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_TriangleIndeces.size() * sizeof(GLsizei), m_TriangleIndeces.data(), GL_STATIC_DRAW); 

// m_TriangleIndeces.clear(); 
// m_TriangleIndeces.shrink_to_fit(); 

aber wenn ich die letzten 2 Zeilen un bemerken-- nichts angezeigt wird.

Ich habe auch versucht, den Puffer nach dem ersten Rendering freizugeben, aber die gleichen Phänomene aufgetreten.

Ich habe verstanden, dass sobald das OpenGL die Daten puffert, wenn der Treiber oder die Grafikkarte, die lokale Kopie davon für mich frei ist, missbrauchen, so dass ich verwirrt bin.

Ich arbeite an Windows 10. Der Gerätemanager sagt, ich habe "AMD Radeon (TM) R7 M360" und "Intel HD-Grafik 520", was auch immer das bedeutet.

+0

Können Sie die Definitionen von m_TriangleIndeces anzeigen? – BDL

+0

Vielleicht verwenden Sie nicht m_IBO für die eigentliche Zeichnung, sondern das clientseitige Index-Array? – derhass

+0

Welchen Typ verwenden Sie für die Indizes? 'GLsizei' sieht definitiv ungültig aus. Ich denke nicht, dass es das beschriebene Problem verursachen sollte, aber die Verwendung von 'sizeof (GLsizei)' muss falsch sein. –

Antwort

0

Ja, die OpenGL-Implementierung sollte tatsächlich eine Kopie der Daten durchführen.

Dies könnte ein Treiberfehler sein.
Da Sie scheinen, zwei GPUs haben, nehme ich an, dass Sie die Anwendung auf Ihrer Intel GPU standardmäßig ausführen (Intel ist berühmt für schlechte GPU-Treiber). Haben Sie versucht, es auf beiden GPUs zu testen? Und sind Ihre GPU-Treiber auf dem neuesten Stand?

+0

Vielen Dank für Ihre Antwort. Hacke ich meine Nutzung an eine bestimmte GPU weiter? –

+0

In den Treibereinstellungen. Ich habe kein solches System, deshalb kann ich es dir nicht sagen. Vielleicht hilft das: https://support.serato.com/hc/en-us/articles/202305784-Changing-graphics-card-settings-use-your-dedicated-GPU-on-a-Windows-computer- Bitte beantworten Sie auch meine Frage zu den GPU-Treibern. – Tara

+0

In Bezug auf die Laufwerke, AMD musste in der Tat aktualisiert werden, Intel-Treiber war bereits auf dem neuesten Stand, aber das Update hat nicht den Trick gemacht ... Ich werde auf die Leng schauen, die Sie gesendet haben –