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.
Können Sie die Definitionen von m_TriangleIndeces anzeigen? – BDL
Vielleicht verwenden Sie nicht m_IBO für die eigentliche Zeichnung, sondern das clientseitige Index-Array? – derhass
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. –