Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: chrome/browser/android/vr_shell/vr_shell_renderer.h

Issue 2775283004: Rendering Daydream controller in a fixed position. (Closed)
Patch Set: Using textures for corresponding button states. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_math.h" 14 #include "chrome/browser/android/vr_shell/vr_math.h"
14 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/ gvr_types.h" 15 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/ gvr_types.h"
15 #include "ui/gl/gl_bindings.h" 16 #include "ui/gl/gl_bindings.h"
16 17
17 namespace vr_shell { 18 namespace vr_shell {
18 19
19 // TODO(tiborg): set background color through JS API. 20 // TODO(tiborg): set background color through JS API.
20 constexpr float kFogBrightness = 0.57f; 21 constexpr float kFogBrightness = 0.57f;
21 22
22 typedef unsigned int GLuint; 23 typedef unsigned int GLuint;
23 24
24 enum ShaderID { 25 enum ShaderID {
25 SHADER_UNRECOGNIZED = 0, 26 SHADER_UNRECOGNIZED = 0,
26 TEXTURE_QUAD_VERTEX_SHADER, 27 TEXTURE_QUAD_VERTEX_SHADER,
27 TEXTURE_QUAD_FRAGMENT_SHADER, 28 TEXTURE_QUAD_FRAGMENT_SHADER,
28 WEBVR_VERTEX_SHADER, 29 WEBVR_VERTEX_SHADER,
29 WEBVR_FRAGMENT_SHADER, 30 WEBVR_FRAGMENT_SHADER,
30 RETICLE_VERTEX_SHADER, 31 RETICLE_VERTEX_SHADER,
31 RETICLE_FRAGMENT_SHADER, 32 RETICLE_FRAGMENT_SHADER,
32 LASER_VERTEX_SHADER, 33 LASER_VERTEX_SHADER,
33 LASER_FRAGMENT_SHADER, 34 LASER_FRAGMENT_SHADER,
34 GRADIENT_QUAD_VERTEX_SHADER, 35 GRADIENT_QUAD_VERTEX_SHADER,
35 GRADIENT_QUAD_FRAGMENT_SHADER, 36 GRADIENT_QUAD_FRAGMENT_SHADER,
36 GRADIENT_GRID_VERTEX_SHADER, 37 GRADIENT_GRID_VERTEX_SHADER,
37 GRADIENT_GRID_FRAGMENT_SHADER, 38 GRADIENT_GRID_FRAGMENT_SHADER,
39 CONTROLLER_VERTEX_SHADER,
40 CONTROLLER_FRAGMENT_SHADER,
38 SHADER_ID_MAX 41 SHADER_ID_MAX
39 }; 42 };
40 43
41 struct Vertex3d { 44 struct Vertex3d {
42 float x; 45 float x;
43 float y; 46 float y;
44 float z; 47 float z;
45 }; 48 };
46 49
47 struct Line3d { 50 struct Line3d {
48 Vertex3d start; 51 Vertex3d start;
49 Vertex3d end; 52 Vertex3d end;
50 }; 53 };
51 54
52 struct TexturedQuad { 55 struct TexturedQuad {
53 int texture_data_handle; 56 int texture_data_handle;
54 gvr::Mat4f view_proj_matrix; 57 gvr::Mat4f view_proj_matrix;
55 Rectf copy_rect; 58 Rectf copy_rect;
56 float opacity; 59 float opacity;
57 }; 60 };
58 61
59 class BaseRenderer { 62 class BaseRenderer {
60 public: 63 public:
61 virtual ~BaseRenderer(); 64 virtual ~BaseRenderer();
62 65
63 protected: 66 protected:
64 BaseRenderer(ShaderID vertex_id, ShaderID fragment_id); 67 BaseRenderer(ShaderID vertex_id, ShaderID fragment_id);
65 68
66 void PrepareToDraw(GLuint view_proj_matrix_handle,
67 const gvr::Mat4f& view_proj_matrix);
68
69 GLuint program_handle_; 69 GLuint program_handle_;
70 GLuint position_handle_; 70 GLuint position_handle_;
71 GLuint tex_coord_handle_; 71 GLuint tex_coord_handle_;
72 GLuint vertex_buffer_ = 0;
73 72
74 DISALLOW_COPY_AND_ASSIGN(BaseRenderer); 73 DISALLOW_COPY_AND_ASSIGN(BaseRenderer);
75 }; 74 };
76 75
77 class BaseQuadRenderer : public BaseRenderer { 76 class BaseQuadRenderer : public BaseRenderer {
78 public: 77 public:
79 BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id); 78 BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id);
80 ~BaseQuadRenderer() override; 79 ~BaseQuadRenderer() override;
81 80
81 static void SetVertexBuffer();
82
83 protected:
84 void PrepareToDraw(GLuint view_proj_matrix_handle,
85 const gvr::Mat4f& view_proj_matrix);
86
87 static GLuint vertex_buffer_;
88
82 DISALLOW_COPY_AND_ASSIGN(BaseQuadRenderer); 89 DISALLOW_COPY_AND_ASSIGN(BaseQuadRenderer);
83 }; 90 };
84 91
85 class TexturedQuadRenderer : public BaseQuadRenderer { 92 class TexturedQuadRenderer : public BaseQuadRenderer {
86 public: 93 public:
87 TexturedQuadRenderer(); 94 TexturedQuadRenderer();
88 ~TexturedQuadRenderer() override; 95 ~TexturedQuadRenderer() override;
89 96
90 // Draw the content rect in the texture quad. 97 // Draw the content rect in the texture quad.
91 void AddQuad(int texture_data_handle, 98 void AddQuad(int texture_data_handle,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 GLuint model_view_proj_matrix_handle_; 158 GLuint model_view_proj_matrix_handle_;
152 GLuint texture_unit_handle_; 159 GLuint texture_unit_handle_;
153 GLuint texture_data_handle_; 160 GLuint texture_data_handle_;
154 GLuint color_handle_; 161 GLuint color_handle_;
155 GLuint fade_point_handle_; 162 GLuint fade_point_handle_;
156 GLuint fade_end_handle_; 163 GLuint fade_end_handle_;
157 164
158 DISALLOW_COPY_AND_ASSIGN(LaserRenderer); 165 DISALLOW_COPY_AND_ASSIGN(LaserRenderer);
159 }; 166 };
160 167
168 class ControllerRenderer : public BaseRenderer {
169 public:
170 ControllerRenderer();
171 ~ControllerRenderer() override;
172
173 void SetUp(const VrControllerModel& model);
174 void Draw(const VrControllerModel& model,
175 VrControllerModel::State state,
176 const gvr::Mat4f& view_proj_matrix);
177
178 private:
179 GLuint model_view_proj_matrix_handle_;
180 GLuint tex_uniform_handle_;
181 GLuint indices_buffer_ = 0;
182 GLuint vertex_buffer_ = 0;
183 std::vector<GLuint> texture_handles_;
184
185 DISALLOW_COPY_AND_ASSIGN(ControllerRenderer);
186 };
187
161 class GradientQuadRenderer : public BaseQuadRenderer { 188 class GradientQuadRenderer : public BaseQuadRenderer {
162 public: 189 public:
163 GradientQuadRenderer(); 190 GradientQuadRenderer();
164 ~GradientQuadRenderer() override; 191 ~GradientQuadRenderer() override;
165 192
166 void Draw(const gvr::Mat4f& view_proj_matrix, 193 void Draw(const gvr::Mat4f& view_proj_matrix,
167 const Colorf& edge_color, 194 const Colorf& edge_color,
168 const Colorf& center_color, 195 const Colorf& center_color,
169 float opacity); 196 float opacity);
170 197
(...skipping 14 matching lines...) Expand all
185 212
186 void Draw(const gvr::Mat4f& view_proj_matrix, 213 void Draw(const gvr::Mat4f& view_proj_matrix,
187 const Colorf& edge_color, 214 const Colorf& edge_color,
188 const Colorf& center_color, 215 const Colorf& center_color,
189 int gridline_count, 216 int gridline_count,
190 float opacity); 217 float opacity);
191 218
192 private: 219 private:
193 void MakeGridLines(int gridline_count); 220 void MakeGridLines(int gridline_count);
194 221
222 GLuint vertex_buffer_ = 0;
195 GLuint model_view_proj_matrix_handle_; 223 GLuint model_view_proj_matrix_handle_;
196 GLuint scene_radius_handle_; 224 GLuint scene_radius_handle_;
197 GLuint center_color_handle_; 225 GLuint center_color_handle_;
198 GLuint edge_color_handle_; 226 GLuint edge_color_handle_;
199 GLuint opacity_handle_; 227 GLuint opacity_handle_;
200 std::vector<Line3d> grid_lines_; 228 std::vector<Line3d> grid_lines_;
201 229
202 DISALLOW_COPY_AND_ASSIGN(GradientGridRenderer); 230 DISALLOW_COPY_AND_ASSIGN(GradientGridRenderer);
203 }; 231 };
204 232
205 class VrShellRenderer { 233 class VrShellRenderer {
206 public: 234 public:
207 VrShellRenderer(); 235 VrShellRenderer();
208 ~VrShellRenderer(); 236 ~VrShellRenderer();
209 237
210 TexturedQuadRenderer* GetTexturedQuadRenderer() { 238 TexturedQuadRenderer* GetTexturedQuadRenderer() {
211 return textured_quad_renderer_.get(); 239 return textured_quad_renderer_.get();
212 } 240 }
213 241
214 WebVrRenderer* GetWebVrRenderer() { return webvr_renderer_.get(); } 242 WebVrRenderer* GetWebVrRenderer() { return webvr_renderer_.get(); }
215 243
216 ReticleRenderer* GetReticleRenderer() { return reticle_renderer_.get(); } 244 ReticleRenderer* GetReticleRenderer() { return reticle_renderer_.get(); }
217 245
218 LaserRenderer* GetLaserRenderer() { return laser_renderer_.get(); } 246 LaserRenderer* GetLaserRenderer() { return laser_renderer_.get(); }
219 247
248 ControllerRenderer* GetControllerRenderer() {
249 return controller_renderer_.get();
250 }
251
220 GradientQuadRenderer* GetGradientQuadRenderer() { 252 GradientQuadRenderer* GetGradientQuadRenderer() {
221 return gradient_quad_renderer_.get(); 253 return gradient_quad_renderer_.get();
222 } 254 }
223 255
224 GradientGridRenderer* GetGradientGridRenderer() { 256 GradientGridRenderer* GetGradientGridRenderer() {
225 return gradient_grid_renderer_.get(); 257 return gradient_grid_renderer_.get();
226 } 258 }
227 259
228 private: 260 private:
229 std::unique_ptr<TexturedQuadRenderer> textured_quad_renderer_; 261 std::unique_ptr<TexturedQuadRenderer> textured_quad_renderer_;
230 std::unique_ptr<WebVrRenderer> webvr_renderer_; 262 std::unique_ptr<WebVrRenderer> webvr_renderer_;
231 std::unique_ptr<ReticleRenderer> reticle_renderer_; 263 std::unique_ptr<ReticleRenderer> reticle_renderer_;
232 std::unique_ptr<LaserRenderer> laser_renderer_; 264 std::unique_ptr<LaserRenderer> laser_renderer_;
265 std::unique_ptr<ControllerRenderer> controller_renderer_;
233 std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_; 266 std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_;
234 std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_; 267 std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_;
235 268
236 DISALLOW_COPY_AND_ASSIGN(VrShellRenderer); 269 DISALLOW_COPY_AND_ASSIGN(VrShellRenderer);
237 }; 270 };
238 271
239 } // namespace vr_shell 272 } // namespace vr_shell
240 273
241 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ 274 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698