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 |