X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Foculusriftdevice.cpp;fp=source%2Foculusriftdevice.cpp;h=f0cccc75828d0a3035db34c0813c19dbae310ff8;hb=b7f83509d995b5037e27eb7c94811d43c4d51e1b;hp=0000000000000000000000000000000000000000;hpb=8e2e8257d569fd9a626bdb2a4a0e8767f3b3be12;p=libs%2Fvr.git diff --git a/source/oculusriftdevice.cpp b/source/oculusriftdevice.cpp new file mode 100644 index 0000000..f0cccc7 --- /dev/null +++ b/source/oculusriftdevice.cpp @@ -0,0 +1,51 @@ +#include "oculusriftdevice.h" +#include "oculusriftdevice_private.h" + +using namespace std; + +namespace Msp { +namespace VR { + +OculusRiftDevice::OculusRiftDevice(): + priv(new Private) +{ + static OVR::System system(OVR::Log::ConfigureDefaultLog(OVR::LogMask_Debug)); + + priv->ovr_manager = OVR::DeviceManager::Create(); + priv->ovr_hmd = priv->ovr_manager->EnumerateDevices().CreateDevice(); + if(!priv->ovr_hmd) + { + delete priv; + throw runtime_error("rift hmd not found"); + } +} + +OculusRiftDevice::~OculusRiftDevice() +{ + delete priv; +} + +OculusRiftCamera *OculusRiftDevice::create_camera(const GL::Camera &bc) const +{ + return new OculusRiftCamera(*this, bc); +} + +OculusRiftCombiner *OculusRiftDevice::create_combiner() const +{ + OculusRiftCombiner *combiner = new OculusRiftCombiner; + + OVR::HMDInfo info; + if(!priv->ovr_hmd->GetDeviceInfo(&info)) + { + combiner->set_view_distance(info.EyeToScreenDistance/info.HScreenSize); + combiner->set_lens_separation(info.LensSeparationDistance/info.HScreenSize); + combiner->set_distortion(info.DistortionK[0], info.DistortionK[1], info.DistortionK[2], info.DistortionK[3]); + combiner->set_red_aberration(info.ChromaAbCorrection[0], info.ChromaAbCorrection[1]); + combiner->set_blue_aberration(info.ChromaAbCorrection[2], info.ChromaAbCorrection[3]); + } + + return combiner; +} + +} // namespace VR +} // namespace Msp