Je suis dans un peu un catch-22 ici. Je ne peux pas déboguer mon programme C++ OpenGL parce que l'activation des messages de débogage provoque un segfault.glDebugMessageCallback provoque la segfault
J'ai une fonction de rappel de débogage I Registre:
static void APIENTRY openglCallbackFunction(
GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar* message,
const void* userParam) {
(void)source; (void)type; (void)id;
(void)severity; (void)length; (void)userParam;
fprintf(stderr, "%s\n", message);
if (severity==GL_DEBUG_SEVERITY_HIGH) {
fprintf(stderr, "Aborting...\n");
abort();
}
}
Et je lance le contexte de débogage dans le code suivant:
this->window = glfwCreateWindow(this->winx, this->winy, "Cortex Stretcher", NULL, NULL);
if(this->window == NULL) {
fprintf(stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n");
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(this->window);
GLint flags; glGetIntegerv(GL_CONTEXT_FLAGS, &flags);
if (flags & GL_CONTEXT_FLAG_DEBUG_BIT)
{
cout << "Debug output enabled!" << endl;
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
glDebugMessageCallback(openglCallbackFunction, nullptr);
// glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
}
Si je commente simplement sur glDebugMessageCallback(openglCallbackFunction, nullptr);
alors mon code fonctionne sans des erreurs (mis à part mon rendu incorrect du modèle, c'est pourquoi j'essaye de déboguer).
Mais si j'essaie d'enregistrer le rappel, alors mon code se sépare (à l'enregistrement). Une idée pourquoi? C'est essentiellement du code copié-collé.
Remarque: glGetString(GL_VERSION)
retours 4.5.0 NVIDIA 375,39
'glDebugMessageCallback' est uniquement disponible dans OpenGL> 4.3. Votre message d'erreur me fait penser que vous utilisez OpenGL 3.3 ou 2.1, qui ne supportent pas cela. – BDL
Ce n'est pas le cas. Si j'imprime 'glGetString (GL_VERSION);' Je reçois 4.5.0 NVIDIA 375.39. J'utilise un Titan X. –