mirror of
https://github.com/mii443/rust-openvr.git
synced 2025-08-23 16:49:31 +00:00
added linux makefile
This commit is contained in:
143
modules/oculus_sdk_linux/LibOVR/Src/CAPI/CAPI_HMDRenderState.cpp
Normal file
143
modules/oculus_sdk_linux/LibOVR/Src/CAPI/CAPI_HMDRenderState.cpp
Normal file
@ -0,0 +1,143 @@
|
||||
/************************************************************************************
|
||||
|
||||
Filename : OVR_CAPI_HMDRenderState.cpp
|
||||
Content : Combines all of the rendering state associated with the HMD
|
||||
Created : February 2, 2014
|
||||
Authors : Michael Antonov
|
||||
|
||||
Copyright : Copyright 2014 Oculus VR, Inc. All Rights reserved.
|
||||
|
||||
Licensed under the Oculus VR Rift SDK License Version 3.1 (the "License");
|
||||
you may not use the Oculus VR Rift SDK except in compliance with the License,
|
||||
which is provided at the time of installation or download, or which
|
||||
otherwise accompanies this software in either electronic or hard copy form.
|
||||
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.oculusvr.com/licenses/LICENSE-3.1
|
||||
|
||||
Unless required by applicable law or agreed to in writing, the Oculus VR SDK
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
************************************************************************************/
|
||||
|
||||
#include "CAPI_HMDRenderState.h"
|
||||
|
||||
namespace OVR { namespace CAPI {
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ***** HMDRenderState
|
||||
|
||||
|
||||
HMDRenderState::HMDRenderState(ovrHmd hmd, Profile* userProfile, const OVR::HMDInfo& hmdInfo)
|
||||
: HMD(hmd), HMDInfo(hmdInfo)
|
||||
{
|
||||
RenderInfo = GenerateHmdRenderInfoFromHmdInfo( HMDInfo, userProfile );
|
||||
|
||||
Distortion[0] = CalculateDistortionRenderDesc(StereoEye_Left, RenderInfo, 0);
|
||||
Distortion[1] = CalculateDistortionRenderDesc(StereoEye_Right, RenderInfo, 0);
|
||||
|
||||
ClearColor[0] = ClearColor[1] = ClearColor[2] = ClearColor[3] =0.0f;
|
||||
|
||||
EnabledHmdCaps = 0;
|
||||
}
|
||||
|
||||
HMDRenderState::~HMDRenderState()
|
||||
{
|
||||
}
|
||||
|
||||
ovrHmdDesc HMDRenderState::GetDesc()
|
||||
{
|
||||
ovrHmdDesc d;
|
||||
memset(&d, 0, sizeof(d));
|
||||
|
||||
d.Type = ovrHmd_Other;
|
||||
|
||||
d.ProductName = HMDInfo.ProductName;
|
||||
d.Manufacturer = HMDInfo.Manufacturer;
|
||||
d.Resolution.w = HMDInfo.ResolutionInPixels.w;
|
||||
d.Resolution.h = HMDInfo.ResolutionInPixels.h;
|
||||
d.WindowsPos.x = HMDInfo.DesktopX;
|
||||
d.WindowsPos.y = HMDInfo.DesktopY;
|
||||
d.DisplayDeviceName = HMDInfo.DisplayDeviceName;
|
||||
d.DisplayId = HMDInfo.DisplayId;
|
||||
|
||||
d.HmdCaps = ovrHmdCap_Present | ovrHmdCap_NoVSync;
|
||||
d.SensorCaps = ovrSensorCap_YawCorrection | ovrSensorCap_Orientation;
|
||||
d.DistortionCaps = ovrDistortionCap_Chromatic | ovrDistortionCap_TimeWarp | ovrDistortionCap_Vignette;
|
||||
|
||||
if (strstr(HMDInfo.ProductName, "DK1"))
|
||||
{
|
||||
d.Type = ovrHmd_DK1;
|
||||
}
|
||||
else if (strstr(HMDInfo.ProductName, "DK2"))
|
||||
{
|
||||
d.Type = ovrHmd_DK2;
|
||||
d.HmdCaps |= ovrHmdCap_LowPersistence |
|
||||
ovrHmdCap_LatencyTest | ovrHmdCap_DynamicPrediction;
|
||||
d.SensorCaps |= ovrSensorCap_Position;
|
||||
}
|
||||
|
||||
DistortionRenderDesc& leftDistortion = Distortion[0];
|
||||
DistortionRenderDesc& rightDistortion = Distortion[1];
|
||||
|
||||
// The suggested FOV (assuming eye rotation)
|
||||
d.DefaultEyeFov[0] = CalculateFovFromHmdInfo(StereoEye_Left, leftDistortion, RenderInfo, OVR_DEFAULT_EXTRA_EYE_ROTATION);
|
||||
d.DefaultEyeFov[1] = CalculateFovFromHmdInfo(StereoEye_Right, rightDistortion, RenderInfo, OVR_DEFAULT_EXTRA_EYE_ROTATION);
|
||||
|
||||
// FOV extended across the entire screen
|
||||
d.MaxEyeFov[0] = GetPhysicalScreenFov(StereoEye_Left, leftDistortion);
|
||||
d.MaxEyeFov[1] = GetPhysicalScreenFov(StereoEye_Right, rightDistortion);
|
||||
|
||||
if (HMDInfo.Shutter.Type == HmdShutter_RollingRightToLeft)
|
||||
{
|
||||
d.EyeRenderOrder[0] = ovrEye_Right;
|
||||
d.EyeRenderOrder[1] = ovrEye_Left;
|
||||
}
|
||||
else
|
||||
{
|
||||
d.EyeRenderOrder[0] = ovrEye_Left;
|
||||
d.EyeRenderOrder[1] = ovrEye_Right;
|
||||
}
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
ovrSizei HMDRenderState::GetFOVTextureSize(int eye, ovrFovPort fov, float pixelsPerDisplayPixel)
|
||||
{
|
||||
OVR_ASSERT((unsigned)eye < 2);
|
||||
StereoEye seye = (eye == ovrEye_Left) ? StereoEye_Left : StereoEye_Right;
|
||||
return CalculateIdealPixelSize(seye, Distortion[eye], fov, pixelsPerDisplayPixel);
|
||||
}
|
||||
|
||||
ovrEyeRenderDesc HMDRenderState::calcRenderDesc(ovrEyeType eyeType, const ovrFovPort& fov)
|
||||
{
|
||||
HmdRenderInfo& hmdri = RenderInfo;
|
||||
StereoEye eye = (eyeType == ovrEye_Left) ? StereoEye_Left : StereoEye_Right;
|
||||
ovrEyeRenderDesc e0;
|
||||
|
||||
e0.Eye = eyeType;
|
||||
e0.Fov = fov;
|
||||
e0.ViewAdjust = CalculateEyeVirtualCameraOffset(hmdri, eye, false);
|
||||
e0.DistortedViewport = GetFramebufferViewport(eye, hmdri);
|
||||
e0.PixelsPerTanAngleAtCenter = Distortion[0].PixelsPerTanAngleAtCenter;
|
||||
|
||||
return e0;
|
||||
}
|
||||
|
||||
|
||||
void HMDRenderState::setupRenderDesc( ovrEyeRenderDesc eyeRenderDescOut[2],
|
||||
const ovrFovPort eyeFovIn[2] )
|
||||
{
|
||||
eyeRenderDescOut[0] = EyeRenderDesc[0] = calcRenderDesc(ovrEye_Left, eyeFovIn[0]);
|
||||
eyeRenderDescOut[1] = EyeRenderDesc[1] = calcRenderDesc(ovrEye_Right, eyeFovIn[1]);
|
||||
}
|
||||
|
||||
|
||||
}} // namespace OVR::CAPI
|
||||
|
Reference in New Issue
Block a user