int RiftAppSkeleton::ConfigureClientRendering() { if (m_Hmd == NULL) return 1; ovrSizei l_TextureSizeLeft = ovrHmd_GetFovTextureSize(m_Hmd, ovrEye_Left, m_Hmd->DefaultEyeFov[0], 1.0f); ovrSizei l_TextureSizeRight = ovrHmd_GetFovTextureSize(m_Hmd, ovrEye_Right, m_Hmd->DefaultEyeFov[1], 1.0f); ovrSizei l_TextureSize; l_TextureSize.w = l_TextureSizeLeft.w + l_TextureSizeRight.w; l_TextureSize.h = std::max(l_TextureSizeLeft.h, l_TextureSizeRight.h); // Renderbuffer init - we can use smaller subsets of it easily deallocateFBO(m_renderBuffer); allocateFBO(m_renderBuffer, l_TextureSize.w, l_TextureSize.h); l_EyeTexture[0].OGL.Header.API = ovrRenderAPI_OpenGL; l_EyeTexture[0].OGL.Header.TextureSize.w = l_TextureSize.w; l_EyeTexture[0].OGL.Header.TextureSize.h = l_TextureSize.h; l_EyeTexture[0].OGL.Header.RenderViewport.Pos.x = 0; l_EyeTexture[0].OGL.Header.RenderViewport.Pos.y = 0; l_EyeTexture[0].OGL.Header.RenderViewport.Size.w = l_TextureSize.w/2; l_EyeTexture[0].OGL.Header.RenderViewport.Size.h = l_TextureSize.h; l_EyeTexture[0].OGL.TexId = m_renderBuffer.tex; // Right eye the same, except for the x-position in the texture... l_EyeTexture[1] = l_EyeTexture[0]; l_EyeTexture[1].OGL.Header.RenderViewport.Pos.x = (l_TextureSize.w+1) / 2; m_RenderViewports[0] = l_EyeTexture[0].OGL.Header.RenderViewport; m_RenderViewports[1] = l_EyeTexture[1].OGL.Header.RenderViewport; const int distortionCaps = ovrDistortionCap_Chromatic | ovrDistortionCap_TimeWarp | ovrDistortionCap_Vignette; // Generate distortion mesh for each eye for (int eyeNum = 0; eyeNum < 2; eyeNum++) { // Allocate & generate distortion mesh vertices. ovrHmd_CreateDistortionMesh( m_Hmd, m_EyeRenderDesc[eyeNum].Eye, m_EyeRenderDesc[eyeNum].Fov, distortionCaps, &m_DistMeshes[eyeNum]); ovrHmd_GetRenderScaleAndOffset( m_EyeRenderDesc[eyeNum].Fov, l_TextureSize, m_RenderViewports[eyeNum], &m_uvScaleOffsetOut[2*eyeNum]); } return 0; }
void Pane::initGL() { m_cursorShader.initProgram("basic"); m_cursorShader.bindVAO(); _InitPointerAttributes(); glBindVertexArray(0); m_plane.initProgram("basictex"); m_plane.bindVAO(); _InitPlaneAttributes(); glBindVertexArray(0); allocateFBO(m_paneRenderBuffer, 600, 600); }
void RiftAppSkeleton::initGL() { for (std::vector<IScene*>::iterator it = m_scenes.begin(); it != m_scenes.end(); ++it) { IScene* pScene = *it; if (pScene != NULL) { pScene->initGL(); } } m_presentFbo.initProgram("presentfbo"); _initPresentFbo(); m_presentDistMeshL.initProgram("presentmesh"); m_presentDistMeshR.initProgram("presentmesh"); // Init the present mesh VAO *after* initVR, which creates the mesh // sensible initial value? allocateFBO(m_renderBuffer, 800, 600); m_fm.Init(); }