2016-07-30 53 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:始終銷燬您創建的着色器對象,即使編譯失敗。