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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "cc/shader.h" | 7 #include "cc/shader.h" |
8 | 8 |
9 #include <public/WebGraphicsContext3D.h> | 9 #include <public/WebGraphicsContext3D.h> |
10 #include <wtf/StdLibExtras.h> | 10 #include <wtf/StdLibExtras.h> |
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 { | 751 { |
752 } | 752 } |
753 | 753 |
754 void FragmentShaderYUVVideo::init(WebGraphicsContext3D* context, unsigned progra
m, bool usingBindUniform, int* baseUniformIndex) | 754 void FragmentShaderYUVVideo::init(WebGraphicsContext3D* context, unsigned progra
m, bool usingBindUniform, int* baseUniformIndex) |
755 { | 755 { |
756 static const char* shaderUniforms[] = { | 756 static const char* shaderUniforms[] = { |
757 "y_texture", | 757 "y_texture", |
758 "u_texture", | 758 "u_texture", |
759 "v_texture", | 759 "v_texture", |
760 "alpha", | 760 "alpha", |
761 "cc_matrix", | 761 "matrix", |
762 "yuv_adj", | 762 "yuv_adj", |
763 }; | 763 }; |
764 int locations[6]; | 764 int locations[6]; |
765 | 765 |
766 getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGT
H(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, bas
eUniformIndex); | 766 getProgramUniformLocations(context, program, shaderUniforms, WTF_ARRAY_LENGT
H(shaderUniforms), WTF_ARRAY_LENGTH(locations), locations, usingBindUniform, bas
eUniformIndex); |
767 | 767 |
768 m_yTextureLocation = locations[0]; | 768 m_yTextureLocation = locations[0]; |
769 m_uTextureLocation = locations[1]; | 769 m_uTextureLocation = locations[1]; |
770 m_vTextureLocation = locations[2]; | 770 m_vTextureLocation = locations[2]; |
771 m_alphaLocation = locations[3]; | 771 m_alphaLocation = locations[3]; |
772 m_ccMatrixLocation = locations[4]; | 772 m_ccMatrixLocation = locations[4]; |
773 m_yuvAdjLocation = locations[5]; | 773 m_yuvAdjLocation = locations[5]; |
774 | 774 |
775 ASSERT(m_yTextureLocation != -1 && m_uTextureLocation != -1 && m_vTextureLoc
ation != -1 | 775 ASSERT(m_yTextureLocation != -1 && m_uTextureLocation != -1 && m_vTextureLoc
ation != -1 |
776 && m_alphaLocation != -1 && m_ccMatrixLocation != -1 && m_yuvAdjLocat
ion != -1); | 776 && m_alphaLocation != -1 && m_ccMatrixLocation != -1 && m_yuvAdjLocat
ion != -1); |
777 } | 777 } |
778 | 778 |
779 std::string FragmentShaderYUVVideo::getShaderString() const | 779 std::string FragmentShaderYUVVideo::getShaderString() const |
780 { | 780 { |
781 return SHADER( | 781 return SHADER( |
782 precision mediump float; | 782 precision mediump float; |
783 precision mediump int; | 783 precision mediump int; |
784 varying vec2 y_texCoord; | 784 varying vec2 y_texCoord; |
785 varying vec2 uv_texCoord; | 785 varying vec2 uv_texCoord; |
786 uniform sampler2D y_texture; | 786 uniform sampler2D y_texture; |
787 uniform sampler2D u_texture; | 787 uniform sampler2D u_texture; |
788 uniform sampler2D v_texture; | 788 uniform sampler2D v_texture; |
789 uniform float alpha; | 789 uniform float alpha; |
790 uniform vec3 yuv_adj; | 790 uniform vec3 yuv_adj; |
791 uniform mat3 cc_matrix; | 791 uniform mat3 matrix; |
792 void main() | 792 void main() |
793 { | 793 { |
794 float y_raw = texture2D(y_texture, y_texCoord).x; | 794 float y_raw = texture2D(y_texture, y_texCoord).x; |
795 float u_unsigned = texture2D(u_texture, uv_texCoord).x; | 795 float u_unsigned = texture2D(u_texture, uv_texCoord).x; |
796 float v_unsigned = texture2D(v_texture, uv_texCoord).x; | 796 float v_unsigned = texture2D(v_texture, uv_texCoord).x; |
797 vec3 yuv = vec3(y_raw, u_unsigned, v_unsigned) + yuv_adj; | 797 vec3 yuv = vec3(y_raw, u_unsigned, v_unsigned) + yuv_adj; |
798 vec3 rgb = cc_matrix * yuv; | 798 vec3 rgb = matrix * yuv; |
799 gl_FragColor = vec4(rgb, float(1)) * alpha; | 799 gl_FragColor = vec4(rgb, float(1)) * alpha; |
800 } | 800 } |
801 ); | 801 ); |
802 } | 802 } |
803 | 803 |
804 FragmentShaderColor::FragmentShaderColor() | 804 FragmentShaderColor::FragmentShaderColor() |
805 : m_colorLocation(-1) | 805 : m_colorLocation(-1) |
806 { | 806 { |
807 } | 807 } |
808 | 808 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 vec4 color2 = color; | 875 vec4 color2 = color; |
876 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT
ransform.xy; | 876 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT
ransform.xy; |
877 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); | 877 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); |
878 float picker = abs(coord.x - coord.y); | 878 float picker = abs(coord.x - coord.y); |
879 gl_FragColor = mix(color1, color2, picker) * alpha; | 879 gl_FragColor = mix(color1, color2, picker) * alpha; |
880 } | 880 } |
881 ); | 881 ); |
882 } | 882 } |
883 | 883 |
884 } // namespace cc | 884 } // namespace cc |
OLD | NEW |