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

Unified Diff: cc/shader.cc

Issue 12086036: cc: Clamp texture coordinates in all tile shaders (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@snowscale
Patch Set: Created 7 years, 11 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/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);

Powered by Google App Engine
This is Rietveld 408576698