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 #include "chrome/browser/android/vr_shell/vr_shell_renderer.h" | 5 #include "chrome/browser/android/vr_shell/vr_shell_renderer.h" |
6 | 6 |
7 #include "chrome/browser/android/vr_shell/vr_gl_util.h" | 7 #include "chrome/browser/android/vr_shell/vr_gl_util.h" |
8 | 8 |
9 namespace { | 9 namespace { |
10 | 10 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 void main() { | 83 void main() { |
84 v_TexCoordinate = a_TexCoordinate; | 84 v_TexCoordinate = a_TexCoordinate; |
85 gl_Position = u_CombinedMatrix * a_Position; | 85 gl_Position = u_CombinedMatrix * a_Position; |
86 }); | 86 }); |
87 case vr_shell::ShaderID::TEXTURE_QUAD_FRAGMENT_SHADER: | 87 case vr_shell::ShaderID::TEXTURE_QUAD_FRAGMENT_SHADER: |
88 return OEIE_SHADER( | 88 return OEIE_SHADER( |
89 precision highp float; | 89 precision highp float; |
90 uniform samplerExternalOES u_Texture; | 90 uniform samplerExternalOES u_Texture; |
91 uniform vec4 u_CopyRect; // rectangle | 91 uniform vec4 u_CopyRect; // rectangle |
92 varying vec2 v_TexCoordinate; | 92 varying vec2 v_TexCoordinate; |
| 93 uniform lowp vec4 color; |
| 94 uniform mediump float opacity; |
| 95 |
93 void main() { | 96 void main() { |
94 vec2 scaledTex = | 97 vec2 scaledTex = |
95 vec2(u_CopyRect[0] + v_TexCoordinate.x * u_CopyRect[2], | 98 vec2(u_CopyRect[0] + v_TexCoordinate.x * u_CopyRect[2], |
96 u_CopyRect[1] + v_TexCoordinate.y * u_CopyRect[3]); | 99 u_CopyRect[1] + v_TexCoordinate.y * u_CopyRect[3]); |
97 gl_FragColor = texture2D(u_Texture, scaledTex); | 100 lowp vec4 color = texture2D(u_Texture, scaledTex); |
| 101 gl_FragColor = vec4(color.xyz, color.w * opacity); |
98 }); | 102 }); |
99 case vr_shell::ShaderID::WEBVR_VERTEX_SHADER: | 103 case vr_shell::ShaderID::WEBVR_VERTEX_SHADER: |
100 return SHADER( | 104 return SHADER( |
101 attribute vec4 a_Position; | 105 attribute vec4 a_Position; |
102 varying vec2 v_TexCoordinate; | 106 varying vec2 v_TexCoordinate; |
103 | 107 |
104 void main() { | 108 void main() { |
105 // Pack the texcoord into the position to avoid state changes. | 109 // Pack the texcoord into the position to avoid state changes. |
106 v_TexCoordinate = a_Position.zw; | 110 v_TexCoordinate = a_Position.zw; |
107 gl_Position = vec4(a_Position.xy, 0.0, 1.0); | 111 gl_Position = vec4(a_Position.xy, 0.0, 1.0); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | 227 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
224 } | 228 } |
225 | 229 |
226 TexturedQuadRenderer::TexturedQuadRenderer() | 230 TexturedQuadRenderer::TexturedQuadRenderer() |
227 : BaseRenderer(TEXTURE_QUAD_VERTEX_SHADER, TEXTURE_QUAD_FRAGMENT_SHADER) { | 231 : BaseRenderer(TEXTURE_QUAD_VERTEX_SHADER, TEXTURE_QUAD_FRAGMENT_SHADER) { |
228 combined_matrix_handle_ = | 232 combined_matrix_handle_ = |
229 glGetUniformLocation(program_handle_, "u_CombinedMatrix"); | 233 glGetUniformLocation(program_handle_, "u_CombinedMatrix"); |
230 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); | 234 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); |
231 copy_rect_uniform_handle_ = | 235 copy_rect_uniform_handle_ = |
232 glGetUniformLocation(program_handle_, "u_CopyRect"); | 236 glGetUniformLocation(program_handle_, "u_CopyRect"); |
| 237 opacity_handle_ = glGetUniformLocation(program_handle_, "opacity"); |
233 } | 238 } |
234 | 239 |
235 void TexturedQuadRenderer::Draw(int texture_data_handle, | 240 void TexturedQuadRenderer::Draw(int texture_data_handle, |
236 const gvr::Mat4f& combined_matrix, | 241 const gvr::Mat4f& combined_matrix, |
237 const Rectf& copy_rect) { | 242 const Rectf& copy_rect, |
| 243 float opacity) { |
238 PrepareToDraw(combined_matrix_handle_, combined_matrix); | 244 PrepareToDraw(combined_matrix_handle_, combined_matrix); |
239 | 245 |
240 // Link texture data with texture unit. | 246 // Link texture data with texture unit. |
241 glActiveTexture(GL_TEXTURE0); | 247 glActiveTexture(GL_TEXTURE0); |
242 glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_data_handle); | 248 glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_data_handle); |
243 glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | 249 glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
244 glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | 250 glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
245 glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 251 glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
246 glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 252 glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
247 | 253 |
248 glUniform1i(tex_uniform_handle_, 0); | 254 glUniform1i(tex_uniform_handle_, 0); |
249 glUniform4fv(copy_rect_uniform_handle_, 1, (float*)(©_rect)); | 255 glUniform4fv(copy_rect_uniform_handle_, 1, (float*)(©_rect)); |
| 256 glUniform1f(opacity_handle_, opacity); |
250 | 257 |
251 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); | 258 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); |
252 | 259 |
253 glDisableVertexAttribArray(position_handle_); | 260 glDisableVertexAttribArray(position_handle_); |
254 glDisableVertexAttribArray(tex_coord_handle_); | 261 glDisableVertexAttribArray(tex_coord_handle_); |
255 } | 262 } |
256 | 263 |
257 TexturedQuadRenderer::~TexturedQuadRenderer() = default; | 264 TexturedQuadRenderer::~TexturedQuadRenderer() = default; |
258 | 265 |
259 WebVrRenderer::WebVrRenderer() : | 266 WebVrRenderer::WebVrRenderer() : |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 | 404 |
398 VrShellRenderer::VrShellRenderer() | 405 VrShellRenderer::VrShellRenderer() |
399 : textured_quad_renderer_(new TexturedQuadRenderer), | 406 : textured_quad_renderer_(new TexturedQuadRenderer), |
400 webvr_renderer_(new WebVrRenderer), | 407 webvr_renderer_(new WebVrRenderer), |
401 reticle_renderer_(new ReticleRenderer), | 408 reticle_renderer_(new ReticleRenderer), |
402 laser_renderer_(new LaserRenderer) {} | 409 laser_renderer_(new LaserRenderer) {} |
403 | 410 |
404 VrShellRenderer::~VrShellRenderer() = default; | 411 VrShellRenderer::~VrShellRenderer() = default; |
405 | 412 |
406 } // namespace vr_shell | 413 } // namespace vr_shell |
OLD | NEW |