vrheights

annotate src/game.cc @ 1:d06e4e24f922

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 24 Sep 2014 11:34:07 +0300
parents ccbd444939a1
children b49461618f61
rev   line source
nuclear@0 1 #include <stdio.h>
nuclear@1 2 #include <assert.h>
nuclear@1 3 #include <algorithm>
nuclear@0 4 #include "opengl.h"
nuclear@0 5 #include "game.h"
nuclear@0 6 #include "goatvr.h"
nuclear@0 7
nuclear@1 8 static void create_rtarg(int x, int y);
nuclear@1 9 static int next_pow2(int x);
nuclear@1 10
nuclear@1 11 static int win_width, win_height;
nuclear@1 12 static unsigned int fb_tex;
nuclear@1 13 static unsigned int fbo, fb_depth;
nuclear@1 14 static int fb_xsz, fb_ysz;
nuclear@1 15 static int fb_tex_xsz, fb_tex_ysz;
nuclear@1 16
nuclear@0 17 bool game_init()
nuclear@0 18 {
nuclear@0 19 init_opengl();
nuclear@0 20
nuclear@0 21 if(vr_init() == -1) {
nuclear@0 22 return false;
nuclear@0 23 }
nuclear@0 24
nuclear@0 25 glEnable(GL_DEPTH_TEST);
nuclear@0 26 glEnable(GL_CULL_FACE);
nuclear@1 27
nuclear@1 28 int sdk_fb_xsz = vr_getf(VR_LEYE_XRES) + vr_getf(VR_REYE_XRES);
nuclear@1 29 int sdk_fb_ysz = std::max(vr_getf(VR_LEYE_YRES), vr_getf(VR_REYE_YRES));
nuclear@1 30 create_rtarg(sdk_fb_xsz, sdk_fb_ysz);
nuclear@1 31
nuclear@1 32 return true;
nuclear@0 33 }
nuclear@0 34
nuclear@0 35 void game_cleanup()
nuclear@0 36 {
nuclear@0 37 vr_shutdown();
nuclear@0 38 }
nuclear@0 39
nuclear@1 40 void game_update(long tm)
nuclear@1 41 {
nuclear@1 42 }
nuclear@1 43
nuclear@1 44 void game_display()
nuclear@1 45 {
nuclear@1 46 }
nuclear@1 47
nuclear@1 48 void game_reshape(int x, int y)
nuclear@1 49 {
nuclear@1 50 }
nuclear@1 51
nuclear@0 52 void game_keyboard(int key, bool pressed);
nuclear@0 53 void game_mouse_button(int bn, bool state, int x, int y);
nuclear@0 54 void game_mouse_motion(int x, int y);
nuclear@0 55
nuclear@1 56
nuclear@1 57 static void create_rtarg(int x, int y)
nuclear@1 58 {
nuclear@1 59 if(x == fb_xsz && y == fb_ysz) {
nuclear@1 60 return; // nothing changed
nuclear@1 61 }
nuclear@1 62
nuclear@1 63 fb_xsz = x;
nuclear@1 64 fb_ysz = y;
nuclear@1 65 fb_tex_xsz = next_pow2(fb_xsz);
nuclear@1 66 fb_tex_ysz = next_pow2(fb_ysz);
nuclear@1 67
nuclear@1 68 if(!fbo) {
nuclear@1 69 glGenFramebuffers(1, &fbo);
nuclear@1 70
nuclear@1 71 glGenTextures(1, &fb_tex);
nuclear@1 72 glBindTexture(GL_TEXTURE_2D, fb_tex);
nuclear@1 73 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
nuclear@1 74 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
nuclear@1 75
nuclear@1 76 glGenRenderbuffers(1, &fb_depth);
nuclear@1 77 }
nuclear@1 78
nuclear@1 79 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
nuclear@1 80
nuclear@1 81 glBindTexture(GL_TEXTURE_2D, fb_tex);
nuclear@1 82 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, fb_tex_xsz, fb_tex_ysz, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
nuclear@1 83 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fb_tex, 0);
nuclear@1 84
nuclear@1 85 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, fb_tex_xsz, fb_tex_ysz);
nuclear@1 86 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, fb_depth);
nuclear@1 87
nuclear@1 88 assert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
nuclear@1 89 glBindFramebuffer(GL_FRAMEBUFFER, 0);
nuclear@1 90 }
nuclear@1 91
nuclear@1 92 static int next_pow2(int x)
nuclear@1 93 {
nuclear@1 94 x -= 1;
nuclear@1 95 x |= x >> 1;
nuclear@1 96 x |= x >> 2;
nuclear@1 97 x |= x >> 4;
nuclear@1 98 x |= x >> 8;
nuclear@1 99 x |= x >> 16;
nuclear@1 100 return x + 1;
nuclear@1 101 }