I was trying to put all GLFW3 init code from main to separate file. When I'm running the code, I get EXC_BAD_ACCESS on glew init function, because GLFW could not create window. Before code separation everything was ok. Is it possible to have GLFW setup code in other function?
This is 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);
Code in 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;
}
And in 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));
The reason for not getting the window opened is that one has to specify GLFW_CONTEXT_VERSION_MINOR in addition to the other window hints. This could be done, e.g., with: