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

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: Moving code to more appropriate locations. 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(std::unique_ptr<VrControllerModel> model);
174 void Draw(VrControllerModel::State state, const gvr::Mat4f& view_proj_matrix);
175 bool IsSetUp() const { return setup_; }
176
177 private:
178 GLuint model_view_proj_matrix_handle_;
179 GLuint tex_uniform_handle_;
180 GLuint indices_buffer_ = 0;
181 GLuint vertex_buffer_ = 0;
182 GLint position_components_ = 0;
183 GLenum position_type_ = GL_FLOAT;
184 GLsizei position_stride_ = 0;
185 const GLvoid* position_offset_ = nullptr;
186 GLint tex_coord_components_ = 0;
187 GLenum tex_coord_type_ = GL_FLOAT;
188 GLsizei tex_coord_stride_ = 0;
189 const GLvoid* tex_coord_offset_ = nullptr;
190 GLenum draw_mode_ = GL_TRIANGLES;
191 GLsizei indices_count_ = 0;
192 GLenum indices_type_ = GL_INT;
193 const GLvoid* indices_offset_ = nullptr;
194 std::vector<GLuint> texture_handles_;
195 bool setup_ = false;
196
197 DISALLOW_COPY_AND_ASSIGN(ControllerRenderer);
198 };
199
161 class GradientQuadRenderer : public BaseQuadRenderer { 200 class GradientQuadRenderer : public BaseQuadRenderer {
162 public: 201 public:
163 GradientQuadRenderer(); 202 GradientQuadRenderer();
164 ~GradientQuadRenderer() override; 203 ~GradientQuadRenderer() override;
165 204
166 void Draw(const gvr::Mat4f& view_proj_matrix, 205 void Draw(const gvr::Mat4f& view_proj_matrix,
167 const Colorf& edge_color, 206 const Colorf& edge_color,
168 const Colorf& center_color, 207 const Colorf& center_color,
169 float opacity); 208 float opacity);
170 209
(...skipping 14 matching lines...) Expand all
185 224
186 void Draw(const gvr::Mat4f& view_proj_matrix, 225 void Draw(const gvr::Mat4f& view_proj_matrix,
187 const Colorf& edge_color, 226 const Colorf& edge_color,
188 const Colorf& center_color, 227 const Colorf& center_color,
189 int gridline_count, 228 int gridline_count,
190 float opacity); 229 float opacity);
191 230
192 private: 231 private:
193 void MakeGridLines(int gridline_count); 232 void MakeGridLines(int gridline_count);
194 233
234 GLuint vertex_buffer_ = 0;
195 GLuint model_view_proj_matrix_handle_; 235 GLuint model_view_proj_matrix_handle_;
196 GLuint scene_radius_handle_; 236 GLuint scene_radius_handle_;
197 GLuint center_color_handle_; 237 GLuint center_color_handle_;
198 GLuint edge_color_handle_; 238 GLuint edge_color_handle_;
199 GLuint opacity_handle_; 239 GLuint opacity_handle_;
200 std::vector<Line3d> grid_lines_; 240 std::vector<Line3d> grid_lines_;
201 241
202 DISALLOW_COPY_AND_ASSIGN(GradientGridRenderer); 242 DISALLOW_COPY_AND_ASSIGN(GradientGridRenderer);
203 }; 243 };
204 244
205 class VrShellRenderer { 245 class VrShellRenderer {
206 public: 246 public:
207 VrShellRenderer(); 247 VrShellRenderer();
208 ~VrShellRenderer(); 248 ~VrShellRenderer();
209 249
210 TexturedQuadRenderer* GetTexturedQuadRenderer() { 250 TexturedQuadRenderer* GetTexturedQuadRenderer() {
211 return textured_quad_renderer_.get(); 251 return textured_quad_renderer_.get();
212 } 252 }
213 253
214 WebVrRenderer* GetWebVrRenderer() { return webvr_renderer_.get(); } 254 WebVrRenderer* GetWebVrRenderer() { return webvr_renderer_.get(); }
215 255
216 ReticleRenderer* GetReticleRenderer() { return reticle_renderer_.get(); } 256 ReticleRenderer* GetReticleRenderer() { return reticle_renderer_.get(); }
217 257
218 LaserRenderer* GetLaserRenderer() { return laser_renderer_.get(); } 258 LaserRenderer* GetLaserRenderer() { return laser_renderer_.get(); }
219 259
260 ControllerRenderer* GetControllerRenderer() {
261 return controller_renderer_.get();
262 }
263
220 GradientQuadRenderer* GetGradientQuadRenderer() { 264 GradientQuadRenderer* GetGradientQuadRenderer() {
221 return gradient_quad_renderer_.get(); 265 return gradient_quad_renderer_.get();
222 } 266 }
223 267
224 GradientGridRenderer* GetGradientGridRenderer() { 268 GradientGridRenderer* GetGradientGridRenderer() {
225 return gradient_grid_renderer_.get(); 269 return gradient_grid_renderer_.get();
226 } 270 }
227 271
228 private: 272 private:
229 std::unique_ptr<TexturedQuadRenderer> textured_quad_renderer_; 273 std::unique_ptr<TexturedQuadRenderer> textured_quad_renderer_;
230 std::unique_ptr<WebVrRenderer> webvr_renderer_; 274 std::unique_ptr<WebVrRenderer> webvr_renderer_;
231 std::unique_ptr<ReticleRenderer> reticle_renderer_; 275 std::unique_ptr<ReticleRenderer> reticle_renderer_;
232 std::unique_ptr<LaserRenderer> laser_renderer_; 276 std::unique_ptr<LaserRenderer> laser_renderer_;
277 std::unique_ptr<ControllerRenderer> controller_renderer_;
233 std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_; 278 std::unique_ptr<GradientQuadRenderer> gradient_quad_renderer_;
234 std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_; 279 std::unique_ptr<GradientGridRenderer> gradient_grid_renderer_;
235 280
236 DISALLOW_COPY_AND_ASSIGN(VrShellRenderer); 281 DISALLOW_COPY_AND_ASSIGN(VrShellRenderer);
237 }; 282 };
238 283
239 } // namespace vr_shell 284 } // namespace vr_shell
240 285
241 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_ 286 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_RENDERER_H_
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell_gl.cc ('k') | chrome/browser/android/vr_shell/vr_shell_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698