namespace Msp {
namespace VR {
-OculusRiftCombiner::OculusRiftCombiner(const OculusRiftDevice &d):
+OculusRiftCombiner::OculusRiftCombiner(OculusRiftDevice &d, GL::View &v):
device(d),
+ view(v),
left_mesh((GL::VERTEX2, GL::TEXCOORD2,0, GL::TEXCOORD2,1, GL::TEXCOORD2,2, GL::TEXCOORD2,3)),
right_mesh((GL::VERTEX2, GL::TEXCOORD2,0, GL::TEXCOORD2,1, GL::TEXCOORD2,2, GL::TEXCOORD2,3)),
shprog(vs_source, fs_source)
create_distortion_mesh(right_mesh, hmd, ovrEye_Right, right_fov);
ovrSizei tex_size = ovrHmd_GetFovTextureSize(hmd, ovrEye_Left, left_fov, 1.0);
- width_factor = tex_size.w*1.0f/hmd->Resolution.w;
- height_factor = tex_size.h*1.0f/hmd->Resolution.h;
- float aspect = (inner+outer)/(vertical*2);
- aspect_factor = aspect*hmd->Resolution.h/hmd->Resolution.w;
+ target_width = tex_size.w;
+ target_height = tex_size.h;
+ render_aspect = (inner+outer)/(vertical*2);
left_shdata.uniform("texture", 0);
right_shdata.uniform("texture", 0);
ovrHmd_GetRenderScaleAndOffset(right_fov, tex_size, view_rect, uv_scale_offset);
right_shdata.uniform("uv_scale", uv_scale_offset[0].x, -uv_scale_offset[0].y);
right_shdata.uniform("uv_offset", uv_scale_offset[1].x, 1-uv_scale_offset[1].y);
+
+ device.configure_window(view.get_window());
+}
+
+void OculusRiftCombiner::prepare() const
+{
+ device.begin_frame();
}
void OculusRiftCombiner::render(const GL::Texture2D &left, const GL::Texture2D &right) const
right.bind();
right_shdata.apply();
right_mesh.draw();
+
+ view.get_context().swap_buffers();
+ device.end_frame();
}
} // namespace VR