2016-07-30 2 views
3

При сбое шейдерной компиляции мне нужно удалить шейдеры? И неуспешный шейдер тоже включен в этот процесс?Нужно ли удалять объекты шейдера OpenGL, даже если компиляция не удалась?

Как это:

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

'Размер <= this-> Shaders.size()' Если 'Shaders' действительно вектор, это выход за пределы последней итерации. – PaulMcKenzie

ответ

6

Да, вы должны удалить их. Согласно documentation, glCreateShader создает пустой объект шейдера. Поэтому, даже если последующие попытки подключить источник шейдера (glShaderSource) и/или компиляцию указанного источника (glCompileShader) потерпят неудачу, вы все же выделили объект шейдера, который должен быть уничтожен вызовом glDestroyShader.


TL; DR: Всегда уничтожать созданные объекты шейдеров, даже если компиляция не удалась.

Смежные вопросы