Advertisement
Guest User

Untitled

a guest
Oct 24th, 2014
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. bool HMDState::ConfigureRendering(ovrEyeRenderDesc eyeRenderDescOut[2],
  2. const ovrFovPort eyeFovIn[2],
  3. const ovrRenderAPIConfig* apiConfig,
  4. unsigned distortionCaps)
  5. {
  6. ThreadChecker::Scope checkScope(&RenderAPIThreadChecker, "ovrHmd_ConfigureRendering");
  7.  
  8. // null -> shut down.
  9. if (!apiConfig)
  10. {
  11. if (pHSWDisplay)
  12. {
  13. pHSWDisplay->Shutdown();
  14. pHSWDisplay.Clear();
  15. }
  16.  
  17. if (pRenderer)
  18. pRenderer.Clear();
  19. RenderingConfigured = false;
  20. return true;
  21. }
  22.  
  23. if (pRenderer &&
  24. (apiConfig->Header.API != pRenderer->GetRenderAPI()))
  25. {
  26. // Shutdown old renderer.
  27. if (pHSWDisplay)
  28. {
  29. pHSWDisplay->Shutdown();
  30. pHSWDisplay.Clear();
  31. }
  32.  
  33. if (pRenderer)
  34. pRenderer.Clear();
  35. }
  36.  
  37. distortionCaps = distortionCaps & pHmdDesc->DistortionCaps;
  38.  
  39. // Step 1: do basic setup configuration
  40. RenderState.EnabledHmdCaps = EnabledHmdCaps; // This is a copy... Any cleaner way?
  41. RenderState.DistortionCaps = distortionCaps;
  42. RenderState.EyeRenderDesc[0] = RenderState.CalcRenderDesc(ovrEye_Left, eyeFovIn[0]);
  43. RenderState.EyeRenderDesc[1] = RenderState.CalcRenderDesc(ovrEye_Right, eyeFovIn[1]);
  44. eyeRenderDescOut[0] = RenderState.EyeRenderDesc[0];
  45. eyeRenderDescOut[1] = RenderState.EyeRenderDesc[1];
  46.  
  47. TimeManager.ResetFrameTiming(0,
  48. (EnabledHmdCaps & ovrHmdCap_DynamicPrediction) ? true : false,
  49. true);
  50.  
  51. LastFrameTimeSeconds = 0.0f;
  52.  
  53. // Set RenderingConfigured early to avoid ASSERTs in renderer initialization.
  54. RenderingConfigured = true;
  55.  
  56. if (!pRenderer)
  57. {
  58. pRenderer = *DistortionRenderer::APICreateRegistry
  59. [apiConfig->Header.API](pHmdDesc, TimeManager, RenderState);
  60. }
  61.  
  62. if (!pRenderer ||
  63. !pRenderer->Initialize(apiConfig))
  64. {
  65. RenderingConfigured = false;
  66. return false;
  67. }
  68.  
  69. // Setup the Health and Safety Warning display system.
  70. if(pHSWDisplay && (pHSWDisplay->GetRenderAPIType() != apiConfig->Header.API)) // If we need to reconstruct the HSWDisplay for a different graphics API type, delete the existing display.
  71. {
  72. pHSWDisplay->Shutdown();
  73. pHSWDisplay.Clear();
  74. }
  75.  
  76. if(!pHSWDisplay) // Use * below because that for of operator= causes it to inherit the refcount the factory gave the object.
  77. {
  78. pHSWDisplay = *OVR::CAPI::HSWDisplay::Factory(apiConfig->Header.API, pHmdDesc, RenderState);
  79. pHSWDisplay->Enable(pProfile->GetBoolValue("HSW", true));
  80. }
  81.  
  82. if (pHSWDisplay)
  83. pHSWDisplay->Initialize(apiConfig); // This is potentially re-initializing it with a new config.
  84.  
  85. return true;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement