| Index: Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp
|
| ===================================================================
|
| --- Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp (revision 92714)
|
| +++ Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp (working copy)
|
| @@ -150,29 +150,29 @@
|
| );
|
| }
|
|
|
| -VertexShaderQuad::VertexShaderQuad()
|
| +VertexShaderTile::VertexShaderTile()
|
| : m_matrixLocation(-1)
|
| - , m_texTransformLocation(-1)
|
| , m_pointLocation(-1)
|
| + , m_vertexTexTransformLocation(-1)
|
| {
|
| }
|
|
|
| -void VertexShaderQuad::init(GraphicsContext3D* context, unsigned program)
|
| +void VertexShaderTile::init(GraphicsContext3D* context, unsigned program)
|
| {
|
| m_matrixLocation = context->getUniformLocation(program, "matrix");
|
| - m_texTransformLocation = context->getUniformLocation(program, "texTransform");
|
| m_pointLocation = context->getUniformLocation(program, "point");
|
| - ASSERT(m_matrixLocation != -1 && m_texTransformLocation != -1 && m_pointLocation != -1);
|
| + m_vertexTexTransformLocation = context->getUniformLocation(program, "vertexTexTransform");
|
| + ASSERT(m_matrixLocation != -1 && m_pointLocation != -1 && m_vertexTexTransformLocation != -1);
|
| }
|
|
|
| -String VertexShaderQuad::getShaderString() const
|
| +String VertexShaderTile::getShaderString() const
|
| {
|
| return SHADER(
|
| attribute vec4 a_position;
|
| attribute vec2 a_texCoord;
|
| uniform mat4 matrix;
|
| - uniform vec4 texTransform;
|
| uniform vec2 point[4];
|
| + uniform vec4 vertexTexTransform;
|
| varying vec2 v_texCoord;
|
| void main()
|
| {
|
| @@ -183,7 +183,7 @@
|
| pos.xy += (a_texCoord.x * a_texCoord.y) * point[2];
|
| pos.xy += (complement.x * a_texCoord.y) * point[3];
|
| gl_Position = matrix * pos;
|
| - v_texCoord = pos.xy * texTransform.zw + texTransform.xy;
|
| + v_texCoord = pos.xy * vertexTexTransform.zw + vertexTexTransform.xy;
|
| }
|
| );
|
| }
|
| @@ -247,6 +247,70 @@
|
| );
|
| }
|
|
|
| +FragmentTexAlphaAABinding::FragmentTexAlphaAABinding()
|
| + : m_samplerLocation(-1)
|
| + , m_alphaLocation(-1)
|
| + , m_fragmentTexTransformLocation(-1)
|
| + , m_edgeLocation(-1)
|
| +{
|
| +}
|
| +
|
| +void FragmentTexAlphaAABinding::init(GraphicsContext3D* context, unsigned program)
|
| +{
|
| + m_samplerLocation = context->getUniformLocation(program, "s_texture");
|
| + m_alphaLocation = context->getUniformLocation(program, "alpha");
|
| + m_fragmentTexTransformLocation = context->getUniformLocation(program, "fragmentTexTransform");
|
| + m_edgeLocation = context->getUniformLocation(program, "edge");
|
| +
|
| + ASSERT(m_samplerLocation != -1 && m_alphaLocation != -1 && m_fragmentTexTransformLocation != -1 && m_edgeLocation != -1);
|
| +}
|
| +
|
| +String FragmentShaderRGBATexAlphaAA::getShaderString() const
|
| +{
|
| + return SHADER(
|
| + precision mediump float;
|
| + varying vec2 v_texCoord;
|
| + uniform sampler2D s_texture;
|
| + uniform float alpha;
|
| + uniform vec4 fragmentTexTransform;
|
| + uniform vec3 edge[4];
|
| + void main()
|
| + {
|
| + vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy;
|
| + vec4 texColor = texture2D(s_texture, texCoord);
|
| + vec3 pos = vec3(gl_FragCoord.xy, 1);
|
| + float a0 = clamp(dot(edge[0], pos), 0.0, 1.0);
|
| + float a1 = clamp(dot(edge[1], pos), 0.0, 1.0);
|
| + float a2 = clamp(dot(edge[2], pos), 0.0, 1.0);
|
| + float a3 = clamp(dot(edge[3], pos), 0.0, 1.0);
|
| + gl_FragColor = texColor * alpha * min(a0, a2) * min(a1, a3);
|
| + }
|
| + );
|
| +}
|
| +
|
| +String FragmentShaderRGBATexSwizzleAlphaAA::getShaderString() const
|
| +{
|
| + return SHADER(
|
| + precision mediump float;
|
| + varying vec2 v_texCoord;
|
| + uniform sampler2D s_texture;
|
| + uniform float alpha;
|
| + uniform vec4 fragmentTexTransform;
|
| + uniform vec3 edge[4];
|
| + void main()
|
| + {
|
| + vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy;
|
| + vec4 texColor = texture2D(s_texture, texCoord);
|
| + vec3 pos = vec3(gl_FragCoord.xy, 1);
|
| + float a0 = clamp(dot(edge[0], pos), 0.0, 1.0);
|
| + float a1 = clamp(dot(edge[1], pos), 0.0, 1.0);
|
| + float a2 = clamp(dot(edge[2], pos), 0.0, 1.0);
|
| + float a3 = clamp(dot(edge[3], pos), 0.0, 1.0);
|
| + gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha * min(a0, a2) * min(a1, a3);
|
| + }
|
| + );
|
| +}
|
| +
|
| FragmentShaderRGBATexAlphaMask::FragmentShaderRGBATexAlphaMask()
|
| : m_samplerLocation(-1)
|
| , m_maskSamplerLocation(-1)
|
|
|