summaryrefslogtreecommitdiffstats
path: root/cc/shader.cc
diff options
context:
space:
mode:
authorjscholler@chromium.org <jscholler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-15 20:17:18 +0000
committerjscholler@chromium.org <jscholler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-15 20:17:18 +0000
commit4c91aec43f77577557acd1cf5f9964239e7e54da (patch)
tree48580e9b10a3251a96c2628f7fbe44a7dbf56b02 /cc/shader.cc
parentc5f8c9afdc05877f24bfdf050f49b4301b9ee6b3 (diff)
downloadchromium_src-4c91aec43f77577557acd1cf5f9964239e7e54da.zip
chromium_src-4c91aec43f77577557acd1cf5f9964239e7e54da.tar.gz
chromium_src-4c91aec43f77577557acd1cf5f9964239e7e54da.tar.bz2
Adding support for per vertex opacity on textured layer
BUG=165509 Review URL: https://chromiumcodereview.appspot.com/11570027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173310 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/shader.cc')
-rw-r--r--cc/shader.cc48
1 files changed, 35 insertions, 13 deletions
diff --git a/cc/shader.cc b/cc/shader.cc
index 074f41a..1aa9a3e 100644
--- a/cc/shader.cc
+++ b/cc/shader.cc
@@ -136,6 +136,7 @@ std::string VertexShaderPos::getShaderString() const
VertexShaderPosTexTransform::VertexShaderPosTexTransform()
: m_matrixLocation(-1)
, m_texTransformLocation(-1)
+ , m_vertexOpacityLocation(-1)
{
}
@@ -144,14 +145,16 @@ void VertexShaderPosTexTransform::init(WebGraphicsContext3D* context, unsigned p
static const char* shaderUniforms[] = {
"matrix",
"texTransform",
+ "opacity",
};
- int locations[2];
+ int locations[3];
getProgramUniformLocations(context, program, shaderUniforms, arraysize(shaderUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex);
m_matrixLocation = locations[0];
m_texTransformLocation = locations[1];
- DCHECK(m_matrixLocation != -1 && m_texTransformLocation != -1);
+ m_vertexOpacityLocation = locations[2];
+ DCHECK(m_matrixLocation != -1 && m_texTransformLocation != -1 && m_vertexOpacityLocation != -1);
}
std::string VertexShaderPosTexTransform::getShaderString() const
@@ -162,11 +165,15 @@ std::string VertexShaderPosTexTransform::getShaderString() const
attribute float a_index;
uniform mat4 matrix[8];
uniform vec4 texTransform[8];
+ uniform float opacity[32];
varying vec2 v_texCoord;
+ varying float v_alpha;
void main()
{
- gl_Position = matrix[int(a_index)] * a_position;
- v_texCoord = a_texCoord * texTransform[int(a_index)].zw + texTransform[int(a_index)].xy;
+ gl_Position = matrix[int(a_index * 0.25)] * a_position;
+ vec4 texTrans = texTransform[int(a_index * 0.25)];
+ v_texCoord = a_texCoord * texTrans.zw + texTrans.xy;
+ v_alpha = opacity[int(a_index)];
}
);
}
@@ -356,17 +363,17 @@ void FragmentTexOpaqueBinding::init(WebGraphicsContext3D* context, unsigned prog
DCHECK(m_samplerLocation != -1);
}
-std::string FragmentShaderRGBATexFlipAlpha::getShaderString() const
+std::string FragmentShaderRGBATexFlipVaryingAlpha::getShaderString() const
{
return SHADER(
precision mediump float;
varying vec2 v_texCoord;
+ varying float v_alpha;
uniform sampler2D s_texture;
- uniform float alpha;
void main()
{
vec4 texColor = texture2D(s_texture, vec2(v_texCoord.x, 1.0 - v_texCoord.y));
- gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha;
+ gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * v_alpha;
}
);
}
@@ -413,34 +420,49 @@ std::string FragmentShaderRGBATexAlpha::getShaderString() const
);
}
-std::string FragmentShaderRGBATexRectFlipAlpha::getShaderString() const
+std::string FragmentShaderRGBATexVaryingAlpha::getShaderString() const
+{
+ return SHADER(
+ precision mediump float;
+ varying vec2 v_texCoord;
+ varying float v_alpha;
+ uniform sampler2D s_texture;
+ void main()
+ {
+ vec4 texColor = texture2D(s_texture, v_texCoord);
+ gl_FragColor = texColor * v_alpha;
+ }
+ );
+}
+
+std::string FragmentShaderRGBATexRectFlipVaryingAlpha::getShaderString() const
{
// This must be paired with VertexShaderPosTexTransform to pick up the texTransform uniform.
// The necessary #extension preprocessing directive breaks the SHADER and SHADER0 macros.
return "#extension GL_ARB_texture_rectangle : require\n"
"precision mediump float;\n"
"varying vec2 v_texCoord;\n"
+ "varying float v_alpha;\n"
"uniform vec4 texTransform;\n"
"uniform sampler2DRect s_texture;\n"
- "uniform float alpha;\n"
"void main()\n"
"{\n"
" vec4 texColor = texture2DRect(s_texture, vec2(v_texCoord.x, texTransform.w - v_texCoord.y));\n"
- " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha;\n"
+ " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * v_alpha;\n"
"}\n";
}
-std::string FragmentShaderRGBATexRectAlpha::getShaderString() const
+std::string FragmentShaderRGBATexRectVaryingAlpha::getShaderString() const
{
return "#extension GL_ARB_texture_rectangle : require\n"
"precision mediump float;\n"
"varying vec2 v_texCoord;\n"
+ "varying float v_alpha;\n"
"uniform sampler2DRect s_texture;\n"
- "uniform float alpha;\n"
"void main()\n"
"{\n"
" vec4 texColor = texture2DRect(s_texture, v_texCoord);\n"
- " gl_FragColor = texColor * alpha;\n"
+ " gl_FragColor = texColor * v_alpha;\n"
"}\n";
}