blob: f1410d7b97652e7fc0f98d55cb018aaf4d7dd977 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "garnet/lib/ui/gfx/resources/stereo_camera.h"
namespace scenic_impl {
namespace gfx {
const ResourceTypeInfo StereoCamera::kTypeInfo = {
ResourceType::kCamera | ResourceType::kStereoCamera, "StereoCamera"};
StereoCamera::StereoCamera(Session* session, ResourceId id, ScenePtr scene)
: Camera(session, id, scene, StereoCamera::kTypeInfo) {
viewports_[Eye::LEFT] = {0.f, 0.f, 0.5f, 1.f};
viewports_[Eye::RIGHT] = {0.5f, 0.f, 0.5f, 1.f};
}
void StereoCamera::SetStereoProjection(const glm::mat4 left_projection,
const glm::mat4 right_projection) {
projection_[Eye::LEFT] = left_projection;
projection_[Eye::RIGHT] = right_projection;
}
escher::Camera StereoCamera::GetEscherCamera(Eye eye) const {
escher::Camera camera(glm::lookAt(eye_position(), eye_look_at(), eye_up()),
projection_[eye]);
camera.SetViewport(viewports_[eye]);
if (pose_buffer_) {
escher::hmd::PoseBuffer escher_pose_buffer(pose_buffer_->escher_buffer(),
num_entries_, base_time_,
time_interval_);
camera.SetPoseBuffer(escher_pose_buffer);
}
return camera;
}
} // namespace gfx
} // namespace scenic_impl