| Index: cc/shader.cc
|
| diff --git a/cc/shader.cc b/cc/shader.cc
|
| index c52423103e8b2a96b6cfdec9abc48787406d546e..89474299e4fb1a569870a5014feef9f7056f36a3 100644
|
| --- a/cc/shader.cc
|
| +++ b/cc/shader.cc
|
| @@ -345,6 +345,31 @@ void FragmentTexAlphaBinding::init(WebGraphicsContext3D* context, unsigned progr
|
| DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1);
|
| }
|
|
|
| +FragmentTexClampAlphaBinding::FragmentTexClampAlphaBinding()
|
| + : m_samplerLocation(-1)
|
| + , m_alphaLocation(-1)
|
| + , m_fragmentTexTransformLocation(-1)
|
| +{
|
| +}
|
| +
|
| +void FragmentTexClampAlphaBinding::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
|
| +{
|
| + static const char* shaderUniforms[] = {
|
| + "s_texture",
|
| + "alpha",
|
| + "fragmentTexTransform",
|
| + };
|
| + int locations[3];
|
| +
|
| + getProgramUniformLocations(context, program, shaderUniforms, arraysize(shaderUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex);
|
| +
|
| + m_samplerLocation = locations[0];
|
| + m_alphaLocation = locations[1];
|
| + m_fragmentTexTransformLocation = locations[2];
|
| + DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1);
|
| +}
|
| +
|
| +
|
| FragmentTexOpaqueBinding::FragmentTexOpaqueBinding()
|
| : m_samplerLocation(-1)
|
| {
|
| @@ -363,6 +388,27 @@ void FragmentTexOpaqueBinding::init(WebGraphicsContext3D* context, unsigned prog
|
| DCHECK(m_samplerLocation != -1);
|
| }
|
|
|
| +FragmentTexClampOpaqueBinding::FragmentTexClampOpaqueBinding()
|
| + : m_samplerLocation(-1)
|
| + , m_fragmentTexTransformLocation(-1)
|
| +{
|
| +}
|
| +
|
| +void FragmentTexClampOpaqueBinding::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
|
| +{
|
| + static const char* shaderUniforms[] = {
|
| + "s_texture",
|
| + "fragmentTexTransform",
|
| + };
|
| + int locations[2];
|
| +
|
| + getProgramUniformLocations(context, program, shaderUniforms, arraysize(shaderUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex);
|
| +
|
| + m_samplerLocation = locations[0];
|
| + m_fragmentTexTransformLocation = locations[1];
|
| + DCHECK(m_samplerLocation != -1);
|
| +}
|
| +
|
| std::string FragmentShaderRGBATexFlipVaryingAlpha::getShaderString() const
|
| {
|
| return SHADER(
|
| @@ -420,6 +466,24 @@ std::string FragmentShaderRGBATexAlpha::getShaderString() const
|
| );
|
| }
|
|
|
| +std::string FragmentShaderRGBATexClampAlpha::getShaderString() const
|
| +{
|
| + return SHADER(
|
| + precision mediump float;
|
| + varying vec2 v_texCoord;
|
| + uniform sampler2D s_texture;
|
| + uniform float alpha;
|
| + uniform vec4 fragmentTexTransform;
|
| + void main()
|
| + {
|
| + vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy;
|
| + vec4 texColor = texture2D(s_texture, texCoord);
|
| + gl_FragColor = texColor * alpha;
|
| + }
|
| + );
|
| +}
|
| +
|
| +
|
| std::string FragmentShaderRGBATexVaryingAlpha::getShaderString() const
|
| {
|
| return SHADER(
|
| @@ -466,15 +530,17 @@ std::string FragmentShaderRGBATexRectVaryingAlpha::getShaderString() const
|
| "}\n";
|
| }
|
|
|
| -std::string FragmentShaderRGBATexOpaque::getShaderString() const
|
| +std::string FragmentShaderRGBATexClampOpaque::getShaderString() const
|
| {
|
| return SHADER(
|
| precision mediump float;
|
| varying vec2 v_texCoord;
|
| uniform sampler2D s_texture;
|
| + uniform vec4 fragmentTexTransform;
|
| void main()
|
| {
|
| - vec4 texColor = texture2D(s_texture, v_texCoord);
|
| + vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy;
|
| + vec4 texColor = texture2D(s_texture, texCoord);
|
| gl_FragColor = vec4(texColor.rgb, 1.0);
|
| }
|
| );
|
| @@ -493,30 +559,34 @@ std::string FragmentShaderRGBATex::getShaderString() const
|
| );
|
| }
|
|
|
| -std::string FragmentShaderRGBATexSwizzleAlpha::getShaderString() const
|
| +std::string FragmentShaderRGBATexClampSwizzleAlpha::getShaderString() const
|
| {
|
| return SHADER(
|
| precision mediump float;
|
| varying vec2 v_texCoord;
|
| uniform sampler2D s_texture;
|
| uniform float alpha;
|
| + uniform vec4 fragmentTexTransform;
|
| void main()
|
| {
|
| - vec4 texColor = texture2D(s_texture, v_texCoord);
|
| + vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy;
|
| + vec4 texColor = texture2D(s_texture, texCoord);
|
| gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha;
|
| }
|
| );
|
| }
|
|
|
| -std::string FragmentShaderRGBATexSwizzleOpaque::getShaderString() const
|
| +std::string FragmentShaderRGBATexClampSwizzleOpaque::getShaderString() const
|
| {
|
| return SHADER(
|
| precision mediump float;
|
| varying vec2 v_texCoord;
|
| uniform sampler2D s_texture;
|
| + uniform vec4 fragmentTexTransform;
|
| void main()
|
| {
|
| - vec4 texColor = texture2D(s_texture, v_texCoord);
|
| + vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy;
|
| + vec4 texColor = texture2D(s_texture, texCoord);
|
| gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0);
|
| }
|
| );
|
|
|