- added imgui
[laserbrain_demo] / src / app.cc
index ac6edd9..0356104 100644 (file)
@@ -18,6 +18,7 @@
 #include "vrinput.h"
 #include "exman.h"
 #include "blob_exhibit.h"
+#include "dbg_gui.h"
 
 #define NEAR_CLIP      5.0
 #define FAR_CLIP       10000.0
@@ -70,6 +71,8 @@ static bool show_blobs;
 
 static Renderer *rend;
 
+static bool show_debug_gui;
+
 
 bool app_init(int argc, char **argv)
 {
@@ -112,6 +115,10 @@ bool app_init(int argc, char **argv)
        glEnable(GL_LIGHTING);
        glEnable(GL_NORMALIZE);
 
+       if(!init_debug_gui()) {
+               return false;
+       }
+
        Mesh::use_custom_sdr_attr = false;
 
        float ambient[] = {0.0, 0.0, 0.0, 0.0};
@@ -199,6 +206,8 @@ void app_cleanup()
 
        texman.clear();
        sceneman.clear();
+
+       cleanup_debug_gui();
 }
 
 static bool constrain_walk_mesh(const Vec3 &v, Vec3 *newv)
@@ -338,6 +347,13 @@ void app_display()
        float dt = (float)(time_msec - prev_msec) / 1000.0f;
        prev_msec = time_msec;
 
+       if(show_debug_gui) {
+               ImGui::GetIOPtr()->DeltaTime = dt;
+               ImGui::NewFrame();
+
+               ImGui::ShowTestWindow();
+       }
+
        if(opt.vr) {
                // VR mode
                goatvr_draw_start();
@@ -361,6 +377,10 @@ void app_display()
                        if(have_handtracking) {
                                draw_vrhands();
                        }
+
+                       if(show_debug_gui) {
+                               ImGui::Render();
+                       }
                }
                goatvr_draw_done();
 
@@ -387,6 +407,10 @@ void app_display()
                        slow_post(sdr_post_gamma);
                        glUseProgram(0);
                }
+
+               if(show_debug_gui) {
+                       ImGui::Render();
+               }
                app_swap_buffers();
        }
        assert(glGetError() == GL_NO_ERROR);
@@ -469,12 +493,18 @@ void app_reshape(int x, int y)
 {
        glViewport(0, 0, x, y);
        goatvr_set_fb_size(x, y, 1.0f);
+       debug_gui_reshape(x, y);
 }
 
 void app_keyboard(int key, bool pressed)
 {
        unsigned int mod = app_get_modifiers();
 
+       if(!debug_gui_key(key, pressed, mod)) {
+               // the debug gui indicated that we should ignore the event
+               return;
+       }
+
        if(pressed) {
                switch(key) {
                case 27:
@@ -488,6 +518,11 @@ void app_keyboard(int key, bool pressed)
                        }
                        break;
 
+               case '\t':
+                       show_debug_gui = !show_debug_gui;
+                       show_message("debug gui %s", show_debug_gui ? "enabled" : "disabled");
+                       break;
+
                case '`':
                        app_toggle_grab_mouse();
                        show_message("mouse %s", app_is_mouse_grabbed() ? "grabbed" : "released");
@@ -557,6 +592,11 @@ void app_keyboard(int key, bool pressed)
 
 void app_mouse_button(int bn, bool pressed, int x, int y)
 {
+       if(!debug_gui_mbutton(bn, pressed, x, y)) {
+               // the debug GUI indicated we should ignore the event
+               return;
+       }
+
        prev_mx = x;
        prev_my = y;
        bnstate[bn] = pressed;
@@ -580,6 +620,11 @@ static void mouse_zoom(float dx, float dy)
 
 void app_mouse_motion(int x, int y)
 {
+       if(!debug_gui_mmotion(x, y)) {
+               // the debug GUI indicated we should ignore the event
+               return;
+       }
+
        int dx = x - prev_mx;
        int dy = y - prev_my;
        prev_mx = x;