Chromium Code Reviews| Index: cc/shader.cc |
| diff --git a/cc/shader.cc b/cc/shader.cc |
| index c52423103e8b2a96b6cfdec9abc48787406d546e..d3d072a5c9f7da0831e3e3e730e2ebddd2a62c3f 100644 |
| --- a/cc/shader.cc |
| +++ b/cc/shader.cc |
| @@ -363,6 +363,26 @@ void FragmentTexOpaqueBinding::init(WebGraphicsContext3D* context, unsigned prog |
| DCHECK(m_samplerLocation != -1); |
| } |
| +FragmentTexClampOpaqueBinding::FragmentTexClampOpaqueBinding() |
| + : m_samplerLocation(-1) |
| +{ |
| +} |
| + |
| +void FragmentTexClampOpaqueBinding::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex) |
| +{ |
| + static const char* shaderUniforms[] = { |
| + "s_texture", |
| + "fragmentTexClamp", |
| + }; |
| + int locations[2]; |
| + |
| + getProgramUniformLocations(context, program, shaderUniforms, arraysize(shaderUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex); |
| + |
| + m_samplerLocation = locations[0]; |
| + m_fragmentTexClampLocation = locations[2]; |
| + DCHECK(m_samplerLocation != -1); |
| +} |
| + |
| std::string FragmentShaderRGBATexFlipVaryingAlpha::getShaderString() const |
| { |
| return SHADER( |
| @@ -420,6 +440,24 @@ std::string FragmentShaderRGBATexAlpha::getShaderString() const |
| ); |
| } |
| +std::string FragmentShaderRGBATexAlpha::getShaderString() const |
| +{ |
| + return SHADER( |
| + precision mediump float; |
| + varying vec2 v_texCoord; |
| + uniform sampler2D s_texture; |
| + uniform float alpha; |
| + uniform vec4 fragmentTexClamp; |
| + void main() |
| + { |
| + vec2 texCoord = clamp(v_texCoord, fragmentTexClamp.xy, fragmentTexClamp.zw); |
| + vec4 texColor = texture2D(s_texture, texCoord); |
| + gl_FragColor = texColor * alpha; |
| + } |
| + ); |
| +} |
| + |
| + |
| std::string FragmentShaderRGBATexVaryingAlpha::getShaderString() const |
| { |
| return SHADER( |
| @@ -466,15 +504,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 fragmentTexClamp; |
| void main() |
| { |
| - vec4 texColor = texture2D(s_texture, v_texCoord); |
| + vec2 texCoord = clamp(v_texCoord, fragmentTexClamp.xy, fragmentTexClamp.zw); |
| + vec4 texColor = texture2D(s_texture, texCoord); |
| gl_FragColor = vec4(texColor.rgb, 1.0); |
| } |
| ); |
| @@ -493,7 +533,7 @@ std::string FragmentShaderRGBATex::getShaderString() const |
| ); |
| } |
| -std::string FragmentShaderRGBATexSwizzleAlpha::getShaderString() const |
| +std::string FragmentShaderRGBATexClampSwizzleAlpha::getShaderString() const |
| { |
| return SHADER( |
| precision mediump float; |
| @@ -508,15 +548,17 @@ std::string FragmentShaderRGBATexSwizzleAlpha::getShaderString() const |
| ); |
| } |
| -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 fragmentTexClamp; |
| void main() |
| { |
| - vec4 texColor = texture2D(s_texture, v_texCoord); |
| + vec2 texCoord = clamp(v_texCoord, fragmentTexClamp.xy, fragmentTexClamp.zw); |
| + vec4 texColor = texture2D(s_texture, texCoord); |
| gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0); |
| } |
| ); |
| @@ -574,7 +616,7 @@ std::string FragmentShaderRGBATexAlphaAA::getShaderString() const |
| FragmentTexClampAlphaAABinding::FragmentTexClampAlphaAABinding() |
| : m_samplerLocation(-1) |
| , m_alphaLocation(-1) |
| - , m_fragmentTexTransformLocation(-1) |
| + , m_fragmentTexClampLocation(-1) |
| , m_edgeLocation(-1) |
| { |
| } |
| @@ -584,7 +626,7 @@ void FragmentTexClampAlphaAABinding::init(WebGraphicsContext3D* context, unsigne |
| static const char* shaderUniforms[] = { |
| "s_texture", |
| "alpha", |
| - "fragmentTexTransform", |
| + "fragmentTexClamp", |
| "edge", |
| }; |
| int locations[4]; |
| @@ -593,9 +635,9 @@ void FragmentTexClampAlphaAABinding::init(WebGraphicsContext3D* context, unsigne |
| m_samplerLocation = locations[0]; |
| m_alphaLocation = locations[1]; |
| - m_fragmentTexTransformLocation = locations[2]; |
| + m_fragmentTexClampLocation = locations[2]; |
| m_edgeLocation = locations[3]; |
| - DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1 && m_fragmentTexTransformLocation != -1 && m_edgeLocation != -1); |
| + DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1 && m_fragmentTexClampLocation != -1 && m_edgeLocation != -1); |
| } |
| std::string FragmentShaderRGBATexClampAlphaAA::getShaderString() const |
| @@ -605,11 +647,11 @@ std::string FragmentShaderRGBATexClampAlphaAA::getShaderString() const |
| varying vec2 v_texCoord; |
| uniform sampler2D s_texture; |
| uniform float alpha; |
| - uniform vec4 fragmentTexTransform; |
| + uniform vec4 fragmentTexClamp; |
| uniform vec3 edge[8]; |
| void main() |
| { |
| - vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy; |
| + vec2 texCoord = clamp(v_texCoord, fragmentTexClamp.xy, fragmentTexClamp.zw); |
|
brianderson
2013/01/29 03:03:48
Will this be more efficient?
reveman
2013/01/29 03:40:23
I'm worried it might be significantly less efficie
brianderson
2013/01/29 18:45:12
The _SAT modifier is pretty cool.
Clamp would be
|
| vec4 texColor = texture2D(s_texture, texCoord); |
| vec3 pos = vec3(gl_FragCoord.xy, 1); |
| float a0 = clamp(dot(edge[0], pos), 0.0, 1.0); |
| @@ -632,11 +674,11 @@ std::string FragmentShaderRGBATexClampSwizzleAlphaAA::getShaderString() const |
| varying vec2 v_texCoord; |
| uniform sampler2D s_texture; |
| uniform float alpha; |
| - uniform vec4 fragmentTexTransform; |
| + uniform vec4 fragmentTexClamp; |
| uniform vec3 edge[8]; |
| void main() |
| { |
| - vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy; |
| + vec2 texCoord = clamp(v_texCoord, fragmentTexClamp.xy, fragmentTexClamp.zw); |
| vec4 texColor = texture2D(s_texture, texCoord); |
| vec3 pos = vec3(gl_FragCoord.xy, 1); |
| float a0 = clamp(dot(edge[0], pos), 0.0, 1.0); |