2016-02-27 1 views
1

Après avoir exécuté plusieurs tests sur le code, j'ai déterminé que GLFW et GLEW sont initialisés avec succès encore quand j'essaie de créer un objet GLFWwindow* à utiliser avec les fonctions GLFW, la fonction glfwCreateWindow() renvoie un nullptr. Pourquoi est-ce et comment puis-je le réparer? Voici mon code:Impossible de créer GLFWwindow en C++ - glfwCreateWindow renvoie nullptr?

#include <iostream> 
#define GLEW_STATIC 
#include <GL/glew.h> 
#include <GLFW/glfw3.h> 

const GLuint windowWidth = 500, windowHeight = 500; 

int main() 
{ 
    glfwInit(); 

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 

    GLFWwindow* window = glfwCreateWindow(windowWidth, windowHeight, "Learn OpenGL", nullptr, nullptr); 
    if (window == nullptr) { 
     std::cout << "Failed to create GLFW window!" << std::endl; 
     char myvar1; std::cin >> myvar1; 
     glfwTerminate(); 
     return -1; 
    } 
    glfwMakeContextCurrent(window); 
    glewExperimental = GL_TRUE; 
    if (glewInit() != GL_TRUE) { 
     std::cout << "Failed to initialize GLEW" << std::endl; 
     char myvar2; std::cin >> myvar2; 
     return -1; 
    } 

    glViewport(0, 0, windowWidth, windowHeight); 
    while (!glfwWindowShouldClose(window)) { 
     glfwPollEvents(); 
     glfwSwapBuffers(window); 
    } 

    glfwTerminate(); 

    return 0; 
} 
+0

Les documents indiquent "Windows: la création de fenêtre échouera si l'implémentation OpenGL du logiciel Microsoft GDI est la seule disponible." Quelle carte vidéo utilisez-vous, disposez-vous du dernier pilote et exécutez-vous le bureau à distance ou la session de console? –

+0

Utilisation de graphiques embarqués d'un Celeron de 1,9 GHz. Je vais essayer de mettre à jour les pilotes. –

+0

Utilisez OpenGL Extensions Viewer pour confirmer que votre GPU prend en charge 3.3. Je courais dans le même problème, il s'avère que l'émulation GPU de Parallels va seulement jusqu'à 3.2, mais c'est ce que j'ai pour essayer de faire des graphiques sur une machine virtuelle. –

Répondre

2

Ceci est probablement parce que vous spécifiez la version 3.3 pour la création de contexte et votre version opengl est inférieure à 3,3. OpenGL: GLFW_CONTEXT_VERSION_MAJOR et GLFW_CONTEXT_VERSION_MINOR ne sont pas des contraintes strictes, mais la création échouera si la version OpenGL du contexte créé est inférieure à celle demandée.

Cela peut arriver si vous utilisez un ordinateur portable doté de 2 GPU. Ils le font pour des raisons de consommation d'énergie, la plupart des applications seront exécutées avec le GPU standard et pour les jeux par exemple, il utilisera le processeur haute performance. Par exemple, mon ordinateur portable est équipé d'un GPU Intel (R) HD Graphics 3000 (version 3.1 opengl) et d'un GPU NVIDIA geforce gt 630M (version 4.4 opengl).

Vous pouvez voir si votre ordinateur portable a cette fonctionnalité si vous faites un clic droit sur un raccourci d'application et avez l'option "Exécuter avec processeur graphique": - "Processeur haute performance (NVIDIA)" - "Integrated graphics (default)"

Le problème est que l'éditeur (eclipse/ms visual studio, etc ..) (dans lequel vous exécutez votre code) utilisera celui par défaut et aura généralement une version beaucoup plus basse d'opengl que votre autre GPU.

Vous pouvez résoudre ce problème en exécutant toujours votre programme d'édition avec votre GPU haute performance.

Si vous n'utilisez pas d'ordinateur portable ou si vous ne disposez que d'un GPU, essayez de mettre à jour vos pilotes.