int32_t OVR_Enable(void) { int i; eyeScaleOffset_t camera; if (!glConfig.arb_texture_float) return 0; if (hmd && !(hmd->HmdCaps & ovrHmdCap_ExtendDesktop)) { #ifdef WIN32 ovrHmd_AttachToWindow(hmd,mainWindowInfo.info.win.window,NULL,NULL); #endif } for (i = 0; i < 2; i++) { if (renderInfo[i].eyeFBO.valid) R_DelFBO(&renderInfo[i].eyeFBO); if (offscreen[i].valid) R_DelFBO(&offscreen[i]); } camera.x.offset = 0.0; camera.x.scale = 1.0 / tanf(hmd->CameraFrustumHFovInRadians * 0.5); camera.y.offset = 0.0; camera.y.scale = 1.0 / tanf(hmd->CameraFrustumVFovInRadians * 0.5); R_MakePerspectiveFromScale(camera,hmd->CameraFrustumNearZInMeters, hmd->CameraFrustumFarZInMeters, cameraFrustum); R_CreateIVBO(&renderInfo[0].eye,GL_STATIC_DRAW); R_CreateIVBO(&renderInfo[1].eye,GL_STATIC_DRAW); //VR_FrameStart(1); VR_OVR_InitShader(&ovr_distortion_shaders[0],&ovr_shader_norm); VR_OVR_InitShader(&ovr_distortion_shaders[1],&ovr_shader_chrm); VR_OVR_InitShader(&ovr_timewarp_shaders[0],&ovr_shader_warp); VR_OVR_InitShader(&ovr_timewarp_shaders[1],&ovr_shader_chrm_warp); //OVR_FrameStart(true); Cvar_ForceSet("vr_hmdstring",(char *)hmd->ProductName); return true; }
void OVR_Disable(void) { int i; R_DelShaderProgram(&ovr_shader_norm); R_DelShaderProgram(&ovr_shader_chrm); R_DelShaderProgram(&ovr_shader_warp); R_DelShaderProgram(&ovr_shader_chrm_warp); for (i = 0; i < 2; i++) { if (renderInfo[i].eyeFBO.valid) R_DelFBO(&renderInfo[i].eyeFBO); if (offscreen[i].valid) R_DelFBO(&offscreen[i]); R_DelIVBO(&renderInfo[i].eye); } }
// disables renderer support for the Rift void R_VR_Disable() { R_DelIVBO(&hudVBO); R_BindFBO(&screenFBO); vrState.pixelScale = 1.0; if (hmd && hmd->disable) hmd->disable(); if (hud.valid) R_DelFBO(&hud); R_DelShaderProgram(&vr_shader_distort_norm); R_DelShaderProgram(&vr_shader_distort_chrm); }
// enables renderer support for the Rift void R_VR_Enable() { qboolean success = false; screen.width = 0; screen.height = 0; leftStale = 1; rightStale = 1; hudStale = 1; if (glConfig.ext_framebuffer_object && glConfig.ext_packed_depth_stencil) { Com_Printf("VR: Initializing renderer:"); // TODO: conditional this shit up if (hud.valid) R_DelFBO(&hud); hmd = &available_hmds[(int32_t) vr_enabled->value]; success = R_GenFBO(640,480,1,GL_RGBA8,&hud); success = success && hmd->enable && hmd->enable(); // shader init R_VR_InitDistortionShader(&vr_distort_shaders[0], &vr_shader_distort_norm); R_VR_InitDistortionShader(&vr_distort_shaders[1], &vr_shader_distort_chrm); if (!success) { Com_Printf(" failed!\n"); Cmd_ExecuteString("vr_disable"); } else { char string[6]; Com_Printf(" ok!\n"); hmd->getState(&vrState); //strncpy(string, va("%.2f", vrState.ipd * 1000), sizeof(string)); vr_ipd = Cvar_Get("vr_ipd", string, CVAR_ARCHIVE); if (vr_ipd->value < 0) Cvar_SetToDefault("vr_ipd"); } R_CreateIVBO(&hudVBO, GL_STATIC_DRAW); R_VR_GenerateHud(); } else { Com_Printf("VR: Cannot initialize renderer due to missing OpenGL extensions\n"); if (vr_enabled->value) { Cmd_ExecuteString("vr_disable"); } } R_VR_StartFrame(); }