Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ | 5 #ifndef CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ |
| 6 #define CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ | 6 #define CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <queue> | 9 #include <queue> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "chrome/browser/android/vr_shell/vr_controller_model.h" | 13 #include "chrome/browser/android/vr_shell/vr_controller_model.h" |
| 14 #include "chrome/browser/android/vr_shell/vr_math.h" | 14 #include "device/vr/vr_types.h" |
| 15 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/ gvr_types.h" | |
| 16 #include "ui/gl/gl_bindings.h" | 15 #include "ui/gl/gl_bindings.h" |
| 17 | 16 |
| 18 namespace vr_shell { | 17 namespace vr_shell { |
| 19 | 18 |
| 20 // TODO(tiborg): set background color through JS API. | 19 // TODO(tiborg): set background color through JS API. |
| 21 constexpr float kFogBrightness = 0.57f; | 20 constexpr float kFogBrightness = 0.57f; |
| 22 | 21 |
| 23 typedef unsigned int GLuint; | 22 typedef unsigned int GLuint; |
| 24 | 23 |
| 25 enum ShaderID { | 24 enum ShaderID { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 40 CONTROLLER_FRAGMENT_SHADER, | 39 CONTROLLER_FRAGMENT_SHADER, |
| 41 SHADER_ID_MAX | 40 SHADER_ID_MAX |
| 42 }; | 41 }; |
| 43 | 42 |
| 44 struct Vertex3d { | 43 struct Vertex3d { |
| 45 float x; | 44 float x; |
| 46 float y; | 45 float y; |
| 47 float z; | 46 float z; |
| 48 }; | 47 }; |
| 49 | 48 |
| 49 struct RectF { | |
|
acondor_
2017/04/11 15:00:00
why not use the gfx types here?
mthiesse
2017/04/11 19:21:06
Because we can guarantee the memory order for thes
| |
| 50 float x; | |
| 51 float y; | |
| 52 float width; | |
| 53 float height; | |
| 54 }; | |
| 55 | |
| 50 struct Line3d { | 56 struct Line3d { |
| 51 Vertex3d start; | 57 Vertex3d start; |
| 52 Vertex3d end; | 58 Vertex3d end; |
| 53 }; | 59 }; |
| 54 | 60 |
| 55 struct TexturedQuad { | 61 struct TexturedQuad { |
| 56 int texture_data_handle; | 62 int texture_data_handle; |
| 57 gvr::Mat4f view_proj_matrix; | 63 vr::Matf view_proj_matrix; |
| 58 Rectf copy_rect; | 64 RectF copy_rect; |
| 59 float opacity; | 65 float opacity; |
| 60 }; | 66 }; |
| 61 | 67 |
| 62 class BaseRenderer { | 68 class BaseRenderer { |
| 63 public: | 69 public: |
| 64 virtual ~BaseRenderer(); | 70 virtual ~BaseRenderer(); |
| 65 | 71 |
| 66 protected: | 72 protected: |
| 67 BaseRenderer(ShaderID vertex_id, ShaderID fragment_id); | 73 BaseRenderer(ShaderID vertex_id, ShaderID fragment_id); |
| 68 | 74 |
| 69 GLuint program_handle_; | 75 GLuint program_handle_; |
| 70 GLuint position_handle_; | 76 GLuint position_handle_; |
| 71 GLuint tex_coord_handle_; | 77 GLuint tex_coord_handle_; |
| 72 | 78 |
| 73 DISALLOW_COPY_AND_ASSIGN(BaseRenderer); | 79 DISALLOW_COPY_AND_ASSIGN(BaseRenderer); |
| 74 }; | 80 }; |
| 75 | 81 |
| 76 class BaseQuadRenderer : public BaseRenderer { | 82 class BaseQuadRenderer : public BaseRenderer { |
| 77 public: | 83 public: |
| 78 BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id); | 84 BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id); |
| 79 ~BaseQuadRenderer() override; | 85 ~BaseQuadRenderer() override; |
| 80 | 86 |
| 81 static void SetVertexBuffer(); | 87 static void SetVertexBuffer(); |
| 82 | 88 |
| 83 protected: | 89 protected: |
| 84 void PrepareToDraw(GLuint view_proj_matrix_handle, | 90 void PrepareToDraw(GLuint view_proj_matrix_handle, |
| 85 const gvr::Mat4f& view_proj_matrix); | 91 const vr::Matf& view_proj_matrix); |
| 86 | 92 |
| 87 static GLuint vertex_buffer_; | 93 static GLuint vertex_buffer_; |
| 88 | 94 |
| 89 DISALLOW_COPY_AND_ASSIGN(BaseQuadRenderer); | 95 DISALLOW_COPY_AND_ASSIGN(BaseQuadRenderer); |
| 90 }; | 96 }; |
| 91 | 97 |
| 92 class TexturedQuadRenderer : public BaseQuadRenderer { | 98 class TexturedQuadRenderer : public BaseQuadRenderer { |
| 93 public: | 99 public: |
| 94 TexturedQuadRenderer(); | 100 TexturedQuadRenderer(); |
| 95 ~TexturedQuadRenderer() override; | 101 ~TexturedQuadRenderer() override; |
| 96 | 102 |
| 97 // Draw the content rect in the texture quad. | 103 // Draw the content rect in the texture quad. |
| 98 void AddQuad(int texture_data_handle, | 104 void AddQuad(int texture_data_handle, |
| 99 const gvr::Mat4f& view_proj_matrix, | 105 const vr::Matf& view_proj_matrix, |
| 100 const Rectf& copy_rect, | 106 const gfx::RectF& copy_rect, |
| 101 float opacity); | 107 float opacity); |
| 102 | 108 |
| 103 void Flush(); | 109 void Flush(); |
| 104 | 110 |
| 105 private: | 111 private: |
| 106 GLuint model_view_proj_matrix_handle_; | 112 GLuint model_view_proj_matrix_handle_; |
| 107 GLuint copy_rect_uniform_handle_; | 113 GLuint copy_rect_uniform_handle_; |
| 108 GLuint tex_uniform_handle_; | 114 GLuint tex_uniform_handle_; |
| 109 GLuint opacity_handle_; | 115 GLuint opacity_handle_; |
| 110 | 116 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 125 GLuint tex_uniform_handle_; | 131 GLuint tex_uniform_handle_; |
| 126 | 132 |
| 127 DISALLOW_COPY_AND_ASSIGN(WebVrRenderer); | 133 DISALLOW_COPY_AND_ASSIGN(WebVrRenderer); |
| 128 }; | 134 }; |
| 129 | 135 |
| 130 class ReticleRenderer : public BaseQuadRenderer { | 136 class ReticleRenderer : public BaseQuadRenderer { |
| 131 public: | 137 public: |
| 132 ReticleRenderer(); | 138 ReticleRenderer(); |
| 133 ~ReticleRenderer() override; | 139 ~ReticleRenderer() override; |
| 134 | 140 |
| 135 void Draw(const gvr::Mat4f& view_proj_matrix); | 141 void Draw(const vr::Matf& view_proj_matrix); |
| 136 | 142 |
| 137 private: | 143 private: |
| 138 GLuint model_view_proj_matrix_handle_; | 144 GLuint model_view_proj_matrix_handle_; |
| 139 GLuint color_handle_; | 145 GLuint color_handle_; |
| 140 GLuint ring_diameter_handle_; | 146 GLuint ring_diameter_handle_; |
| 141 GLuint inner_hole_handle_; | 147 GLuint inner_hole_handle_; |
| 142 GLuint inner_ring_end_handle_; | 148 GLuint inner_ring_end_handle_; |
| 143 GLuint inner_ring_thickness_handle_; | 149 GLuint inner_ring_thickness_handle_; |
| 144 GLuint mid_ring_end_handle_; | 150 GLuint mid_ring_end_handle_; |
| 145 GLuint mid_ring_opacity_handle_; | 151 GLuint mid_ring_opacity_handle_; |
| 146 | 152 |
| 147 DISALLOW_COPY_AND_ASSIGN(ReticleRenderer); | 153 DISALLOW_COPY_AND_ASSIGN(ReticleRenderer); |
| 148 }; | 154 }; |
| 149 | 155 |
| 150 class LaserRenderer : public BaseQuadRenderer { | 156 class LaserRenderer : public BaseQuadRenderer { |
| 151 public: | 157 public: |
| 152 LaserRenderer(); | 158 LaserRenderer(); |
| 153 ~LaserRenderer() override; | 159 ~LaserRenderer() override; |
| 154 | 160 |
| 155 void Draw(const gvr::Mat4f& view_proj_matrix); | 161 void Draw(const vr::Matf& view_proj_matrix); |
| 156 | 162 |
| 157 private: | 163 private: |
| 158 GLuint model_view_proj_matrix_handle_; | 164 GLuint model_view_proj_matrix_handle_; |
| 159 GLuint texture_unit_handle_; | 165 GLuint texture_unit_handle_; |
| 160 GLuint texture_data_handle_; | 166 GLuint texture_data_handle_; |
| 161 GLuint color_handle_; | 167 GLuint color_handle_; |
| 162 GLuint fade_point_handle_; | 168 GLuint fade_point_handle_; |
| 163 GLuint fade_end_handle_; | 169 GLuint fade_end_handle_; |
| 164 | 170 |
| 165 DISALLOW_COPY_AND_ASSIGN(LaserRenderer); | 171 DISALLOW_COPY_AND_ASSIGN(LaserRenderer); |
| 166 }; | 172 }; |
| 167 | 173 |
| 168 class ControllerRenderer : public BaseRenderer { | 174 class ControllerRenderer : public BaseRenderer { |
| 169 public: | 175 public: |
| 170 ControllerRenderer(); | 176 ControllerRenderer(); |
| 171 ~ControllerRenderer() override; | 177 ~ControllerRenderer() override; |
| 172 | 178 |
| 173 void SetUp(std::unique_ptr<VrControllerModel> model); | 179 void SetUp(std::unique_ptr<VrControllerModel> model); |
| 174 void Draw(VrControllerModel::State state, const gvr::Mat4f& view_proj_matrix); | 180 void Draw(VrControllerModel::State state, const vr::Matf& view_proj_matrix); |
| 175 bool IsSetUp() const { return setup_; } | 181 bool IsSetUp() const { return setup_; } |
| 176 | 182 |
| 177 private: | 183 private: |
| 178 GLuint model_view_proj_matrix_handle_; | 184 GLuint model_view_proj_matrix_handle_; |
| 179 GLuint tex_uniform_handle_; | 185 GLuint tex_uniform_handle_; |
| 180 GLuint indices_buffer_ = 0; | 186 GLuint indices_buffer_ = 0; |
| 181 GLuint vertex_buffer_ = 0; | 187 GLuint vertex_buffer_ = 0; |
| 182 GLint position_components_ = 0; | 188 GLint position_components_ = 0; |
| 183 GLenum position_type_ = GL_FLOAT; | 189 GLenum position_type_ = GL_FLOAT; |
| 184 GLsizei position_stride_ = 0; | 190 GLsizei position_stride_ = 0; |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 195 bool setup_ = false; | 201 bool setup_ = false; |
| 196 | 202 |
| 197 DISALLOW_COPY_AND_ASSIGN(ControllerRenderer); | 203 DISALLOW_COPY_AND_ASSIGN(ControllerRenderer); |
| 198 }; | 204 }; |
| 199 | 205 |
| 200 class GradientQuadRenderer : public BaseQuadRenderer { | 206 class GradientQuadRenderer : public BaseQuadRenderer { |
| 201 public: | 207 public: |
| 202 GradientQuadRenderer(); | 208 GradientQuadRenderer(); |
| 203 ~GradientQuadRenderer() override; | 209 ~GradientQuadRenderer() override; |
| 204 | 210 |
| 205 void Draw(const gvr::Mat4f& view_proj_matrix, | 211 void Draw(const vr::Matf& view_proj_matrix, |
| 206 const Colorf& edge_color, | 212 const vr::Colorf& edge_color, |
| 207 const Colorf& center_color, | 213 const vr::Colorf& center_color, |
| 208 float opacity); | 214 float opacity); |
| 209 | 215 |
| 210 private: | 216 private: |
| 211 GLuint model_view_proj_matrix_handle_; | 217 GLuint model_view_proj_matrix_handle_; |
| 212 GLuint scene_radius_handle_; | 218 GLuint scene_radius_handle_; |
| 213 GLuint center_color_handle_; | 219 GLuint center_color_handle_; |
| 214 GLuint edge_color_handle_; | 220 GLuint edge_color_handle_; |
| 215 GLuint opacity_handle_; | 221 GLuint opacity_handle_; |
| 216 | 222 |
| 217 DISALLOW_COPY_AND_ASSIGN(GradientQuadRenderer); | 223 DISALLOW_COPY_AND_ASSIGN(GradientQuadRenderer); |
| 218 }; | 224 }; |
| 219 | 225 |
| 220 class GradientGridRenderer : public BaseRenderer { | 226 class GradientGridRenderer : public BaseRenderer { |
| 221 public: | 227 public: |
| 222 GradientGridRenderer(); | 228 GradientGridRenderer(); |
| 223 ~GradientGridRenderer() override; | 229 ~GradientGridRenderer() override; |
| 224 | 230 |
| 225 void Draw(const gvr::Mat4f& view_proj_matrix, | 231 void Draw(const vr::Matf& view_proj_matrix, |
| 226 const Colorf& edge_color, | 232 const vr::Colorf& edge_color, |
| 227 const Colorf& center_color, | 233 const vr::Colorf& center_color, |
| 228 int gridline_count, | 234 int gridline_count, |
| 229 float opacity); | 235 float opacity); |
| 230 | 236 |
| 231 private: | 237 private: |
| 232 void MakeGridLines(int gridline_count); | 238 void MakeGridLines(int gridline_count); |
| 233 | 239 |
| 234 GLuint vertex_buffer_ = 0; | 240 GLuint vertex_buffer_ = 0; |
| 235 GLuint model_view_proj_matrix_handle_; | 241 GLuint model_view_proj_matrix_handle_; |
| 236 GLuint scene_radius_handle_; | 242 GLuint scene_radius_handle_; |
| 237 GLuint center_color_handle_; | 243 GLuint center_color_handle_; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 277 std::unique_ptr<ControllerRenderer> controller_renderer_; | 283 std::unique_ptr<ControllerRenderer> controller_renderer_; |
| 278 std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_; | 284 std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_; |
| 279 std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_; | 285 std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_; |
| 280 | 286 |
| 281 DISALLOW_COPY_AND_ASSIGN(VrShellRenderer); | 287 DISALLOW_COPY_AND_ASSIGN(VrShellRenderer); |
| 282 }; | 288 }; |
| 283 | 289 |
| 284 } // namespace vr_shell | 290 } // namespace vr_shell |
| 285 | 291 |
| 286 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ | 292 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ |
| OLD | NEW |