При компиляции вершинного или фрагментарного шейдера следует вызвать функцию glDeleteShader()
в шейдере, который не удалось скомпилировать или применим только к успешно скомпилированным шейдерам?OpenGL3: очистка после неудачной компиляции шейдера
Например, используя шейдер
const GLchar* vertexSource =
"#version 150 core\n"
"in vec2 position;" // Vertices specified in 2 dimensions: (X, Y)
"void main()"
"{"
" gl_Position = vec4(position, 0.0, 1.0)" // Removed semicolon here
"}";
которая нарушена из-за отсутствующей запятую, в сочетании с:
GLuint vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
GLint success;
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
if (!success) {
GLchar infoLog[512];
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
}
вызовет предложение, если-из-за syntax- ошибка: error: syntax error, unexpected '}', expecting ',' or ';'
.
Я попытался добавить glDeleteShader(vertexShader);
внутри if-предложения так же, как и оставить его, но не может различить разницу в том, как работает программа при ее выходе.
Должен ли быть удален шейдер?