5 #include "gmath/gmath.h"
12 int win_width, win_height;
17 static bool should_swap;
19 static float cam_theta, cam_phi;
20 static float cam_height = 1.65;
21 static Mesh *mesh_torus;
23 static bool bnstate[16];
24 static int prev_x, prev_y;
26 bool app_init(int argc, char **argv)
28 if(!init_options(argc, argv, 0)) {
31 if(init_opengl() == -1) {
35 glEnable(GL_MULTISAMPLE);
38 glGetIntegerv(GL_SAMPLES, &aasamples);
39 printf("got %d samples per pixel\n", aasamples);
41 printf("Max anisotropy: %d\n", glcaps.max_aniso);
43 glEnable(GL_CULL_FACE);
44 glEnable(GL_DEPTH_TEST);
45 //glEnable(GL_LIGHTING);
48 if(GLEW_ARB_framebuffer_sRGB) {
49 printf("enabling sRGB framebuffer\n");
50 glEnable(GL_FRAMEBUFFER_SRGB);
54 if(goatvr_init() == -1) {
57 goatvr_set_origin_mode(GOATVR_HEAD);
60 should_swap = goatvr_should_swap() != 0;
61 cam_height = goatvr_get_eye_height();
64 Mesh::use_custom_sdr_attr = false;
66 mesh_torus = new Mesh;
67 gen_torus(mesh_torus, 1.0, 0.25, 32, 32);
69 if(!init_backdrop()) {
90 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
92 for(int i=0; i<2; i++) {
95 glMatrixMode(GL_PROJECTION);
96 glLoadMatrixf(goatvr_projection_matrix(i, 0.5, 1000.0));
98 view_matrix = goatvr_view_matrix(i);
99 view_matrix.pre_rotate_x(deg_to_rad(cam_phi));
100 view_matrix.pre_rotate_y(deg_to_rad(cam_theta));
101 view_matrix.pre_translate(0, -cam_height, 0);
103 glMatrixMode(GL_MODELVIEW);
104 glLoadMatrixf(view_matrix[0]);
113 app_redraw(); // in VR mode, force continuous redraw
116 // regular monoscopic mode
117 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
119 view_matrix = Mat4::identity;
120 view_matrix.pre_rotate_x(deg_to_rad(cam_phi));
121 view_matrix.pre_rotate_y(deg_to_rad(cam_theta));
122 view_matrix.pre_translate(0, -cam_height, 0);
124 glMatrixMode(GL_MODELVIEW);
125 glLoadMatrixf(view_matrix[0]);
131 assert(glGetError() == GL_NO_ERROR);
134 void app_reshape(int x, int y)
136 glViewport(0, 0, x, y);
139 mat.perspective(deg_to_rad(50), win_aspect, 0.5, 500.0);
141 glMatrixMode(GL_PROJECTION);
142 glLoadMatrixf(mat[0]);
145 void app_keyboard(int key, bool pressed)
162 void app_mouse_button(int bn, bool pressed, int x, int y)
164 bnstate[bn] = pressed;
169 void app_mouse_motion(int x, int y)
176 if(!dx && !dy) return;
179 cam_theta += dx * 0.5;
181 if(!opt.vr || !goatvr_have_headtracking()) {
184 if(cam_phi < -90) cam_phi = -90;
185 if(cam_phi > 90) cam_phi = 90;