910e62b5创建于 1月15日历史提交
// 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_