new render target class while working on the exhibit UI
[laserbrain_demo] / src / app.cc
index 620ec52..7fc5c13 100644 (file)
@@ -21,6 +21,7 @@
 #include "blob_exhibit.h"
 #include "dbg_gui.h"
 #include "geomdraw.h"
+#include "ui_exhibit.h"
 
 #define NEAR_CLIP      5.0
 #define FAR_CLIP       10000.0
@@ -170,6 +171,11 @@ bool app_init(int argc, char **argv)
                //return false;
        }
        */
+       if(!exui_init()) {
+               error_log("failed to initialize exhibit ui system\n");
+               return false;
+       }
+       exui_setnode(&exslot_left.node);
 
        if(!(sdr_ltmap_notex = create_program_load("sdr/lightmap.v.glsl", "sdr/lightmap-notex.p.glsl"))) {
                return false;
@@ -217,6 +223,8 @@ void app_cleanup()
 
        delete rend;
 
+       exui_shutdown();
+
        /* this must be destroyed before the scene graph to detach exhibit nodes
         * before the scene tries to delete them recursively
         */
@@ -253,6 +261,7 @@ static void update(float dt)
 
        mscn->update(dt);
        exman->update(dt);
+       exui_update(dt);
 
        float speed = walk_speed * dt;
        Vec3 dir;
@@ -351,13 +360,18 @@ static void update(float dt)
                exsel_hover = exman->select(ray);
        }
 
-       if(!exslot_left.empty()) exslot_left.node.update(dt);
-       if(!exslot_right.empty()) exslot_right.node.update(dt);
-
        // update hand-tracking
        if(have_handtracking) {
                update_vrhands(&avatar);
+       } else {
+               // set the position of the left hand at a suitable position for the exhibit UI
+               Vec3 dir = transpose(mouse_view_matrix.upper3x3()) * Vec3(0, 0, -1);
+               exslot_left.node.set_position(avatar.pos + dir * 30); // magic: distance in front
        }
+
+       if(!exslot_right.empty()) exslot_right.node.update(dt);
+       // always update the left slot, because it's the anchor point of the exhibit ui
+       exslot_left.node.update(dt);
 }
 
 void app_display()
@@ -498,6 +512,8 @@ static void draw_scene()
                glPopAttrib();
        }
 
+       exui_draw();
+
        print_text(Vec2(9 * win_width / 10, 20), Vec3(1, 1, 0), "fps: %.1f", framerate);
        draw_ui();
 }