Index: chrome/browser/android/vr_shell/vr_shell_renderer.cc |
diff --git a/chrome/browser/android/vr_shell/vr_shell_renderer.cc b/chrome/browser/android/vr_shell/vr_shell_renderer.cc |
index 7951074d0453fedd5f9c2eba49fefdeb4030a37e..3d498ac98cf47f5cfd13a2384d49a96af5e949e6 100644 |
--- a/chrome/browser/android/vr_shell/vr_shell_renderer.cc |
+++ b/chrome/browser/android/vr_shell/vr_shell_renderer.cc |
@@ -185,6 +185,7 @@ const char* GetShaderSource(vr_shell::ShaderID shader) { |
uniform lowp vec4 color; |
uniform mediump float fade_point; |
uniform mediump float fade_end; |
+ uniform mediump float u_Opacity; |
void main() { |
mediump vec2 uv = v_TexCoordinate; |
@@ -195,7 +196,8 @@ const char* GetShaderSource(vr_shell::ShaderID shader) { |
mediump float total_fade = front_fade_factor * back_fade_factor; |
lowp vec4 texture_color = texture2D(texture_unit, uv); |
lowp vec4 final_color = color * texture_color; |
- gl_FragColor = vec4(final_color.xyz, final_color.w * total_fade); |
+ gl_FragColor = vec4(final_color.xyz, |
+ final_color.w * total_fade * u_Opacity); |
} |
/* clang-format on */); |
case vr_shell::ShaderID::GRADIENT_QUAD_FRAGMENT_SHADER: |
@@ -220,9 +222,11 @@ const char* GetShaderSource(vr_shell::ShaderID shader) { |
/* clang-format off */ |
uniform sampler2D u_texture; |
varying vec2 v_TexCoordinate; |
+ uniform mediump float u_Opacity; |
void main() { |
- gl_FragColor = texture2D(u_texture, v_TexCoordinate); |
+ lowp vec4 texture_color = texture2D(u_texture, v_TexCoordinate); |
+ gl_FragColor = vec4(texture_color.xyz, texture_color.w * u_Opacity); |
} |
/* clang-format on */); |
default: |
@@ -490,6 +494,7 @@ LaserRenderer::LaserRenderer() |
color_handle_ = glGetUniformLocation(program_handle_, "color"); |
fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point"); |
fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end"); |
+ opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
glGenTextures(1, &texture_data_handle_); |
glBindTexture(GL_TEXTURE_2D, texture_data_handle_); |
@@ -503,7 +508,7 @@ LaserRenderer::LaserRenderer() |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
} |
-void LaserRenderer::Draw(const vr::Mat4f& view_proj_matrix) { |
+void LaserRenderer::Draw(float opacity, const vr::Mat4f& view_proj_matrix) { |
PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); |
// Link texture data with texture unit. |
@@ -515,6 +520,7 @@ void LaserRenderer::Draw(const vr::Mat4f& view_proj_matrix) { |
kLaserColor[3]); |
glUniform1f(fade_point_handle_, kFadePoint); |
glUniform1f(fade_end_handle_, kFadeEnd); |
+ glUniform1f(opacity_handle_, opacity); |
glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); |
@@ -530,6 +536,7 @@ ControllerRenderer::ControllerRenderer() |
model_view_proj_matrix_handle_ = |
glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); |
+ opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
} |
ControllerRenderer::~ControllerRenderer() = default; |
@@ -578,9 +585,12 @@ void ControllerRenderer::SetUp(std::unique_ptr<VrControllerModel> model) { |
} |
void ControllerRenderer::Draw(VrControllerModel::State state, |
+ float opacity, |
const vr::Mat4f& view_proj_matrix) { |
glUseProgram(program_handle_); |
+ glUniform1f(opacity_handle_, opacity); |
+ |
glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, |
MatrixToGLArray(view_proj_matrix).data()); |