Select Git revision
cloudcomp-counter-demo-with-vpc.json
display_system.hpp 2.28 KiB
//------------------------------------------------------------------------------
// Project Phoenix
//
// Copyright (c) 2017-2018 RWTH Aachen University, Germany,
// Virtual Reality & Immersive Visualization Group.
//------------------------------------------------------------------------------
// License
//
// Licensed under the 3-Clause BSD License (the "License");
// you may not use this file except in compliance with the License.
// See the file LICENSE for the full text.
// You may obtain a copy of the License at
//
// https://opensource.org/licenses/BSD-3-Clause
//
// Unless required by applicable law or agreed to in writing, software
// 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.
//------------------------------------------------------------------------------
#ifndef LIBRARY_PHX_DISPLAY_SYSTEM_HPP_
#define LIBRARY_PHX_DISPLAY_SYSTEM_HPP_
#include <memory>
#include <vector>
#include "phx/engine.hpp"
#include "phx/export.hpp"
#include "phx/hmd.hpp"
#include "phx/system.hpp"
#include "phx/window.hpp"
#undef CreateWindow
namespace phx {
class PHOENIX_EXPORT DisplaySystem : public System {
public:
DisplaySystem(const DisplaySystem&) = delete;
DisplaySystem(DisplaySystem&&) = default;
~DisplaySystem();
DisplaySystem& operator=(const DisplaySystem&) = delete;
DisplaySystem& operator=(DisplaySystem&&) = default;
template <typename... Arguments>
Window* CreateWindow(Arguments&&... arguments);
void DestroyWindow();
Window* GetWindow();
HMD* CreateHMD();
void DestroyHMD();
HMD* GetHMD();
void Update(const FrameTimer::TimeInfo&) override;
protected:
explicit DisplaySystem(Engine* engine);
friend DisplaySystem* Engine::CreateSystem<DisplaySystem>();
std::unique_ptr<Window> window_;
std::unique_ptr<HMD> hmd_;
};
template <typename... Arguments>
Window* DisplaySystem::CreateWindow(Arguments&&... arguments) {
// Do not use make_unique due to the friendship to Window.
window_ = std::unique_ptr<Window>(new Window(arguments...));
return window_.get();
}
} // namespace phx
#endif // LIBRARY_PHX_DISPLAY_SYSTEM_HPP_