3
当着色器编译失败时,是否需要删除着色器?这个过程也包含失败的着色器吗?即使编译失败,我是否需要删除OpenGL着色器对象?
像这样:
for(size_t Size = 0; Size < this->Shaders.size(); Size++) //"Shaders" is a vector.
{
glDeleteShader(this->Shaders[Size]);
}
当着色器编译失败时,是否需要删除着色器?这个过程也包含失败的着色器吗?即使编译失败,我是否需要删除OpenGL着色器对象?
像这样:
for(size_t Size = 0; Size < this->Shaders.size(); Size++) //"Shaders" is a vector.
{
glDeleteShader(this->Shaders[Size]);
}
是的,你必须删除它们。根据documentation,glCreateShader
创建一个空的着色器对象。因此,即使后续尝试附加着色器源(glShaderSource
)和/或编译源(glCompileShader
)失败,您仍然会分配一个着色器对象,该对象需要通过调用glDestroyShader
来销毁。
TL; DR:始终销毁您创建的着色器对象,即使编译失败。
'Size <= this-> Shaders.size()'如果'Shaders'确实是一个向量,那么这是上一次迭代的越界访问。 – PaulMcKenzie