C++ 即使编译失败,我也需要删除OpenGL着色器对象吗?

C++ 即使编译失败,我也需要删除OpenGL着色器对象吗?,c++,opengl,C++,Opengl,当着色器编译失败时,是否需要删除着色器?失败的着色器是否也包括在此过程中 像这样: for(size_t Size = 0; Size < this->Shaders.size(); Size++) //"Shaders" is a vector. { glDeleteShader(this->Shaders[Size]); } for(size\u t size=0;sizeShaders.size();size++)/“Shaders”是一个向量。

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

像这样:

for(size_t Size = 0; Size < this->Shaders.size(); Size++) //"Shaders" is a vector.
{       
    glDeleteShader(this->Shaders[Size]);
}
for(size\u t size=0;sizeShaders.size();size++)/“Shaders”是一个向量。
{       
glDeleteShader(此->着色器[大小];
}

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


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

Size Shaders.Size()。