blob: dccbf9536b64e105fcdc09b03c807bfa582b7810 [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_VR_UI_RENDERER_H_
#define CHROME_BROWSER_VR_UI_RENDERER_H_
#include <vector>
#include "base/memory/raw_ptr.h"
#include "chrome/browser/vr/vr_ui_export.h"
namespace vr {
class UiElement;
class UiScene;
class UiElement;
class UiElementRenderer;
struct CameraModel;
struct RenderInfo;
// Renders a UI scene.
class VR_UI_EXPORT UiRenderer {
public:
UiRenderer(UiScene* scene, UiElementRenderer* ui_element_renderer);
~UiRenderer();
void Draw(const RenderInfo& render_info);
// This is exposed separately because we do a separate pass to render this
// content into an optimized viewport.
void DrawWebVrOverlayForeground(const RenderInfo& render_info);
static std::vector<const UiElement*> GetElementsInDrawOrder(
const std::vector<const UiElement*>& elements);
private:
void DrawUiView(const RenderInfo& render_info,
const std::vector<const UiElement*>& elements);
void DrawElements(const CameraModel& camera_model,
const std::vector<const UiElement*>& elements,
const RenderInfo& render_info);
void DrawElement(const CameraModel& camera_model, const UiElement& element);
raw_ptr<UiScene> scene_ = nullptr;
raw_ptr<UiElementRenderer> ui_element_renderer_ = nullptr;
};
} // namespace vr
#endif // CHROME_BROWSER_VR_UI_RENDERER_H_