1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "mozilla/dom/XRRenderState.h"
8 #include "VRLayerChild.h"
9 #include "nsIObserverService.h"
10 #include "nsISupportsPrimitives.h"
12 namespace mozilla::dom
{
14 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(XRRenderState
, mParent
, mSession
,
15 mBaseLayer
, mOutputCanvas
)
17 XRRenderState::XRRenderState(nsISupports
* aParent
, XRSession
* aSession
)
22 mCompositionDisabled(false) {
23 if (!mSession
->IsImmersive()) {
24 mInlineVerticalFieldOfView
.SetValue(M_PI
* 0.5f
);
28 XRRenderState::XRRenderState(const XRRenderState
& aOther
)
29 : mParent(aOther
.mParent
),
30 mSession(aOther
.mSession
),
31 mBaseLayer(aOther
.mBaseLayer
),
32 mDepthNear(aOther
.mDepthNear
),
33 mDepthFar(aOther
.mDepthFar
),
34 mInlineVerticalFieldOfView(aOther
.mInlineVerticalFieldOfView
),
35 mOutputCanvas(aOther
.mOutputCanvas
),
36 mCompositionDisabled(aOther
.mCompositionDisabled
) {}
38 JSObject
* XRRenderState::WrapObject(JSContext
* aCx
,
39 JS::Handle
<JSObject
*> aGivenProto
) {
40 return XRRenderState_Binding::Wrap(aCx
, this, aGivenProto
);
43 double XRRenderState::DepthNear() { return mDepthNear
; }
45 double XRRenderState::DepthFar() { return mDepthFar
; }
47 Nullable
<double> XRRenderState::GetInlineVerticalFieldOfView() {
48 return mInlineVerticalFieldOfView
;
51 void XRRenderState::SetDepthNear(double aDepthNear
) { mDepthNear
= aDepthNear
; }
53 void XRRenderState::SetDepthFar(double aDepthFar
) { mDepthFar
= aDepthFar
; }
55 void XRRenderState::SetInlineVerticalFieldOfView(
56 double aInlineVerticalFieldOfView
) {
57 mInlineVerticalFieldOfView
.SetValue(aInlineVerticalFieldOfView
);
60 XRWebGLLayer
* XRRenderState::GetBaseLayer() { return mBaseLayer
; }
62 void XRRenderState::SetBaseLayer(XRWebGLLayer
* aBaseLayer
) {
63 mBaseLayer
= aBaseLayer
;
66 void XRRenderState::SetOutputCanvas(HTMLCanvasElement
* aCanvas
) {
67 mOutputCanvas
= aCanvas
;
70 HTMLCanvasElement
* XRRenderState::GetOutputCanvas() const {
74 void XRRenderState::SetCompositionDisabled(bool aCompositionDisabled
) {
75 mCompositionDisabled
= aCompositionDisabled
;
78 bool XRRenderState::IsCompositionDisabled() const {
79 return mCompositionDisabled
;
82 void XRRenderState::SessionEnded() {
84 mBaseLayer
->SessionEnded();
87 mOutputCanvas
= nullptr;
90 } // namespace mozilla::dom