| 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 "device/vr/vr_types.h" | 14 #include "device/vr/vr_types.h" |
| 15 #include "ui/gl/gl_bindings.h" | 15 #include "ui/gl/gl_bindings.h" |
| 16 | 16 |
| 17 namespace vr_shell { | 17 namespace vr_shell { |
| 18 | 18 |
| 19 // TODO(tiborg): set background color through JS API. | 19 // TODO(tiborg): set background color through JS API. |
| 20 constexpr float kFogBrightness = 0.57f; | 20 constexpr float kFogBrightness = 0.57f; |
| 21 | 21 |
| 22 typedef unsigned int GLuint; | |
| 23 | |
| 24 enum ShaderID { | 22 enum ShaderID { |
| 25 SHADER_UNRECOGNIZED = 0, | 23 SHADER_UNRECOGNIZED = 0, |
| 26 TEXTURE_QUAD_VERTEX_SHADER, | 24 EXTERNAL_TEXTURED_QUAD_VERTEX_SHADER, |
| 27 TEXTURE_QUAD_FRAGMENT_SHADER, | 25 EXTERNAL_TEXTURED_QUAD_FRAGMENT_SHADER, |
| 28 WEBVR_VERTEX_SHADER, | 26 WEBVR_VERTEX_SHADER, |
| 29 WEBVR_FRAGMENT_SHADER, | 27 WEBVR_FRAGMENT_SHADER, |
| 30 RETICLE_VERTEX_SHADER, | 28 RETICLE_VERTEX_SHADER, |
| 31 RETICLE_FRAGMENT_SHADER, | 29 RETICLE_FRAGMENT_SHADER, |
| 32 LASER_VERTEX_SHADER, | 30 LASER_VERTEX_SHADER, |
| 33 LASER_FRAGMENT_SHADER, | 31 LASER_FRAGMENT_SHADER, |
| 34 GRADIENT_QUAD_VERTEX_SHADER, | 32 GRADIENT_QUAD_VERTEX_SHADER, |
| 35 GRADIENT_QUAD_FRAGMENT_SHADER, | 33 GRADIENT_QUAD_FRAGMENT_SHADER, |
| 36 GRADIENT_GRID_VERTEX_SHADER, | 34 GRADIENT_GRID_VERTEX_SHADER, |
| 37 GRADIENT_GRID_FRAGMENT_SHADER, | 35 GRADIENT_GRID_FRAGMENT_SHADER, |
| 38 CONTROLLER_VERTEX_SHADER, | 36 CONTROLLER_VERTEX_SHADER, |
| 39 CONTROLLER_FRAGMENT_SHADER, | 37 CONTROLLER_FRAGMENT_SHADER, |
| 38 TEXTURED_QUAD_VERTEX_SHADER, |
| 39 TEXTURED_QUAD_FRAGMENT_SHADER, |
| 40 SHADER_ID_MAX | 40 SHADER_ID_MAX |
| 41 }; | 41 }; |
| 42 | 42 |
| 43 struct Vertex3d { | 43 struct Vertex3d { |
| 44 float x; | 44 float x; |
| 45 float y; | 45 float y; |
| 46 float z; | 46 float z; |
| 47 }; | 47 }; |
| 48 | 48 |
| 49 struct RectF { | 49 struct RectF { |
| 50 float x; | 50 float x; |
| 51 float y; | 51 float y; |
| 52 float width; | 52 float width; |
| 53 float height; | 53 float height; |
| 54 }; | 54 }; |
| 55 | 55 |
| 56 struct Line3d { | 56 struct Line3d { |
| 57 Vertex3d start; | 57 Vertex3d start; |
| 58 Vertex3d end; | 58 Vertex3d end; |
| 59 }; | 59 }; |
| 60 | 60 |
| 61 struct TexturedQuad { | 61 struct SkiaQuad { |
| 62 int texture_data_handle; | 62 int texture_data_handle; |
| 63 vr::Mat4f view_proj_matrix; | 63 vr::Mat4f view_proj_matrix; |
| 64 RectF copy_rect; | 64 RectF copy_rect; |
| 65 float opacity; | 65 float opacity; |
| 66 }; | 66 }; |
| 67 | 67 |
| 68 class BaseRenderer { | 68 class BaseRenderer { |
| 69 public: | 69 public: |
| 70 virtual ~BaseRenderer(); | 70 virtual ~BaseRenderer(); |
| 71 | 71 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 88 | 88 |
| 89 protected: | 89 protected: |
| 90 void PrepareToDraw(GLuint view_proj_matrix_handle, | 90 void PrepareToDraw(GLuint view_proj_matrix_handle, |
| 91 const vr::Mat4f& view_proj_matrix); | 91 const vr::Mat4f& view_proj_matrix); |
| 92 | 92 |
| 93 static GLuint vertex_buffer_; | 93 static GLuint vertex_buffer_; |
| 94 | 94 |
| 95 DISALLOW_COPY_AND_ASSIGN(BaseQuadRenderer); | 95 DISALLOW_COPY_AND_ASSIGN(BaseQuadRenderer); |
| 96 }; | 96 }; |
| 97 | 97 |
| 98 class ExternalTexturedQuadRenderer : public BaseQuadRenderer { |
| 99 public: |
| 100 ExternalTexturedQuadRenderer(); |
| 101 ~ExternalTexturedQuadRenderer() override; |
| 102 |
| 103 // Draw the content rect in the texture quad. |
| 104 void Draw(int texture_data_handle, |
| 105 const vr::Mat4f& view_proj_matrix, |
| 106 const gfx::RectF& copy_rect, |
| 107 float opacity); |
| 108 |
| 109 private: |
| 110 GLuint model_view_proj_matrix_handle_; |
| 111 GLuint copy_rect_uniform_handle_; |
| 112 GLuint tex_uniform_handle_; |
| 113 GLuint opacity_handle_; |
| 114 |
| 115 DISALLOW_COPY_AND_ASSIGN(ExternalTexturedQuadRenderer); |
| 116 }; |
| 117 |
| 98 class TexturedQuadRenderer : public BaseQuadRenderer { | 118 class TexturedQuadRenderer : public BaseQuadRenderer { |
| 99 public: | 119 public: |
| 100 TexturedQuadRenderer(); | 120 TexturedQuadRenderer(); |
| 101 ~TexturedQuadRenderer() override; | 121 ~TexturedQuadRenderer() override; |
| 102 | 122 |
| 103 // Draw the content rect in the texture quad. | 123 // Draw the content rect in the texture quad. |
| 104 void AddQuad(int texture_data_handle, | 124 void AddQuad(int texture_data_handle, |
| 105 const vr::Mat4f& view_proj_matrix, | 125 const vr::Mat4f& view_proj_matrix, |
| 106 const gfx::RectF& copy_rect, | 126 const gfx::RectF& copy_rect, |
| 107 float opacity); | 127 float opacity); |
| 108 | 128 |
| 109 void Flush(); | 129 void Flush(); |
| 110 | 130 |
| 111 private: | 131 private: |
| 112 GLuint model_view_proj_matrix_handle_; | 132 GLuint model_view_proj_matrix_handle_; |
| 113 GLuint copy_rect_uniform_handle_; | 133 GLuint copy_rect_uniform_handle_; |
| 114 GLuint tex_uniform_handle_; | 134 GLuint tex_uniform_handle_; |
| 115 GLuint opacity_handle_; | 135 GLuint opacity_handle_; |
| 116 | 136 |
| 117 std::queue<TexturedQuad> quad_queue_; | 137 std::queue<SkiaQuad> quad_queue_; |
| 118 | 138 |
| 119 DISALLOW_COPY_AND_ASSIGN(TexturedQuadRenderer); | 139 DISALLOW_COPY_AND_ASSIGN(TexturedQuadRenderer); |
| 120 }; | 140 }; |
| 121 | 141 |
| 122 // Renders a page-generated stereo VR view. | 142 // Renders a page-generated stereo VR view. |
| 123 class WebVrRenderer : public BaseQuadRenderer { | 143 class WebVrRenderer : public BaseQuadRenderer { |
| 124 public: | 144 public: |
| 125 WebVrRenderer(); | 145 WebVrRenderer(); |
| 126 ~WebVrRenderer() override; | 146 ~WebVrRenderer() override; |
| 127 | 147 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 std::vector<Line3d> grid_lines_; | 266 std::vector<Line3d> grid_lines_; |
| 247 | 267 |
| 248 DISALLOW_COPY_AND_ASSIGN(GradientGridRenderer); | 268 DISALLOW_COPY_AND_ASSIGN(GradientGridRenderer); |
| 249 }; | 269 }; |
| 250 | 270 |
| 251 class VrShellRenderer { | 271 class VrShellRenderer { |
| 252 public: | 272 public: |
| 253 VrShellRenderer(); | 273 VrShellRenderer(); |
| 254 ~VrShellRenderer(); | 274 ~VrShellRenderer(); |
| 255 | 275 |
| 256 TexturedQuadRenderer* GetTexturedQuadRenderer() { | 276 ExternalTexturedQuadRenderer* GetExternalTexturedQuadRenderer(); |
| 257 return textured_quad_renderer_.get(); | 277 TexturedQuadRenderer* GetTexturedQuadRenderer(); |
| 258 } | 278 WebVrRenderer* GetWebVrRenderer(); |
| 259 | 279 ReticleRenderer* GetReticleRenderer(); |
| 260 WebVrRenderer* GetWebVrRenderer() { return webvr_renderer_.get(); } | 280 LaserRenderer* GetLaserRenderer(); |
| 261 | 281 ControllerRenderer* GetControllerRenderer(); |
| 262 ReticleRenderer* GetReticleRenderer() { return reticle_renderer_.get(); } | 282 GradientQuadRenderer* GetGradientQuadRenderer(); |
| 263 | 283 GradientGridRenderer* GetGradientGridRenderer(); |
| 264 LaserRenderer* GetLaserRenderer() { return laser_renderer_.get(); } | 284 void Flush(); |
| 265 | |
| 266 ControllerRenderer* GetControllerRenderer() { | |
| 267 return controller_renderer_.get(); | |
| 268 } | |
| 269 | |
| 270 GradientQuadRenderer* GetGradientQuadRenderer() { | |
| 271 return gradient_quad_renderer_.get(); | |
| 272 } | |
| 273 | |
| 274 GradientGridRenderer* GetGradientGridRenderer() { | |
| 275 return gradient_grid_renderer_.get(); | |
| 276 } | |
| 277 | 285 |
| 278 private: | 286 private: |
| 287 std::unique_ptr<ExternalTexturedQuadRenderer> |
| 288 external_textured_quad_renderer_; |
| 279 std::unique_ptr<TexturedQuadRenderer> textured_quad_renderer_; | 289 std::unique_ptr<TexturedQuadRenderer> textured_quad_renderer_; |
| 280 std::unique_ptr<WebVrRenderer> webvr_renderer_; | 290 std::unique_ptr<WebVrRenderer> webvr_renderer_; |
| 281 std::unique_ptr<ReticleRenderer> reticle_renderer_; | 291 std::unique_ptr<ReticleRenderer> reticle_renderer_; |
| 282 std::unique_ptr<LaserRenderer> laser_renderer_; | 292 std::unique_ptr<LaserRenderer> laser_renderer_; |
| 283 std::unique_ptr<ControllerRenderer> controller_renderer_; | 293 std::unique_ptr<ControllerRenderer> controller_renderer_; |
| 284 std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_; | 294 std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_; |
| 285 std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_; | 295 std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_; |
| 286 | 296 |
| 287 DISALLOW_COPY_AND_ASSIGN(VrShellRenderer); | 297 DISALLOW_COPY_AND_ASSIGN(VrShellRenderer); |
| 288 }; | 298 }; |
| 289 | 299 |
| 290 } // namespace vr_shell | 300 } // namespace vr_shell |
| 291 | 301 |
| 292 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ | 302 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ |
| OLD | NEW |