2016-07-30 5 views
3

Wenn die Kompilierung der Shader fehlschlägt, muss ich die Shader löschen? Und ist der fehlgeschlagene Shader auch in diesem Prozess enthalten?Muss ich OpenGL-Shader-Objekte löschen, selbst wenn die Kompilierung fehlschlägt?

So:

for(size_t Size = 0; Size < this->Shaders.size(); Size++) //"Shaders" is a vector. 
{  
    glDeleteShader(this->Shaders[Size]); 
} 
+2

'Größe <= this-> Shaders.size()' Wenn 'Shaders' tatsächlich ein Vektor ist, ist dies ein Out-of-Bounds-Zugriff auf die letzte Iteration. – PaulMcKenzie

Antwort

6

Ja, Sie haben sie zu löschen. Gemäß der documentation erstellt glCreateShader ein leeres Shader-Objekt. Selbst wenn nachfolgende Versuche, die Shader-Quelle (glShaderSource) und/oder die Kompilierung dieser Quelle (glCompileShader) anzufügen, fehlschlagen, weisen Sie immer noch ein Shader-Objekt zu, das durch einen Aufruf von glDestroyShader zerstört werden muss.


TL; DR: Immer Shader-Objekte zerstören, die Sie erstellt haben, auch wenn Kompilierung fehlgeschlagen.

Verwandte Themen