即使编译失败,是否还需要删除OpenGL着色器对象?

时间:2016-07-30 02:44:54

标签: c++ opengl

着色器编译失败时,是否需要删除着色器?失败的着色器也包括在这个过程中吗?

像这样:

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

1 个答案:

答案 0 :(得分:6)

是的,您必须删除它们。根据{{​​3}},glCreateShader创建一个空的着色器对象。因此,即使后续尝试连接着色器源(glShaderSource)和/或编译所述源(glCompileShader)失败,您仍然分配了一个需要通过调用{{1 }}

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