Lors de la compilation d'un vertex ou fragment-shader, faut-il appeler la fonction glDeleteShader()
sur le shader qui n'a pas pu être compilé ou est-elle uniquement applicable aux shaders compilés avec succès?OpenGL3: Nettoyage après une compilation de shader échouée
Par exemple, en utilisant le shader
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
"}";
qui est cassé à cause d'un point-virgule manquant, en collaboration avec:
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;
}
déclenchera l'article si en raison d'un syntax- erreur: error: syntax error, unexpected '}', expecting ',' or ';'
.
J'ai essayé d'ajouter glDeleteShader(vertexShader);
à l'intérieur de la clause if, mais je ne peux pas discerner de différence dans le comportement du programme lorsqu'il se termine.
Le nuanceur doit-il être supprimé?