2016-07-30 55 views
3

当着色器编译失败时,是否需要删除着色器?这个过程也包含失败的着色器吗?即使编译失败,我是否需要删除OpenGL着色器对象?

像这样:

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

'Size <= this-> Shaders.size()'如果'Shaders'确实是一个向量,那么这是上一次迭代的越界访问。 – PaulMcKenzie

回答

6

是的,你必须删除它们。根据documentationglCreateShader创建一个空的着色器对象。因此,即使后续尝试附加着色器源(glShaderSource)和/或编译源(glCompileShader)失败,您仍然会分配一个着色器对象,该对象需要通过调用glDestroyShader来销毁。


TL; DR:始终销毁您创建的着色器对象,即使编译失败。