Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/shader.h" | 5 #include "cc/shader.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h" | 9 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h" |
| 10 | 10 |
| (...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 885 float y_raw = texture2D(y_texture, v_texCoord).x; | 885 float y_raw = texture2D(y_texture, v_texCoord).x; |
| 886 float u_unsigned = texture2D(u_texture, v_texCoord).x; | 886 float u_unsigned = texture2D(u_texture, v_texCoord).x; |
| 887 float v_unsigned = texture2D(v_texture, v_texCoord).x; | 887 float v_unsigned = texture2D(v_texture, v_texCoord).x; |
| 888 vec3 yuv = vec3(y_raw, u_unsigned, v_unsigned) + yuv_adj; | 888 vec3 yuv = vec3(y_raw, u_unsigned, v_unsigned) + yuv_adj; |
| 889 vec3 rgb = yuv_matrix * yuv; | 889 vec3 rgb = yuv_matrix * yuv; |
| 890 gl_FragColor = vec4(rgb, float(1)) * alpha; | 890 gl_FragColor = vec4(rgb, float(1)) * alpha; |
| 891 } | 891 } |
| 892 ); | 892 ); |
| 893 } | 893 } |
| 894 | 894 |
| 895 FragmentShaderYUVAVideo::FragmentShaderYUVAVideo() | |
| 896 : m_yTextureLocation(-1) | |
| 897 , m_uTextureLocation(-1) | |
| 898 , m_vTextureLocation(-1) | |
| 899 , m_aTextureLocation(-1) | |
| 900 , m_alphaLocation(-1) | |
| 901 , m_yuvMatrixLocation(-1) | |
| 902 , m_yuvAdjLocation(-1) | |
| 903 { | |
| 904 } | |
| 905 | |
| 906 void FragmentShaderYUVAVideo::init(WebGraphicsContext3D* context, unsigned progr am, bool usingBindUniform, int* baseUniformIndex) | |
| 907 { | |
| 908 static const char* shaderUniforms[] = { | |
| 909 "y_texture", | |
| 910 "u_texture", | |
| 911 "v_texture", | |
| 912 "a_texture", | |
| 913 "alpha", | |
| 914 "cc_matrix", | |
| 915 "yuv_adj", | |
| 916 }; | |
| 917 int locations[7]; | |
| 918 | |
| 919 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; | |
| 920 | |
| 921 m_yTextureLocation = locations[0]; | |
| 922 m_uTextureLocation = locations[1]; | |
| 923 m_vTextureLocation = locations[2]; | |
| 924 m_aTextureLocation = locations[3]; | |
| 925 m_alphaLocation = locations[4]; | |
| 926 m_yuvMatrixLocation = locations[5]; | |
| 927 m_yuvAdjLocation = locations[6]; | |
| 928 | |
| 929 DCHECK(m_yTextureLocation != -1 && m_uTextureLocation != -1 && m_vTextureLoc ation != -1 && m_aTextureLocation != -1 | |
| 930 && m_alphaLocation != -1 && m_yuvMatrixLocation != -1 && m_yuvAdjLoca tion != -1); | |
| 931 } | |
| 932 | |
| 933 std::string FragmentShaderYUVAVideo::getShaderString() const | |
| 934 { | |
| 935 return SHADER( | |
| 936 precision mediump float; | |
| 937 precision mediump int; | |
| 938 varying vec2 y_texCoord; | |
| 939 varying vec2 uv_texCoord; | |
| 940 uniform sampler2D y_texture; | |
| 941 uniform sampler2D u_texture; | |
| 942 uniform sampler2D v_texture; | |
| 943 uniform sampler2D a_texture; | |
| 944 uniform float alpha; | |
| 945 uniform vec3 yuv_adj; | |
| 946 uniform mat3 cc_matrix; | |
| 947 void main() | |
| 948 { | |
| 949 float y_raw = texture2D(y_texture, y_texCoord).x; | |
| 950 float u_unsigned = texture2D(u_texture, uv_texCoord).x; | |
| 951 float v_unsigned = texture2D(v_texture, uv_texCoord).x; | |
| 952 float a_raw = texture2D(a_texture, y_texCoord).x; | |
| 953 vec3 yuv = vec3(y_raw, u_unsigned, v_unsigned) yuv_adj; | |
|
jzern
2013/02/13 19:56:14
'+' yuv_adj ?
vigneshv
2013/02/15 18:05:02
Done.
| |
| 954 vec3 rgb = cc_matrix * yuv; | |
| 955 gl_FragColor = vec4(rgb, float(1)) * (a_raw * alpha); | |
| 956 } | |
| 957 ); | |
| 958 } | |
| 959 | |
| 895 FragmentShaderColor::FragmentShaderColor() | 960 FragmentShaderColor::FragmentShaderColor() |
| 896 : m_colorLocation(-1) | 961 : m_colorLocation(-1) |
| 897 { | 962 { |
| 898 } | 963 } |
| 899 | 964 |
| 900 void FragmentShaderColor::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex) | 965 void FragmentShaderColor::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex) |
| 901 { | 966 { |
| 902 static const char* shaderUniforms[] = { | 967 static const char* shaderUniforms[] = { |
| 903 "color", | 968 "color", |
| 904 }; | 969 }; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 966 vec4 color2 = color; | 1031 vec4 color2 = color; |
| 967 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT ransform.xy; | 1032 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT ransform.xy; |
| 968 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); | 1033 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); |
| 969 float picker = abs(coord.x - coord.y); | 1034 float picker = abs(coord.x - coord.y); |
| 970 gl_FragColor = mix(color1, color2, picker) * alpha; | 1035 gl_FragColor = mix(color1, color2, picker) * alpha; |
| 971 } | 1036 } |
| 972 ); | 1037 ); |
| 973 } | 1038 } |
| 974 | 1039 |
| 975 } // namespace cc | 1040 } // namespace cc |
| OLD | NEW |