2015-06-17 42 views
0

我试图把所有GLFW3初始化代码从主要到单独的文件。 当我运行代码时,我在glew init函数上得到EXC_BAD_ACCESS,因为GLFW无法创建窗口。在代码分离之前,一切都很好。是否有可能在其他功能GLFW设置代码?GLFW3创建窗口返回空

我开始学习C和openGL,所以任何帮助将不胜感激。

这是window_manager.h

typedef struct Window_manager 
{ 
    GLFWwindow *window; 
    GLuint window_width; 
    GLuint window_height; 
    const char *window_title; 
} Window_manager; 

Window_manager *set_up_window(GLuint width, GLuint height, const char *title); 

守则window_manager.c

Window_manager *set_up_window(GLuint width, GLuint height, const char *title) 
{ 
    Window_manager *win_man = malloc(sizeof(Window_manager)); 
    // Init GLFW 
    //glfwSetErrorCallback(error_fiutallback); 

    if (!glfwInit()) 
    exit(EXIT_FAILURE); 

    // Set all the required options for GLFW 
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 

    win_man->window_width = width; 
    win_man->window_height = height; 
    win_man->window_title = title; 
    win_man->window = glfwCreateWindow(win_man->window_width, win_man->window_height, win_man->window_title, NULL, NULL); 
    glfwMakeContextCurrent(win_man->window); 

    // Set the required callback functions 
    //glfwSetKeyCallback(win_man->window, key_callback); 

    return win_man; 
} 

而且main.c中

int main(int argc, const char * argv[]) 
{ 
    Window_manager *win_man = set_up_window(800, 600, "fjut");  
    glewExperimental = GL_TRUE; 
    // Initialize GLEW to setup the OpenGL Function pointers 
    GLenum err = glewInit(); 
    if (GLEW_OK != err) 
{ 
    //Problem: glewInit failed, something is seriously wrong. 
    printf("Error: %s\n", glewGetErrorString(err)); 
} 
fprintf(stdout, "Status: Using GLEW %s\n", 
glewGetString(GLEW_VERSION)); 
+0

您是否尝试过设置GLFW_CONTEXT_VERSION_MINOR? – BDL

+0

@BDL glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);这条线完美地工作。 感谢您的帮助。 – DontKnowWhatIsWhat

回答

0

原因没有得到窗口中打开的是,除了其他窗口提示之外,还必须指定GLFW_CONTEXT_VERSION_MINOR。可以这样做,例如:

glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);