nuclear@4: #include nuclear@4: #include nuclear@4: #include "vr.h" nuclear@4: #include "vr_impl.h" nuclear@4: nuclear@4: nuclear@4: static struct vr_module *vrm; nuclear@4: static float idmat[] = { nuclear@4: 1, 0, 0, 0, nuclear@4: 0, 1, 0, 0, nuclear@4: 0, 0, 1, 0, nuclear@4: 0, 0, 0, 1 nuclear@4: }; nuclear@4: static float fbtex_rect[] = { nuclear@4: 0, 0, 1, 1 nuclear@4: }; nuclear@4: nuclear@4: int vr_init(void) nuclear@4: { nuclear@4: int i, nmodules; nuclear@4: nuclear@4: if(vrm) { nuclear@4: vr_shutdown(); nuclear@4: } nuclear@4: nuclear@4: vr_init_modules(); nuclear@4: nuclear@4: nmodules = vr_get_num_modules(); nuclear@4: for(i=0; iinit() != -1) { nuclear@4: /* add to the active modules array */ nuclear@4: vr_activate_module(i); nuclear@4: if(!vrm) { nuclear@4: vr_use_module(0); nuclear@4: } nuclear@4: } nuclear@4: } nuclear@4: nuclear@4: if(!vrm) { nuclear@4: return -1; nuclear@4: } nuclear@4: return 0; nuclear@4: } nuclear@4: nuclear@4: void vr_shutdown(void) nuclear@4: { nuclear@4: vr_clear_modules(); nuclear@4: vrm = 0; nuclear@4: fbtex_rect[0] = fbtex_rect[1] = 0; nuclear@4: fbtex_rect[2] = fbtex_rect[3] = 1; nuclear@4: } nuclear@4: nuclear@4: int vr_module_count(void) nuclear@4: { nuclear@4: return vr_get_num_active_modules(); nuclear@4: } nuclear@4: nuclear@4: const char *vr_module_name(int idx) nuclear@4: { nuclear@4: struct vr_module *m = vr_get_active_module(idx); nuclear@4: if(!m) { nuclear@4: return 0; nuclear@4: } nuclear@4: return m->name; nuclear@4: } nuclear@4: nuclear@4: int vr_use_module(int idx) nuclear@4: { nuclear@4: if(idx >= 0 && idx < vr_get_num_active_modules()) { nuclear@4: vrm = vr_get_active_module(idx); nuclear@4: printf("using vr module: %s\n", vrm->name); nuclear@4: return 0; nuclear@4: } nuclear@4: return -1; nuclear@4: } nuclear@4: nuclear@4: int vr_use_module_named(const char *name) nuclear@4: { nuclear@4: int i, count = vr_get_num_active_modules(); nuclear@4: nuclear@4: for(i=0; iname, name) == 0) { nuclear@4: return vr_use_module(i); nuclear@4: } nuclear@4: } nuclear@4: return -1; nuclear@4: } nuclear@4: nuclear@4: int vr_view_matrix(int eye, float *mat) nuclear@4: { nuclear@4: if(vrm && vrm->view_matrix) { nuclear@4: vrm->view_matrix(eye, mat); nuclear@4: return 1; nuclear@4: } nuclear@4: memcpy(mat, idmat, sizeof idmat); nuclear@4: return 0; nuclear@4: } nuclear@4: nuclear@4: int vr_proj_matrix(int eye, float *mat) nuclear@4: { nuclear@4: if(vrm && vrm->proj_matrix) { nuclear@4: vrm->proj_matrix(eye, mat); nuclear@4: return 1; nuclear@4: } nuclear@4: memcpy(mat, idmat, sizeof idmat); nuclear@4: return 0; nuclear@4: } nuclear@4: nuclear@4: void vr_present(unsigned int fbtex) nuclear@4: { nuclear@4: if(vrm && vrm->draw) { nuclear@4: vrm->draw(fbtex, fbtex_rect[0], fbtex_rect[2], fbtex_rect[1], fbtex_rect[3]); nuclear@4: } nuclear@4: } nuclear@4: nuclear@4: void vr_fbrect(float u, float umax, float v, float vmax) nuclear@4: { nuclear@4: fbtex_rect[0] = u; nuclear@4: fbtex_rect[1] = v; nuclear@4: fbtex_rect[2] = umax; nuclear@4: fbtex_rect[3] = vmax; nuclear@4: }