05-29-2016 06:06 PM
// Get the render target for this frame
int currentIndex = 0;
ovr_GetTextureSwapChainCurrentIndex(mOVRSession, mOVRTextureSwapChain, ¤tIndex);
GLuint currentRenderTargetTextureId;
ovr_GetTextureSwapChainBufferGL(mOVRSession, mOVRTextureSwapChain, currentIndex, ¤tRenderTargetTextureId);
// Attach current texture to framebuffer
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mFramebufferId);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, currentRenderTargetTextureId, 0);
// Clear target
glClearColor(0.5f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// Copy input texture to framebuffer
GLuint inputFramebufferId = backbuffer->GetFrameBufferHandle();
glBindFramebuffer(GL_READ_FRAMEBUFFER, inputFramebufferId);
glBlitFramebuffer(
0, 0, mBackbufferSize.w, mBackbufferSize.h,
0, 0, mBackbufferSize.w, mBackbufferSize.h,
GL_COLOR_BUFFER_BIT, GL_NEAREST);
// Submit texture to HMD
ovr_CommitTextureSwapChain(mOVRSession, mOVRTextureSwapChain);
ovrLayerHeader* layers = &mMainLayer.Header;
ovr_SubmitFrame(mOVRSession, mCurrentFrameIndex, nullptr, &layers, 1);
05-29-2016 08:04 PM
05-29-2016 08:22 PM
05-29-2016 09:53 PM
ovrEyeRenderDesc eyeRenderDesc[2];
eyeRenderDesc[0] = ovr_GetRenderDesc(mOVRSession, ovrEye_Left, hmdDesc.DefaultEyeFov[0]);
eyeRenderDesc[1] = ovr_GetRenderDesc(mOVRSession, ovrEye_Right, hmdDesc.DefaultEyeFov[1]);
mMainLayer.Header.Type = ovrLayerType_EyeFov;
mMainLayer.Header.Flags = ovrLayerFlag_TextureOriginAtBottomLeft;
mMainLayer.ColorTexture[0] = mOVRTextureSwapChain;
mMainLayer.ColorTexture[1] = NULL;
mMainLayer.Fov[0] = eyeRenderDesc[0].Fov;
mMainLayer.Fov[1] = eyeRenderDesc[1].Fov;
mMainLayer.Viewport[0].Pos.x = 0;
mMainLayer.Viewport[0].Pos.y = 0;
mMainLayer.Viewport[0].Size.w = mBackbufferSize.w / 2;
mMainLayer.Viewport[0].Size.h = mBackbufferSize.h;
mMainLayer.Viewport[1].Pos.x = mBackbufferSize.w / 2;
mMainLayer.Viewport[1].Pos.y = 0;
mMainLayer.Viewport[1].Size.w = mBackbufferSize.w / 2;
mMainLayer.Viewport[1].Size.h = mBackbufferSize.h;
I don't touch the structure again after this point.
05-29-2016 10:51 PM
05-30-2016 12:07 AM
const ovrTrackingState& ts = GetTrackingState(); // my internal function which gets this
ovr_CalcEyePoses(ts.HeadPose.ThePose, mHmdToEyeOffsets, mMainLayer.RenderPose);
05-30-2016 10:23 AM