int main(int argc, char **argv) { const char *progname = argv[0]; if(argc < 2) { fprintf(stderr, "usage: %s filename # e.g. \"%s 64gon.builtin\"\n", progname, progname); exit(EXIT_FAILURE); } const char *scene_filename = argv[1]; GLFWwindow* window; glfwSetErrorCallback(ErrorCallback); if(!glfwInit()) exit(EXIT_FAILURE); 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); glfwWindowHint(GLFW_SAMPLES, 4); window = glfwCreateWindow(gWindowWidth = 512, gWindowHeight = 512, "Spin", NULL, NULL); if (!window) { glfwTerminate(); fprintf(stdout, "Couldn't open main window\n"); exit(EXIT_FAILURE); } glfwMakeContextCurrent(window); InitializeGL(); bool success; tie(success, gSceneRoot, gSceneController) = LoadScene(scene_filename); if(!success) { fprintf(stderr, "couldn't load scene from %s\n", scene_filename); exit(EXIT_FAILURE); } InitializeScene(gSceneRoot); if(gVerbose) { printf("GL_RENDERER: %s\n", glGetString(GL_RENDERER)); printf("GL_VERSION: %s\n", glGetString(GL_VERSION)); } gSceneController->Resize(gWindowWidth, gWindowHeight); glfwSetKeyCallback(window, KeyCallback); glfwSetMouseButtonCallback(window, ButtonCallback); glfwSetCursorPosCallback(window, MotionCallback); glfwSetScrollCallback(window, ScrollCallback); glfwSetFramebufferSizeCallback(window, ResizeCallback); glfwSetWindowRefreshCallback(window, DrawFrame); gSceneStartTime = gScenePreviousTime = chrono::system_clock::now(); while (!glfwWindowShouldClose(window)) { DrawFrame(window); glfwSwapBuffers(window); if(gStreamFrames) glfwPollEvents(); else glfwWaitEvents(); } glfwTerminate(); }
static void ResizeCallback(GLFWwindow *window, int x, int y) { glfwGetFramebufferSize(window, &gWindowWidth, &gWindowHeight); glViewport(0, 0, gWindowWidth, gWindowHeight); gSceneController->Resize(gWindowWidth, gWindowHeight); }