void GLFWCALL key_event(int key, int action) { set_modifiers(); if (action == GLFW_PRESS) { app_key_down((long)key); key_character = -1; key_time = 0.0f; key_repeat_time = 0.0f; key_pressed = key; initial_key_delay = 0.04f; } if (action == GLFW_RELEASE) { app_key_up((long)key); key_pressed = -1; } }
int main(int argc, char* argv[]) { app_argc = argc; app_argv = argv; int width, height, running, frames, x, y; double t, t1; char titlestr[ 200 ]; // Initialise GLFW glfwInit(); bool start_fullscreen = false; int x_res = 1280; int y_res = 720; bool manual_resolution_set = false; for (int i = 1; i < argc; i++) { vsx_string arg1 = argv[i]; if (arg1 == "--help" || arg1 == "/?" || arg1 == "-help" || arg1 == "-?") { printf( "Usage:\n" " vsxu_player [path_to_vsx_file]\n" "\n" "Flags: \n" " -pl Preload all visuals on start \n" " -dr Disable randomizer \n" " -p [x,y] Set window position x,y \n" " -s [x,y] Set window size x,y \n\n\n" ); exit(0); } else if (arg1 == "-f") { start_fullscreen = true; } else if (arg1 == "-pl") { option_preload_all = true; } else if (arg1 == "-dr") { disable_randomizer = true; } else if (arg1 == "-no") { no_overlay = true; } else if (arg1 == "-s") { if (i+1 < argc) { i++; vsx_string arg2 = argv[i]; vsx_avector<vsx_string> parts; vsx_string deli = ","; explode(arg2, deli, parts); if (parts.size() == 2) { x_res = s2i(parts[0]); y_res = s2i(parts[1]); manual_resolution_set = true; } else { deli = "x"; explode(arg2, deli, parts); if ( parts.size() == 2 ) { x_res = s2i(parts[0]); y_res = s2i(parts[1]); manual_resolution_set = true; } } } } } if (start_fullscreen && !manual_resolution_set) { // try to get the resolution from the desktop for fullscreen GLFWvidmode video_mode; glfwGetDesktopMode(&video_mode); x_res = video_mode.Height; y_res = video_mode.Width; } // Open OpenGL window glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); if( !glfwOpenWindow( x_res, y_res, 0,0,0,0,16,0, start_fullscreen?GLFW_FULLSCREEN:GLFW_WINDOW ) ) // GLFW_FULLSCREEN { printf("Error! Could not create an OpenGL context. Please check your GPU drivers...\n"); glfwTerminate(); return 0; } if (start_fullscreen) glfwEnable( GLFW_MOUSE_CURSOR ); app_init(0); glfwEnable(GLFW_AUTO_POLL_EVENTS); for (int i = 1; i < argc; i++) { vsx_string arg1 = argv[i]; if (arg1 == "-p") { if (i+1 < argc) { i++; vsx_string arg2 = argv[i]; vsx_avector<vsx_string> parts; vsx_string deli = ","; explode(arg2, deli, parts); glfwSetWindowPos(s2i(parts[0]), s2i(parts[1])); } } } glfwSetKeyCallback(&key_event); glfwSetMouseButtonCallback(&mouse_button_event); glfwSetMousePosCallback(&mouse_pos_event); glfwSetCharCallback(&key_char_event); glfwSetMouseWheelCallback(&mouse_wheel); // set window size callback function glfwSetWindowSizeCallback(window_size); // Enable sticky keys glfwEnable( GLFW_STICKY_KEYS ); glfwSwapInterval(1); // Main loop running = GL_TRUE; frames = 0; #if PLATFORM_FAMILY == PLATFORM_FAMILY_UNIX sprintf( titlestr, "Vovoid VSXu Player %s [GNU/Linux %d-bit]", vsxu_ver, PLATFORM_BITS); #endif #if PLATFORM_FAMILY == PLATFORM_FAMILY_WINDOWS sprintf( titlestr, "Vovoid VSXu Player %s [Windows %d-bit]", vsxu_ver, PLATFORM_BITS); #endif glfwSetWindowTitle( titlestr ); while( running ) { if (mouse_pos_type) { if (mouse_pos_type == 1) app_mouse_move(last_x,last_y); else app_mouse_move_passive(last_x,last_y); mouse_pos_type = 0; } app_pre_draw(); // Get time and mouse position t = glfwGetTime(); glfwGetMousePos( &x, &y ); float delta = t-t1; t1 = t; if (key_pressed != -1) { //printf("%f\n", delta); key_time += delta; if (key_time > 0.3f) { key_repeat_time += delta; if (key_repeat_time > initial_key_delay) { key_repeat_time = 0.0f; if (key_character != -1) app_char(key_character); app_key_down((long)key_pressed); initial_key_delay *= 0.99f; //printf("repeating key: %d\n", key_character); } } } frames ++; // Get window size (may be different than the requested size) glfwGetWindowSize( &width, &height ); height = height > 0 ? height : 1; // Set viewport gl_state.viewport_set( 0, 0, width, height ); // Clear color buffer glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); app_draw(0); glfwSwapBuffers(); // Check if the ESC key was pressed or the window was closed running = /*!glfwGetKey( GLFW_KEY_ESC ) &&*/ glfwGetWindowParam( GLFW_OPENED ); } // Close OpenGL window and terminate GLFW glfwTerminate(); return 0; }
int main(int argc, char* argv[]) { app_argc = argc; app_argv = argv; int width, height, running, frames, x, y; double t, t1; char titlestr[ 200 ]; // Initialise GLFW if (glfwInit() == GL_FALSE) { printf("could not init glfw...\n"); } bool start_fullscreen = false; int x_res = 1280; int y_res = 720; for (int i = 1; i < argc; i++) { vsx_string arg1 = argv[i]; if (arg1 == "--help") { printf( "Usage:\n" " luna \n" "\n" "Flags: \n" " -p [x,y] window position x,y \n\n" " -s [x,y] window size x,y \n\n" " -f fullscreen \n\n" ); exit(0); } else if (arg1 == "-f") { start_fullscreen = true; } else if (arg1 == "-s") { if (i+1 < argc) { i++; vsx_string arg2 = argv[i]; vsx_avector<vsx_string> parts; vsx_string deli = ","; explode(arg2, deli, parts); x_res = s2i(parts[0]); y_res = s2i(parts[1]); } } } // Open OpenGL window //glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); if( !glfwOpenWindow( x_res, y_res, 0,0,0,0,16,0, start_fullscreen?GLFW_FULLSCREEN:GLFW_WINDOW ) ) // GLFW_FULLSCREEN { printf("could not create glfw window...\n"); glfwTerminate(); return 10; } if (start_fullscreen) glfwEnable( GLFW_MOUSE_CURSOR ); app_init(0); glfwEnable(GLFW_AUTO_POLL_EVENTS); for (int i = 1; i < argc; i++) { vsx_string arg1 = argv[i]; if (arg1 == "-p") { if (i+1 < argc) { i++; vsx_string arg2 = argv[i]; vsx_avector<vsx_string> parts; vsx_string deli = ","; explode(arg2, deli, parts); glfwSetWindowPos(s2i(parts[0]), s2i(parts[1])); } } } glfwSetKeyCallback(&key_event); glfwSetMouseButtonCallback(&mouse_button_event); glfwSetMousePosCallback(&mouse_pos_event); glfwSetCharCallback(&key_char_event); glfwSetMouseWheelCallback(&mouse_wheel); // Enable sticky keys glfwEnable( GLFW_STICKY_KEYS ); glfwSwapInterval(1); // Main loop running = GL_TRUE; frames = 0; //typedef BOOL (APIENTRY * wglSwapIntervalEXT_Func)(int); //wglSwapIntervalEXT_Func wglSwapIntervalEXT = wglSwapIntervalEXT_Func(wglGetProcAddress("wglSwapIntervalEXT")); //if (wglSwapIntervalEXT) wglSwapIntervalEXT(1); sprintf( titlestr, "Vovoid - Luna : Reactivation"); glfwSetWindowTitle( titlestr ); glfwDisable( GLFW_MOUSE_CURSOR ); while( running ) { if (mouse_pos_type) { if (mouse_pos_type == 1) app_mouse_move(last_x,last_y); else app_mouse_move_passive(last_x,last_y); mouse_pos_type = 0; } app_pre_draw(); // Get time and mouse position t = glfwGetTime(); glfwGetMousePos( &x, &y ); float delta = t-t1; t1 = t; if (key_pressed != -1) { //printf("%f\n", delta); key_time += delta; if (key_time > 0.3f) { key_repeat_time += delta; if (key_repeat_time > initial_key_delay) { key_repeat_time = 0.0f; if (key_character != -1) app_char(key_character); app_key_down((long)key_pressed); initial_key_delay *= 0.99f; //printf("repeating key: %d\n", key_character); } } } frames ++; // Get window size (may be different than the requested size) glfwGetWindowSize( &width, &height ); height = height > 0 ? height : 1; // Set viewport glViewport( 0, 0, width, height ); // Clear color buffer glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Reset The Modelview Matrix app_draw(0); // Swap buffers glfwSwapBuffers(); // Check if the ESC key was pressed or the window was closed running = /*!glfwGetKey( GLFW_KEY_ESC ) &&*/ glfwGetWindowParam( GLFW_OPENED ); } // Close OpenGL window and terminate GLFW glfwTerminate(); return 0; }
int main(int argc, char* argv[]) { vsx_argvector::get_instance()->init_from_argc_argv(argc, argv); if (vsx_argvector::get_instance()->has_param("help")) { glewInit(); app_print_cli_help(); exit(0); } // Initialise GLFW glfwInit(); set_modifiers(); int width, height, running, frames, x, y; double t, t1; char titlestr[ 200 ]; bool start_fullscreen = false; bool manual_resolution_set = false; int x_res = 1280; int y_res = 720; if (vsx_argvector::get_instance()->has_param("f")) { start_fullscreen = true; } if (vsx_argvector::get_instance()->has_param_with_value("s")) { vsx_string arg2 = vsx_argvector::get_instance()->get_param_value("s"); vsx_avector<vsx_string> parts; vsx_string deli = ","; explode(arg2, deli, parts); if (parts.size() == 2) { x_res = vsx_string_helper::s2i(parts[0]); y_res = vsx_string_helper::s2i(parts[1]); manual_resolution_set = true; } else { deli = "x"; explode(arg2, deli, parts); if ( parts.size() == 2 ) { x_res = vsx_string_helper::s2i(parts[0]); y_res = vsx_string_helper::s2i(parts[1]); manual_resolution_set = true; } } } if (start_fullscreen && !manual_resolution_set) { // try to get the resolution from the desktop for fullscreen GLFWvidmode video_mode; glfwGetDesktopMode(&video_mode); x_res = video_mode.Height; y_res = video_mode.Width; } if (vsx_argvector::get_instance()->has_param("gl_debug")) { printf("enabling GL DEBUG\n"); glfwOpenWindowHint( GLFW_OPENGL_DEBUG_CONTEXT , GL_TRUE ); } // OpenGL version glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 2); glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 1); if( !glfwOpenWindow( x_res, y_res, 0,0,0,0,16,0, start_fullscreen?GLFW_FULLSCREEN:GLFW_WINDOW ) ) // GLFW_FULLSCREEN { printf("Error! Could not create an OpenGL context. Please check your GPU drivers...\n"); glfwTerminate(); return 0; } glewInit(); if (start_fullscreen) glfwEnable( GLFW_MOUSE_CURSOR ); app_load(0); glfwEnable(GLFW_AUTO_POLL_EVENTS); for (int i = 1; i < argc; i++) { vsx_string arg1 = argv[i]; if (arg1 == "-p") { if (i+1 < argc) { i++; vsx_string arg2 = argv[i]; vsx_avector<vsx_string> parts; vsx_string deli = ","; explode(arg2, deli, parts); glfwSetWindowPos( vsx_string_helper::s2i(parts[0]), vsx_string_helper::s2i(parts[1]) ); } } } glfwSetKeyCallback(&key_event); glfwSetMouseButtonCallback(&mouse_button_event); glfwSetMousePosCallback(&mouse_pos_event); glfwSetCharCallback(&key_char_event); glfwSetMouseWheelCallback(&mouse_wheel); // set window size callback function glfwSetWindowSizeCallback(window_size); // Enable sticky keys glfwEnable( GLFW_STICKY_KEYS ); // vsync handling bool vsync = true; if (vsx_argvector::get_instance()->has_param("novsync")) { vsync = false; glfwSwapInterval(0); } else { glfwSwapInterval(1); } // Main loop running = GL_TRUE; frames = 0; if (vsx_argvector::get_instance()->has_param("gl_debug")) { // enable debug callback if (__GLEW_ARB_debug_output) { glDebugMessageCallbackARB( myErrorCallback, NULL); GLuint unusedIds = 0; glDebugMessageControlARB( GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, &unusedIds, true ); } } int display_gpu_vram_stats = 0; if (vsx_argvector::get_instance()->has_param("gl_vram")) { display_gpu_vram_stats = 1; } #if PLATFORM_FAMILY == PLATFORM_FAMILY_UNIX sprintf( titlestr, "Vovoid VSXu Artiste %s [GNU/Linux %d-bit]", vsxu_ver, PLATFORM_BITS); #endif #if PLATFORM_FAMILY == PLATFORM_FAMILY_WINDOWS sprintf( titlestr, "Vovoid VSXu Artiste %s [Windows %d-bit]", vsxu_ver, PLATFORM_BITS); #endif glfwSetWindowTitle( titlestr ); vsx_timer frame_delay; int initial_vram_free = 0; while( running ) { frame_delay.start(); if (mouse_pos_type) { if (mouse_pos_type == 1) app_mouse_move(last_x,last_y); else app_mouse_move_passive(last_x,last_y); mouse_pos_type = 0; } if (__GLEW_NVX_gpu_memory_info && display_gpu_vram_stats) { // #define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 // #define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 // #define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 // #define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A // #define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B // GLint total_memory; // GLint total_available; GLint available_memory; // GLint eviction_count; // GLint eviction_size; // glGetIntegerv(GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &total_memory); // glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &total_available); // glGetIntegerv(GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX, &eviction_count); // glGetIntegerv(GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX, &eviction_size); glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &available_memory); // float available_memory_f = (float)available_memory; if (initial_vram_free == 0) initial_vram_free = available_memory >> 10; vsx_printf("GPU MEMORY INFO: Before frame: available vram: %d MB\n", available_memory >> 10); vsx_printf("GPU MEMORY INFO: Probably used vram: %d MB\n", initial_vram_free - (available_memory >> 10)); //if (gtm) //((vsx_tm*)gtm)->plot( available_memory_f, "gpu memory free" ); } app_pre_draw(); // Get time and mouse position t = glfwGetTime(); glfwGetMousePos( &x, &y ); float delta = t-t1; t1 = t; if (key_pressed != -1) { //printf("%f\n", delta); key_time += delta; if (key_time > 0.3f) { key_repeat_time += delta; if (key_repeat_time > initial_key_delay) { key_repeat_time = 0.0f; if (key_character != -1) app_char(key_character); app_key_down((long)key_pressed); initial_key_delay *= 0.99f; //printf("repeating key: %d\n", key_character); } } } frames ++; // Get window size (may be different than the requested size) glfwGetWindowSize( &width, &height ); height = height > 0 ? height : 1; // Set viewport vsx_gl_state::get_instance()->viewport_set( 0, 0, width, height ); // Clear color buffer glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Reset The Modelview Matrix app_draw(0); glfwSwapBuffers(); //#if (PLATFORM != PLATFORM_WINDOWS) // if (!vsync) // { // float dtime = frame_delay.dtime(); // if (dtime < 1.0f/60.0f) // { // float sleeptime = (1.0f / 60.0f - dtime)*1000000.0f; // usleep( (useconds_t) sleeptime ); // } // } //#endif running = glfwGetWindowParam( GLFW_OPENED ); }