mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-26 19:55:39 +00:00
20e3431c17
- The Cardboard VR support has hardcoded values and uses low-performance orientation APIs and rendering paths. - There is little benefit to this Cardboard VR implementation over using polyfills. - A future implementation would be based on Google VR support in Android N and/or Samsung Gear VR Oculus Mobile APIs. MozReview-Commit-ID: 7e9Th8ZTmj8
57 lines
1.4 KiB
C++
57 lines
1.4 KiB
C++
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include <math.h>
|
|
|
|
#include "gfxVR.h"
|
|
|
|
#ifndef M_PI
|
|
# define M_PI 3.14159265358979323846
|
|
#endif
|
|
|
|
using namespace mozilla;
|
|
using namespace mozilla::gfx;
|
|
|
|
Atomic<uint32_t> VRDisplayManager::sDisplayBase(0);
|
|
|
|
/* static */ uint32_t
|
|
VRDisplayManager::AllocateDisplayID()
|
|
{
|
|
return ++sDisplayBase;
|
|
}
|
|
|
|
Matrix4x4
|
|
VRFieldOfView::ConstructProjectionMatrix(float zNear, float zFar, bool rightHanded)
|
|
{
|
|
float upTan = tan(upDegrees * M_PI / 180.0);
|
|
float downTan = tan(downDegrees * M_PI / 180.0);
|
|
float leftTan = tan(leftDegrees * M_PI / 180.0);
|
|
float rightTan = tan(rightDegrees * M_PI / 180.0);
|
|
|
|
float handednessScale = rightHanded ? -1.0 : 1.0;
|
|
|
|
float pxscale = 2.0f / (leftTan + rightTan);
|
|
float pxoffset = (leftTan - rightTan) * pxscale * 0.5;
|
|
float pyscale = 2.0f / (upTan + downTan);
|
|
float pyoffset = (upTan - downTan) * pyscale * 0.5;
|
|
|
|
Matrix4x4 mobj;
|
|
float *m = &mobj._11;
|
|
|
|
m[0*4+0] = pxscale;
|
|
m[2*4+0] = pxoffset * handednessScale;
|
|
|
|
m[1*4+1] = pyscale;
|
|
m[2*4+1] = -pyoffset * handednessScale;
|
|
|
|
m[2*4+2] = zFar / (zNear - zFar) * -handednessScale;
|
|
m[3*4+2] = (zFar * zNear) / (zNear - zFar);
|
|
|
|
m[2*4+3] = handednessScale;
|
|
m[3*4+3] = 0.0f;
|
|
|
|
return mobj;
|
|
}
|