#include "opt.h"
#include "post.h"
#include "renderer.h"
+#include "rtarg.h"
#include "avatar.h"
#include "vrinput.h"
#include "exman.h"
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;
#define exslot_mouse exslot_right
static Renderer *rend;
+static RenderTarget *goatvr_rtarg;
static Ray last_pick_ray;
have_handtracking = goatvr_have_handtracking();
goatvr_recenter();
+
+ goatvr_rtarg = new RenderTarget;
}
if(fb_srgb) {
}
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");
}
if(!rend->init()) {
return false;
}
+ if(opt.reflect) {
+ rend->ropt |= RENDER_MIRRORS;
+ } else {
+ rend->ropt &= ~RENDER_MIRRORS;
+ }
rend->set_scene(mscn);
glUseProgram(0);
app_grab_mouse(false);
if(opt.vr) {
+ delete goatvr_rtarg;
goatvr_shutdown();
}
destroy_vrhands();
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;
ImGui::GetIOPtr()->DeltaTime = dt;
ImGui::NewFrame();
- ImGui::ShowTestWindow();
+ //ImGui::ShowTestWindow();
}
glClearColor(1, 1, 1, 1);
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);
if(debug_gui) {
ImGui::Render();
}
+
+ if(gfbo) {
+ pop_render_target(RT_FAKE);
+ }
}
+
goatvr_draw_done();
vp_width = win_width;
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;
}
}