3d options
[vg.git] / src / vg / vg.h
index 80c31e1a876f887a2c98b57b6c1906c7a86f77a3..ad508fb7a2457a0ce907ac20d1ba6484555d1872 100644 (file)
@@ -31,7 +31,12 @@ void vg_exiterr( const char *strErr );
 
 /* Engine globals */
 GLFWwindow* vg_window;
-m3x3f vg_pv;
+
+#ifdef VG_3D
+ m4x4f vg_pv;
+#else
+ m3x3f vg_pv;
+#endif
 
 #ifdef VG_CAPTURE_MODE
 int vg_window_x = 1920;
@@ -65,11 +70,11 @@ double vg_time,
 #ifndef VG_RELEASE
 void vg_checkgl( const char *src_info )
 {
-       GLenum err;
-       while( (err = glGetError()) != GL_NO_ERROR )
-       {
-               vg_error( "(%s) OpenGL Error: #%d\n", src_info, err );
-       }
+   GLenum err;
+   while( (err = glGetError()) != GL_NO_ERROR )
+   {
+      vg_error( "(%s) OpenGL Error: #%d\n", src_info, err );
+   }
 }
 
  #define VG_STRINGIT( X ) #X
@@ -86,38 +91,38 @@ u32 vg_exit_count = 0;
 
 void vg_register_exit( void( *funcptr )(void), const char *name )
 {
-       vg_info( "exit registered: (%u)'%s'\n", vg_exit_count, name );
-       vg_on_exit[ vg_exit_count ++ ] = funcptr;
+   vg_info( "exit registered: (%u)'%s'\n", vg_exit_count, name );
+   vg_on_exit[ vg_exit_count ++ ] = funcptr;
 }
 
 void vg_exit(void)
 {
-       for( int i = vg_exit_count-1; i >= 0; i -- )
-       {
-               vg_info( "engine_exit[%d]()\n", i );
-               vg_on_exit[i]();
-       }
-       
-       vg_info( "done\n" );
+   for( int i = vg_exit_count-1; i >= 0; i -- )
+   {
+      vg_info( "engine_exit[%d]()\n", i );
+      vg_on_exit[i]();
+   }
+   
+   vg_info( "done\n" );
 }
 
 void vg_exiterr( const char *strErr )
 {
-       vg_error( "Engine Fatal: %s\n", strErr );
-       vg_exit();
-       exit(0);
+   vg_error( "Engine Fatal: %s\n", strErr );
+   vg_exit();
+   exit(0);
 }
 
 void vg_mouse_callback( GLFWwindow* ptrW, double xpos, double ypos )
 {
-       vg_mouse[0] = xpos;
-       vg_mouse[1] = ypos;
+   vg_mouse[0] = xpos;
+   vg_mouse[1] = ypos;
 }
 
 void vg_scroll_callback( GLFWwindow* ptrW, double xoffset, double yoffset )
 {
-       vg_mouse_wheel[0] += xoffset;
-       vg_mouse_wheel[1] += yoffset;
+   vg_mouse_wheel[0] += xoffset;
+   vg_mouse_wheel[1] += yoffset;
 }
 
 
@@ -131,8 +136,8 @@ static void vg_free(void) VG_GAMELOOP;
 
 void vg_framebuffer_resize_callback( GLFWwindow *ptrW, int w, int h )
 {
-       vg_window_x = w;
-       vg_window_y = h;
+   vg_window_x = w;
+   vg_window_y = h;
 
 #ifdef VG_FRAMEBUFFER_RESIZE
    vg_framebuffer_resize(w,h);
@@ -142,165 +147,167 @@ void vg_framebuffer_resize_callback( GLFWwindow *ptrW, int w, int h )
 static void vg_init( int argc, char *argv[], const char *window_name )
 {
 #ifdef VG_STEAM
-       if( !sw_init() )
-               return;
+   if( !sw_init() )
+      return;
 #endif
-       
-       glfwInit();
-       glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 3 );
-       glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 3 );
-       glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
-       glfwWindowHint( GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE );
-       
+   
+   glfwInit();
+   glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 3 );
+   glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 3 );
+   glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
+   glfwWindowHint( GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE );
+   
 #ifdef VG_CAPTURE_MODE
-       glfwWindowHint( GLFW_RESIZABLE, GLFW_FALSE );
+   glfwWindowHint( GLFW_RESIZABLE, GLFW_FALSE );
 #else
-       glfwWindowHint( GLFW_RESIZABLE, GLFW_TRUE );
+   glfwWindowHint( GLFW_RESIZABLE, GLFW_TRUE );
 #endif
    glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE);
    
 #if 0
    glfwWindowHint(GLFW_SAMPLES,4);
 #endif
-       
-       GLFWmonitor *monitor_primary = glfwGetPrimaryMonitor();
-       
-       const GLFWvidmode *mode = glfwGetVideoMode( monitor_primary );
-       glfwWindowHint( GLFW_RED_BITS, mode->redBits );
-       glfwWindowHint( GLFW_GREEN_BITS, mode->greenBits );
-       glfwWindowHint( GLFW_BLUE_BITS, mode->blueBits );
+   
+   GLFWmonitor *monitor_primary = glfwGetPrimaryMonitor();
+   
+   const GLFWvidmode *mode = glfwGetVideoMode( monitor_primary );
+   glfwWindowHint( GLFW_RED_BITS, mode->redBits );
+   glfwWindowHint( GLFW_GREEN_BITS, mode->greenBits );
+   glfwWindowHint( GLFW_BLUE_BITS, mode->blueBits );
    
    int refresh_rate = mode->refreshRate;
 
    if( refresh_rate < 28 || refresh_rate >= 144 )
       refresh_rate = 60;
 
-       glfwWindowHint( GLFW_REFRESH_RATE, refresh_rate );
+   glfwWindowHint( GLFW_REFRESH_RATE, refresh_rate );
 
-       if( !(vg_window = glfwCreateWindow( vg_window_x, vg_window_y, 
+   if( !(vg_window = glfwCreateWindow( vg_window_x, vg_window_y, 
                                        window_name, NULL, NULL)) )
-               vg_exiterr( "GLFW Failed to initialize" );
-       else
-               vg_register_exit( &glfwTerminate, "glfwTerminate" );
-       
-       glfwMakeContextCurrent( vg_window );
-       glfwSwapInterval( 1 );
+      vg_exiterr( "GLFW Failed to initialize" );
+   else
+      vg_register_exit( &glfwTerminate, "glfwTerminate" );
+   
+   glfwMakeContextCurrent( vg_window );
+   glfwSwapInterval( 1 );
 
    glfwSetWindowSizeLimits( vg_window, 800, 600, GLFW_DONT_CARE,GLFW_DONT_CARE);
-       glfwSetFramebufferSizeCallback( vg_window, vg_framebuffer_resize_callback );
+   glfwSetFramebufferSizeCallback( vg_window, vg_framebuffer_resize_callback );
 
-       glfwSetCursorPosCallback( vg_window, vg_mouse_callback );
-       glfwSetScrollCallback( vg_window, vg_scroll_callback );
-       
-       glfwSetCharCallback( vg_window, console_proc_wchar );
-       glfwSetKeyCallback( vg_window, console_proc_key );
+   glfwSetCursorPosCallback( vg_window, vg_mouse_callback );
+   glfwSetScrollCallback( vg_window, vg_scroll_callback );
+   
+   glfwSetCharCallback( vg_window, console_proc_wchar );
+   glfwSetKeyCallback( vg_window, console_proc_key );
 #if 0
-       glfwSetInputMode(vg_window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
+   glfwSetInputMode(vg_window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
 #endif
 
-       if( !gladLoadGLLoader((GLADloadproc)glfwGetProcAddress) ) 
-               vg_exiterr( "Glad failed to initialize" );
-
-       const unsigned char* glver = glGetString( GL_VERSION );
-       vg_success( "Load setup complete, OpenGL version: %s\n", glver );
-       
-       vg_run_gfx_diagnostics();
-       
-       for( int id = 0; id <= GLFW_JOYSTICK_LAST; id ++ )
-       {
-               if( glfwJoystickIsGamepad( id ) )
-               {
-                       vg_gamepad_name = glfwGetGamepadName( id );
-                       vg_success( "Gamepad with mapping registered: %s\n", vg_gamepad_name );
-                       
-                       vg_gamepad_ready = 1;
-                       vg_gamepad_id = id;
-                       
-                       break;
-               }
-       }
-       
-       vg_lines_init();
-       vg_register_exit( &vg_lines_free, "vg_lines_free" );
-       ui_default_init();
-       vg_register_exit( &ui_default_free, "UI" );
-               
-       vg_register();
-       vg_register_exit( &vg_free, "vg_free" );
-       
-       if( vg_shaders_compile() )
-       {
-               vg_start();
-       
-               vg_console_init();
-               vg_register_exit( &vg_console_free, "Console" );
-       
-               vg_audio_init();
-               vg_register_exit( &vg_audio_free, "vg_audio_free" );
-               
-               vg_debugtools_setup();
-               
+   if( !gladLoadGLLoader((GLADloadproc)glfwGetProcAddress) ) 
+      vg_exiterr( "Glad failed to initialize" );
+
+   const unsigned char* glver = glGetString( GL_VERSION );
+   vg_success( "Load setup complete, OpenGL version: %s\n", glver );
+   
+   vg_run_gfx_diagnostics();
+   
+   for( int id = 0; id <= GLFW_JOYSTICK_LAST; id ++ )
+   {
+      if( glfwJoystickIsGamepad( id ) )
+      {
+         vg_gamepad_name = glfwGetGamepadName( id );
+         vg_success( "Gamepad with mapping registered: %s\n", vg_gamepad_name );
+         
+         vg_gamepad_ready = 1;
+         vg_gamepad_id = id;
+         
+         break;
+      }
+   }
+   
+   vg_lines_init();
+   vg_register_exit( &vg_lines_free, "vg_lines_free" );
+   ui_default_init();
+   vg_register_exit( &ui_default_free, "UI" );
+      
+   vg_register();
+   vg_register_exit( &vg_free, "vg_free" );
+   
+   if( vg_shaders_compile() )
+   {
+      vg_start();
+   
+      vg_console_init();
+      vg_register_exit( &vg_console_free, "Console" );
+   
+      vg_audio_init();
+      vg_register_exit( &vg_audio_free, "vg_audio_free" );
+      
+      vg_debugtools_setup();
+      
       /* 
        * Main gameloop
        */
-               while( !glfwWindowShouldClose( vg_window ) )
-               {
-                       v2_copy( (v2f){ 0.0f, 0.0f }, vg_mouse_wheel );
-
-                       glfwPollEvents();
-                       
-                       #ifdef VG_STEAM
-                       sw_event_loop();
-                       #endif
-                       
-                       vg_time_last = vg_time;
-                       vg_time = glfwGetTime();
-                       vg_time_delta = vg_minf( vg_time - vg_time_last, 0.1f );
-                       
-                       vg_update_inputs();
-                       vg_update();
-                       vg_render();
-                       
-                       vg_lines_drawall((float*)vg_pv);
-                       
-                       {
-                               ui_begin( &ui_global_ctx, vg_window_x, vg_window_y );
-                               ui_set_mouse( &ui_global_ctx, vg_mouse[0], vg_mouse[1], 
+      while( !glfwWindowShouldClose( vg_window ) )
+      {
+         v2_copy( (v2f){ 0.0f, 0.0f }, vg_mouse_wheel );
+
+         glfwPollEvents();
+         
+         #ifdef VG_STEAM
+         sw_event_loop();
+         #endif
+         
+         vg_time_last = vg_time;
+         vg_time = glfwGetTime();
+         vg_time_delta = vg_minf( vg_time - vg_time_last, 0.1f );
+         
+         vg_update_inputs();
+         vg_update();
+         vg_render();
+         
+         vg_lines_drawall((float*)vg_pv);
+         
+         {
+            ui_begin( &ui_global_ctx, vg_window_x, vg_window_y );
+            ui_set_mouse( &ui_global_ctx, vg_mouse[0], vg_mouse[1], 
                   vg_get_button_state( "primary" ) );
-                               
-                               vg_ui();
-                               vg_console_draw();
-                               vg_debugtools_draw();
-                               
-                               ui_resolve( &ui_global_ctx );
-                               ui_draw( &ui_global_ctx, NULL );
-                       }
-                       
-                       glfwSwapBuffers( vg_window );
-                       VG_CHECK_GL();
-               }
-       }
-       
-       vg_exit();
+            
+            vg_ui();
+            vg_console_draw();
+            vg_debugtools_draw();
+            
+            ui_resolve( &ui_global_ctx );
+            ui_draw( &ui_global_ctx, NULL );
+         }
+         
+         glfwSwapBuffers( vg_window );
+         VG_CHECK_GL();
+      }
+   }
+   
+   vg_exit();
 }
 
+#ifndef VG_3D
 void vg_projection_update(void)
 {
    /*
     * Reproject screenspace mouse into world
     */
 
-       vg_mouse_ws[0] = vg_mouse[0];
-       vg_mouse_ws[1] = vg_mouse[1];
-       vg_mouse_ws[2] = 1.0f;
-       
-       vg_mouse_ws[0] =   (2.0f * vg_mouse_ws[0]) / ((float)vg_window_x) - 1.0f;
-       vg_mouse_ws[1] = -((2.0f * vg_mouse_ws[1]) / ((float)vg_window_y) - 1.0f);
-       
-       m3x3f inverse;
-       m3x3_inv( vg_pv, inverse ); 
-       m3x3_mulv( inverse, vg_mouse_ws, vg_mouse_ws );
+   vg_mouse_ws[0] = vg_mouse[0];
+   vg_mouse_ws[1] = vg_mouse[1];
+   vg_mouse_ws[2] = 1.0f;
+   
+   vg_mouse_ws[0] =   (2.0f * vg_mouse_ws[0]) / ((float)vg_window_x) - 1.0f;
+   vg_mouse_ws[1] = -((2.0f * vg_mouse_ws[1]) / ((float)vg_window_y) - 1.0f);
+   
+   m3x3f inverse;
+   m3x3_inv( vg_pv, inverse ); 
+   m3x3_mulv( inverse, vg_mouse_ws, vg_mouse_ws );
 }
+#endif
 
 #endif