Index: chrome/browser/android/vr_shell/vr_shell_renderer.h |
diff --git a/chrome/browser/android/vr_shell/vr_shell_renderer.h b/chrome/browser/android/vr_shell/vr_shell_renderer.h |
index 239ded7f9bb523972ed68ca7b0a6f3a89fd5fe55..b22759b77d0f0aa70c23ffed037de58d68866cb1 100644 |
--- a/chrome/browser/android/vr_shell/vr_shell_renderer.h |
+++ b/chrome/browser/android/vr_shell/vr_shell_renderer.h |
@@ -10,6 +10,7 @@ |
#include <vector> |
#include "base/macros.h" |
+#include "chrome/browser/android/vr_shell/vr_controller_model.h" |
#include "chrome/browser/android/vr_shell/vr_math.h" |
#include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/gvr_types.h" |
#include "ui/gl/gl_bindings.h" |
@@ -35,6 +36,8 @@ enum ShaderID { |
GRADIENT_QUAD_FRAGMENT_SHADER, |
GRADIENT_GRID_VERTEX_SHADER, |
GRADIENT_GRID_FRAGMENT_SHADER, |
+ CONTROLLER_VERTEX_SHADER, |
+ CONTROLLER_FRAGMENT_SHADER, |
SHADER_ID_MAX |
}; |
@@ -63,13 +66,9 @@ class BaseRenderer { |
protected: |
BaseRenderer(ShaderID vertex_id, ShaderID fragment_id); |
- void PrepareToDraw(GLuint view_proj_matrix_handle, |
- const gvr::Mat4f& view_proj_matrix); |
- |
GLuint program_handle_; |
GLuint position_handle_; |
GLuint tex_coord_handle_; |
- GLuint vertex_buffer_ = 0; |
DISALLOW_COPY_AND_ASSIGN(BaseRenderer); |
}; |
@@ -79,6 +78,14 @@ class BaseQuadRenderer : public BaseRenderer { |
BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id); |
~BaseQuadRenderer() override; |
+ static void SetVertexBuffer(); |
+ |
+ protected: |
+ void PrepareToDraw(GLuint view_proj_matrix_handle, |
+ const gvr::Mat4f& view_proj_matrix); |
+ |
+ static GLuint vertex_buffer_; |
+ |
DISALLOW_COPY_AND_ASSIGN(BaseQuadRenderer); |
}; |
@@ -158,6 +165,26 @@ class LaserRenderer : public BaseQuadRenderer { |
DISALLOW_COPY_AND_ASSIGN(LaserRenderer); |
}; |
+class ControllerRenderer : public BaseRenderer { |
+ public: |
+ ControllerRenderer(); |
+ ~ControllerRenderer() override; |
+ |
+ void SetUp(const VrControllerModel& model); |
+ void Draw(const VrControllerModel& model, |
+ VrControllerModel::State state, |
+ const gvr::Mat4f& view_proj_matrix); |
+ |
+ private: |
+ GLuint model_view_proj_matrix_handle_; |
+ GLuint tex_uniform_handle_; |
+ GLuint indices_buffer_ = 0; |
+ GLuint vertex_buffer_ = 0; |
+ std::vector<GLuint> texture_handles_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ControllerRenderer); |
+}; |
+ |
class GradientQuadRenderer : public BaseQuadRenderer { |
public: |
GradientQuadRenderer(); |
@@ -192,6 +219,7 @@ class GradientGridRenderer : public BaseRenderer { |
private: |
void MakeGridLines(int gridline_count); |
+ GLuint vertex_buffer_ = 0; |
GLuint model_view_proj_matrix_handle_; |
GLuint scene_radius_handle_; |
GLuint center_color_handle_; |
@@ -217,6 +245,10 @@ class VrShellRenderer { |
LaserRenderer* GetLaserRenderer() { return laser_renderer_.get(); } |
+ ControllerRenderer* GetControllerRenderer() { |
+ return controller_renderer_.get(); |
+ } |
+ |
GradientQuadRenderer* GetGradientQuadRenderer() { |
return gradient_quad_renderer_.get(); |
} |
@@ -230,6 +262,7 @@ class VrShellRenderer { |
std::unique_ptr<WebVrRenderer> webvr_renderer_; |
std::unique_ptr<ReticleRenderer> reticle_renderer_; |
std::unique_ptr<LaserRenderer> laser_renderer_; |
+ std::unique_ptr<ControllerRenderer> controller_renderer_; |
std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_; |
std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_; |