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

Unified Diff: cc/output/shader.cc

Issue 12157002: Adding YUVA support for enabling Alpha Playback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase and calming down the try bots Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: cc/output/shader.cc
diff --git a/cc/output/shader.cc b/cc/output/shader.cc
index 4a97a8ed941fbfb5b38924fc010d2334a28cd892..3181a3778546eba6aed867a5a4a9f87b5d40daf1 100644
--- a/cc/output/shader.cc
+++ b/cc/output/shader.cc
@@ -1355,6 +1355,79 @@ std::string FragmentShaderYUVVideo::GetShaderString(
); // NOLINT(whitespace/parens)
}
+FragmentShaderYUVAVideo::FragmentShaderYUVAVideo()
+ : y_texture_location_(-1),
+ u_texture_location_(-1),
+ v_texture_location_(-1),
+ a_texture_location_(-1),
+ alpha_location_(-1),
+ yuv_matrix_location_(-1),
+ yuv_adj_location_(-1) {
+}
+
+void FragmentShaderYUVAVideo::Init(WebGraphicsContext3D* context,
+ unsigned program,
+ bool using_bind_uniform,
+ int* base_uniform_index) {
+ static const char* shader_uniforms[] = {
+ "y_texture",
+ "u_texture",
+ "v_texture",
+ "a_texture",
+ "alpha",
+ "cc_matrix",
+ "yuv_adj",
+ };
+ int locations[7];
+
+ GetProgramUniformLocations(context,
+ program,
+ shader_uniforms,
+ arraysize(shader_uniforms),
+ arraysize(locations),
+ locations,
+ using_bind_uniform,
+ base_uniform_index);
+
+ y_texture_location_ = locations[0];
+ u_texture_location_ = locations[1];
+ v_texture_location_ = locations[2];
+ a_texture_location_ = locations[3];
+ alpha_location_ = locations[4];
+ yuv_matrix_location_ = locations[5];
+ yuv_adj_location_ = locations[6];
+
+ DCHECK(y_texture_location_ != -1 && u_texture_location_ != -1 &&
+ v_texture_location_ != -1 && a_texture_location_ != -1 &&
+ alpha_location_ != -1 && yuv_matrix_location_ != -1 &&
+ yuv_adj_location_ != -1);
+}
+
+std::string FragmentShaderYUVAVideo::GetShaderString(
+ TexCoordPrecision precision) const {
+ return FRAGMENT_SHADER(
+ precision mediump float;
+ precision mediump int;
+ varying TexCoordPrecision vec2 v_texCoord;
+ uniform sampler2D y_texture;
+ uniform sampler2D u_texture;
+ uniform sampler2D v_texture;
+ uniform sampler2D a_texture;
+ uniform float alpha;
+ uniform vec3 yuv_adj;
+ uniform mat3 yuv_matrix;
+ void main() {
+ float y_raw = texture2D(y_texture, v_texCoord).x;
+ float u_unsigned = texture2D(u_texture, v_texCoord).x;
+ float v_unsigned = texture2D(v_texture, v_texCoord).x;
+ float a_raw = texture2D(a_texture, v_texCoord).x;
+ vec3 yuv = vec3(y_raw, u_unsigned, v_unsigned) + yuv_adj;
+ vec3 rgb = yuv_matrix * yuv;
+ gl_FragColor = vec4(rgb, a_raw) * alpha;
+ }
+ ); // NOLINT(whitespace/parens)
+}
+
FragmentShaderColor::FragmentShaderColor()
: color_location_(-1) {}

Powered by Google App Engine
This is Rietveld 408576698