#pragma once #include "matrix.h" class DFrameBuffer; enum { VR_MONO = 0, VR_GREENMAGENTA = 1, VR_REDCYAN = 2, VR_SIDEBYSIDEFULL = 3, VR_SIDEBYSIDESQUISHED = 4, VR_LEFTEYEVIEW = 5, VR_RIGHTEYEVIEW = 6, VR_QUADSTEREO = 7, VR_SIDEBYSIDELETTERBOX = 8, VR_AMBERBLUE = 9, VR_TOPBOTTOM = 11, VR_ROWINTERLEAVED = 12, VR_COLUMNINTERLEAVED = 13, VR_CHECKERINTERLEAVED = 14 }; struct VREyeInfo { float mShiftFactor; float mScaleFactor; VSMatrix GetProjection(float fov, float aspectRatio, float fovRatio) const; DVector3 GetViewShift(float yaw) const; private: float getShift() const; }; struct VRMode { int mEyeCount; float mHorizontalViewportScale; float mVerticalViewportScale; float mWeaponProjectionScale; VREyeInfo mEyes[2]; static const VRMode *GetVRMode(bool toscreen = true); void AdjustViewport(DFrameBuffer *fb) const; VSMatrix GetHUDSpriteProjection() const; };