Modified: trunk/Source/WebCore/ChangeLog (114551 => 114552)
--- trunk/Source/WebCore/ChangeLog 2012-04-18 20:23:10 UTC (rev 114551)
+++ trunk/Source/WebCore/ChangeLog 2012-04-18 20:34:42 UTC (rev 114552)
@@ -1,3 +1,19 @@
+2012-04-18 David Reveman <[email protected]>
+
+ [Chromium] Solid color shader should use premultiplied alpha.
+ https://bugs.webkit.org/show_bug.cgi?id=84215
+
+ Reviewed by Adrienne Walker.
+
+ For efficiency and consistency, expect premultiplied alpha in
+ solid color shader.
+
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::drawDebugBorderQuad):
+ (WebCore::LayerRendererChromium::drawSolidColorQuad):
+ * platform/graphics/chromium/ShaderChromium.cpp:
+ (WebCore::FragmentShaderColor::getShaderString):
+
2012-04-18 Alexey Proskuryakov <[email protected]>
[WK2] Sandbox violations prevent attaching files to gmail messages
Modified: trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (114551 => 114552)
--- trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp 2012-04-18 20:23:10 UTC (rev 114551)
+++ trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp 2012-04-18 20:34:42 UTC (rev 114552)
@@ -535,8 +535,11 @@
LayerRendererChromium::toGLMatrix(&glMatrix[0], projectionMatrix() * renderMatrix);
GLC(context(), context()->uniformMatrix4fv(program->vertexShader().matrixLocation(), 1, false, &glMatrix[0]));
- GLC(context(), context()->uniform4f(program->fragmentShader().colorLocation(), quad->color().red() / 255.0, quad->color().green() / 255.0, quad->color().blue() / 255.0, quad->color().alpha() / 255.0));
+ const Color& color = quad->color();
+ float alpha = color.alpha() / 255.0;
+ GLC(context(), context()->uniform4f(program->fragmentShader().colorLocation(), (color.red() / 255.0) * alpha, (color.green() / 255.0) * alpha, (color.blue() / 255.0) * alpha, alpha));
+
GLC(context(), context()->lineWidth(quad->width()));
// The indices for the line are stored in the same array as the triangle indices.
@@ -624,8 +627,9 @@
tileTransform.translate(tileRect.x() + tileRect.width() / 2.0, tileRect.y() + tileRect.height() / 2.0);
const Color& color = quad->color();
+ float alpha = color.alpha() / 255.0;
- GLC(context(), context()->uniform4f(solidColorProgram->fragmentShader().colorLocation(), color.red() / 255.0, color.green() / 255.0, color.blue() / 255.0, color.alpha() / 255.0));
+ GLC(context(), context()->uniform4f(solidColorProgram->fragmentShader().colorLocation(), (color.red() / 255.0) * alpha, (color.green() / 255.0) * alpha, (color.blue() / 255.0) * alpha, alpha));
float opacity = quad->opacity();
drawTexturedQuad(tileTransform,
Modified: trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp (114551 => 114552)
--- trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp 2012-04-18 20:23:10 UTC (rev 114551)
+++ trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp 2012-04-18 20:34:42 UTC (rev 114552)
@@ -720,7 +720,7 @@
uniform vec4 color;
void main()
{
- gl_FragColor = vec4(color.xyz * color.w, color.w);
+ gl_FragColor = color;
}
);
}