2015-06-17 5 views
0

Я пытался поместить весь код init GLFW3 из основного в отдельный файл. Когда я запускаю код, я получаю EXC_BAD_ACCESS в функции glew init, потому что GLFW не смог создать окно. До разделения кода все было в порядке. Возможно ли иметь код установки GLFW в другой функции?GLFW3 create window возвращает null

Я начинаю изучать 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^