virtual void draw() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gl::MatrixStack & mv = gl::Stacks::modelview(); for (int i = 0; i < ovrEye_Count; ++i) { ovrEyeType eye = hmdDesc.EyeRenderOrder[i]; PerEyeArg & eyeArgs = eyes[eye]; gl::viewport(eyeArgs.viewportPosition, EYE_SIZE); gl::Stacks::with_push(mv, [&]{ mv.preMultiply(eyeArgs.modelviewOffset); drawCubeScene(); }); } }
virtual void draw() { ovrHmd_BeginFrame(hmd, frameIndex++); ovrPosef eyePoses[2]; gl::MatrixStack & mv = gl::Stacks::modelview(); for (int i = 0; i < ovrEye_Count; ++i) { ovrEyeType eye = hmd->EyeRenderOrder[i]; PerEyeArg & eyeArgs = eyes[eye]; gl::Stacks::projection().top() = eyeArgs.projection; eyePoses[eye] = ovrHmd_GetEyePose(hmd, eye); eyeArgs.frameBuffer.withFramebufferActive([&]{ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gl::Stacks::with_push(mv, [&]{ mv.preMultiply(glm::inverse(Rift::fromOvr(eyePoses[eye]))); mv.preMultiply(eyeArgs.modelviewOffset); drawCubeScene(); }); }); } ovrHmd_EndFrame(hmd, eyePoses, textures); }