J'essaie d'exécuter un simple programme OpenGL en utilisant GLFW (version 3.0.2) et GLEW (version 1.10.0) en XCode (version 4.6.3) sur OS X 10.8.4. Le code entier est montré ci-dessous.Plantage de GLEW dans XCode
#include <GLFW/glfw3.h>
#include <OpenGL/OpenGL.h>
#include <iostream>
using namespace std;
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void InitGL()
{
glClearColor(1, 0, 0, 1);
}
void ErrorFunc(int code, const char *msg)
{
cerr << "Error " << code << ": " << msg << endl;
}
int main(void)
{
GLFWwindow* window;
/* Report errors */
glfwSetErrorCallback(ErrorFunc);
/* Initialize the library */
if (!glfwInit())
return -1;
/* Window hints */
glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Initialize OpenGL */
InitGL();
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
RenderScene();
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
La plupart de ces informations proviennent directement de la documentation de GLFW; Seules la fonction de rendu et l'initialisation GLEW sont à moi. J'ai ajouté des frameworks pour OpenGL, Cocoa et IOKit et je les ai liés à libGLEW.a et libglfw3.a. Le programme se compile avec succès mais semble se bloquer quand il tente d'exécuter des fonctions dont GLEW était censé s'occuper. Ici, le programme se bloque sur glClearBufferfv
. Si je commente cela, je reçois une fenêtre avec un fond noir. Je suppose que GLEW ne fonctionne secrètement pas, car il ne signale aucune erreur, mais ne semble pas faire son travail du tout.
Le message d'erreur exact XCode me renvoie error: address doesn't contain a section that points to a section in a object file
avec un code d'erreur de EXC_BAD_ACCESS
. Si je remplace glClearBufferfv
par glClearColor
le programme ne plante pas, mais a toujours un arrière-plan noir alors qu'il devrait être rouge. Lors de la requête, OpenGL renvoie la chaîne de version 2.1 NVIDIA-8.12.47 310.40.00.05f01
, ce qui explique pourquoi les appels aux fonctions les plus récentes ne fonctionnent pas, mais GLEW ne devrait pas avoir configuré le bon contexte OpenGL. De plus, la documentation de GLFW indique qu'ils créent des contextes OpenGL 3+ depuis GLFW 2.7.2. Je ne sais vraiment pas quoi faire.
Sans GLEW, XCode se plaint que 'glClearBufferfv' n'est pas défini. Si j'utilise 'glClearColor' à la place, il s'exécute mais me donne toujours du noir quelle que soit la couleur que je spécifie. –
La définition forcée de la version souhaitée d'OpenGL avec 'glfwWindowHint' ne semble pas fonctionner non plus. Il se bloque pour toute version au-dessus de 2.1 ... –
GLEW ne crée pas de contexte OpenGL; il s'appuie sur l'application pour en avoir créé un avant de s'en aller chercher toutes ses fonctions. Dans votre cas, je pense que GLFW créera le contexte OpenGL. – radical7