blob: 95d7439dfa1137a00667553848ce83182f325c87 [file] [log] [blame]
// Copyright 2018 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 CHROME_BROWSER_VR_ELEMENTS_CONTROLLER_H_
#define CHROME_BROWSER_VR_ELEMENTS_CONTROLLER_H_
#include <vector>
#include "base/macros.h"
#include "chrome/browser/vr/elements/ui_element.h"
#include "chrome/browser/vr/renderers/base_renderer.h"
namespace vr {
// This represents a procedurally generated Daydream controller.
class Controller : public UiElement {
public:
Controller();
~Controller() override;
void set_local_transform(const gfx::Transform& transform) {
if (transform != local_transform_) {
set_world_space_transform_dirty();
local_transform_ = transform;
}
}
class Renderer : public BaseRenderer {
public:
Renderer();
~Renderer() override;
void Draw(float opacity, const gfx::Transform& view_proj_matrix);
private:
GLuint model_view_proj_matrix_handle_ = 0;
GLuint color_handle_ = 0;
GLuint opacity_handle_ = 0;
std::vector<float> vertices_;
std::vector<GLushort> indices_;
std::vector<float> colors_;
GLuint vertex_buffer_ = 0;
GLuint color_buffer_ = 0;
GLuint index_buffer_ = 0;
DISALLOW_COPY_AND_ASSIGN(Renderer);
};
private:
void Render(UiElementRenderer* renderer,
const CameraModel& model) const final;
gfx::Transform LocalTransform() const override;
gfx::Transform GetTargetLocalTransform() const override;
gfx::Transform local_transform_;
DISALLOW_COPY_AND_ASSIGN(Controller);
};
} // namespace vr
#endif // CHROME_BROWSER_VR_ELEMENTS_CONTROLLER_H_