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