X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fapp.cc;h=764d2485b23bada404103207fe3f75272caacb94;hp=30222f9ce50d57444519b7aef8e6d427dc4df427;hb=01d6ef175190e649ecf7deb298f34f0e9bd3233e;hpb=844f36f03073c5db86a8acd2cf7cd1a89e1a16b9 diff --git a/src/app.cc b/src/app.cc index 30222f9..764d248 100644 --- a/src/app.cc +++ b/src/app.cc @@ -15,6 +15,7 @@ #include "opt.h" #include "post.h" #include "renderer.h" +#include "rtarg.h" #include "avatar.h" #include "vrinput.h" #include "exman.h" @@ -41,10 +42,10 @@ bool opt_gear_wireframe; TextureSet texman; SceneSet sceneman; -unsigned int sdr_ltmap, sdr_ltmap_notex; - int fpexcept_enabled; +unsigned int dbg_key_pending; + static Avatar avatar; static float cam_dist = 0.0; @@ -82,6 +83,7 @@ static ExhibitSlot exslot_left, exslot_right; #define exslot_mouse exslot_right static Renderer *rend; +static RenderTarget *goatvr_rtarg; static Ray last_pick_ray; @@ -123,6 +125,8 @@ bool app_init(int argc, char **argv) have_handtracking = goatvr_have_handtracking(); goatvr_recenter(); + + goatvr_rtarg = new RenderTarget; } if(fb_srgb) { @@ -175,18 +179,6 @@ bool app_init(int argc, char **argv) } exui_setnode(&exslot_left.node); - if(!(sdr_ltmap_notex = create_program_load("sdr/lightmap.v.glsl", "sdr/lightmap-notex.p.glsl"))) { - return false; - } - set_uniform_int(sdr_ltmap_notex, "texmap", MTL_TEX_DIFFUSE); - set_uniform_int(sdr_ltmap_notex, "lightmap", MTL_TEX_LIGHTMAP); - - if(!(sdr_ltmap = create_program_load("sdr/lightmap.v.glsl", "sdr/lightmap-tex.p.glsl"))) { - return false; - } - set_uniform_int(sdr_ltmap, "texmap", MTL_TEX_DIFFUSE); - set_uniform_int(sdr_ltmap, "lightmap", MTL_TEX_LIGHTMAP); - if(!fb_srgb) { sdr_post_gamma = create_program_load("sdr/post_gamma.v.glsl", "sdr/post_gamma.p.glsl"); } @@ -195,6 +187,11 @@ bool app_init(int argc, char **argv) if(!rend->init()) { return false; } + if(opt.reflect) { + rend->ropt |= RENDER_MIRRORS; + } else { + rend->ropt &= ~RENDER_MIRRORS; + } rend->set_scene(mscn); glUseProgram(0); @@ -229,6 +226,7 @@ void app_cleanup() app_grab_mouse(false); if(opt.vr) { + delete goatvr_rtarg; goatvr_shutdown(); } destroy_vrhands(); @@ -280,6 +278,21 @@ static void update(float dt) exman->update(dt); exui_update(dt); + // use goatvr sticks for joystick input + int num_vr_sticks = goatvr_num_sticks(); + if(num_vr_sticks > 0) { + float p[2]; + goatvr_stick_pos(0, p); + joy_move.x = p[0]; + joy_move.y = -p[1]; + } + if(num_vr_sticks > 1) { + float p[2]; + goatvr_stick_pos(1, p); + joy_look.x = p[0]; + } + + float speed = walk_speed * dt; Vec3 dir; @@ -418,7 +431,7 @@ void app_display() ImGui::GetIOPtr()->DeltaTime = dt; ImGui::NewFrame(); - ImGui::ShowTestWindow(); + //ImGui::ShowTestWindow(); } glClearColor(1, 1, 1, 1); @@ -428,13 +441,23 @@ void app_display() goatvr_draw_start(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + unsigned int gfbo = goatvr_get_fbo(); + update(dt); for(int i=0; i<2; i++) { // for each eye goatvr_draw_eye(i); - vp_width = goatvr_get_fb_eye_width(i); - vp_height = goatvr_get_fb_eye_height(i); + if(gfbo) { + vp_width = goatvr_get_fb_eye_width(i); + vp_height = goatvr_get_fb_eye_height(i); + + // this is a lightweight operation + goatvr_rtarg->create_wrap_fbo(gfbo, vp_width, vp_height); + push_render_target(goatvr_rtarg, RT_FAKE); + } else { + vp_width = win_width / 2; + } proj_matrix = goatvr_projection_matrix(i, NEAR_CLIP, FAR_CLIP); glMatrixMode(GL_PROJECTION); @@ -452,7 +475,12 @@ void app_display() if(debug_gui) { ImGui::Render(); } + + if(gfbo) { + pop_render_target(RT_FAKE); + } } + goatvr_draw_done(); vp_width = win_width; @@ -671,6 +699,13 @@ void app_keyboard(int key, bool pressed) case KEY_RIGHT: exui_change_tab(1); break; + + case KEY_F5: + case KEY_F6: + case KEY_F7: + case KEY_F8: + dbg_key_pending |= 1 << (key - KEY_F5); + break; } }