blob: ed31de3388bd346dabdc6b2aff14ca2fb5d7ac7a [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DEVICE_VR_ANDROID_GVR_DELEGATE_H
#define DEVICE_VR_ANDROID_GVR_DELEGATE_H
#include "device/vr/android/gvr/gvr_device_provider.h"
#include "device/vr/vr_export.h"
#include "device/vr/vr_service.mojom.h"
#include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr_types.h"
namespace device {
constexpr gvr::Sizei kInvalidRenderTargetSize = {0, 0};
class DEVICE_VR_EXPORT GvrDelegate {
public:
virtual void SetWebVRSecureOrigin(bool secure_origin) = 0;
virtual void SubmitWebVRFrame() = 0;
virtual void UpdateWebVRTextureBounds(int16_t frame_index,
const gvr::Rectf& left_bounds,
const gvr::Rectf& right_bounds) = 0;
virtual void OnVRVsyncProviderRequest(
mojom::VRVSyncProviderRequest request) = 0;
virtual void UpdateVSyncInterval(int64_t timebase_nanos,
double interval_seconds) = 0;
virtual bool SupportsPresentation() = 0;
virtual void ResetPose() = 0;
virtual void CreateVRDisplayInfo(
const base::Callback<void(mojom::VRDisplayInfoPtr)>& callback,
uint32_t device_id) = 0;
protected:
virtual ~GvrDelegate() {}
};
class DEVICE_VR_EXPORT GvrDelegateProvider {
public:
static void SetInstance(
const base::Callback<GvrDelegateProvider*()>& provider_callback);
static GvrDelegateProvider* GetInstance();
virtual void SetDeviceProvider(GvrDeviceProvider* device_provider) = 0;
virtual void ClearDeviceProvider() = 0;
virtual void RequestWebVRPresent(
const base::Callback<void(bool)>& callback) = 0;
virtual void ExitWebVRPresent() = 0;
virtual GvrDelegate* GetDelegate() = 0;
virtual void SetListeningForActivate(bool listening) = 0;
protected:
virtual ~GvrDelegateProvider() {}
private:
static base::Callback<GvrDelegateProvider*()> delegate_provider_;
};
} // namespace device
#endif // DEVICE_VR_ANDROID_GVR_DELEGATE_H