зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1203376 - Honor filter region settings for lighting filters. r=mstange
--HG-- extra : rebase_source : adecead97d734b9bb9b5b104b88edf81c82a13a4
This commit is contained in:
Родитель
faf361396a
Коммит
7893b08d5b
|
@ -536,6 +536,27 @@ IsTransferFilterType(FilterType aType)
|
|||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
HasUnboundedOutputRegion(FilterType aType)
|
||||
{
|
||||
if (IsTransferFilterType(aType)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (aType) {
|
||||
case FilterType::COLOR_MATRIX:
|
||||
case FilterType::POINT_DIFFUSE:
|
||||
case FilterType::SPOT_DIFFUSE:
|
||||
case FilterType::DISTANT_DIFFUSE:
|
||||
case FilterType::POINT_SPECULAR:
|
||||
case FilterType::SPOT_SPECULAR:
|
||||
case FilterType::DISTANT_SPECULAR:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* static */
|
||||
already_AddRefed<FilterNode>
|
||||
FilterNodeD2D1::Create(ID2D1DeviceContext *aDC, FilterType aType)
|
||||
|
@ -556,7 +577,7 @@ FilterNodeD2D1::Create(ID2D1DeviceContext *aDC, FilterType aType)
|
|||
|
||||
RefPtr<FilterNodeD2D1> filter = new FilterNodeD2D1(effect, aType);
|
||||
|
||||
if (IsTransferFilterType(aType) || aType == FilterType::COLOR_MATRIX) {
|
||||
if (HasUnboundedOutputRegion(aType)) {
|
||||
// These filters can produce non-transparent output from transparent
|
||||
// input pixels, and we want them to have an unbounded output region.
|
||||
filter = new FilterNodeExtendInputAdapterD2D1(aDC, filter, aType);
|
||||
|
|
|
@ -3340,7 +3340,7 @@ template<typename LightType, typename LightingType>
|
|||
IntRect
|
||||
FilterNodeLightingSoftware<LightType, LightingType>::GetOutputRectInRect(const IntRect& aRect)
|
||||
{
|
||||
return GetInputRectInRect(IN_LIGHTING_IN, aRect);
|
||||
return aRect;
|
||||
}
|
||||
|
||||
Point3D
|
||||
|
@ -3482,7 +3482,7 @@ FilterNodeLightingSoftware<LightType, LightingType>::DoRender(const IntRect& aRe
|
|||
|
||||
RefPtr<DataSourceSurface> input =
|
||||
GetInputDataSourceSurface(IN_LIGHTING_IN, srcRect, CAN_HANDLE_A8,
|
||||
EDGE_MODE_DUPLICATE);
|
||||
EDGE_MODE_NONE);
|
||||
|
||||
if (!input) {
|
||||
return nullptr;
|
||||
|
|
|
@ -1232,9 +1232,6 @@ FilterNodeGraphFromDescription(DrawTarget* aDT,
|
|||
{
|
||||
const nsTArray<FilterPrimitiveDescription>& primitives = aFilter.mPrimitives;
|
||||
|
||||
Rect resultNeededRect(aResultNeededRect);
|
||||
resultNeededRect.RoundOut();
|
||||
|
||||
RefPtr<FilterCachedColorModels> sourceFilters[4];
|
||||
nsTArray<RefPtr<FilterCachedColorModels> > primitiveFilters;
|
||||
|
||||
|
@ -1407,6 +1404,9 @@ ResultChangeRegionForPrimitive(const FilterPrimitiveDescription& aDescription,
|
|||
|
||||
case PrimitiveType::ConvolveMatrix:
|
||||
{
|
||||
if (atts.GetUint(eConvolveMatrixEdgeMode) != EDGE_MODE_NONE) {
|
||||
return aDescription.PrimitiveSubregion();
|
||||
}
|
||||
Size kernelUnitLength = atts.GetSize(eConvolveMatrixKernelUnitLength);
|
||||
IntSize kernelSize = atts.GetIntSize(eConvolveMatrixKernelSize);
|
||||
IntPoint target = atts.GetIntPoint(eConvolveMatrixTarget);
|
||||
|
@ -1603,6 +1603,8 @@ FilterSupport::PostFilterExtentsForPrimitive(const FilterPrimitiveDescription& a
|
|||
|
||||
case PrimitiveType::Turbulence:
|
||||
case PrimitiveType::Image:
|
||||
case PrimitiveType::DiffuseLighting:
|
||||
case PrimitiveType::SpecularLighting:
|
||||
{
|
||||
return aDescription.PrimitiveSubregion();
|
||||
}
|
||||
|
|
|
@ -437,7 +437,8 @@ public:
|
|||
|
||||
/**
|
||||
* Computes the region that changes in the filter output due to a change in
|
||||
* input.
|
||||
* input. This is primarily needed when an individual piece of content inside
|
||||
* a filtered container element changes.
|
||||
*/
|
||||
static nsIntRegion
|
||||
ComputeResultChangeRegion(const FilterDescription& aFilter,
|
||||
|
|
|
@ -3,5 +3,14 @@
|
|||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>
|
||||
<image width='100' height='100' xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG6SURBVHhe7d3BbcJAGAXhJYXQg32mCV8p2vRAEb4mREoJe/g2GiTf55/hiRu+jTG+P08fxMAXwhHGn4GCYF+FghQEM4DhtJCCYAYwnBZSEMwAhtNCCoIZwHBaSEEwAxhOCykIZgDDaSEFwQxgOC2kIJgBDGfqQh6Px9j3HTtxLZypQZ7P5ziOYy0DGO3UIPf7fWzbhp24Fs7UIGudbtIWBOtSkIJgBjCcFlIQzACG00IKghnAcFpIQTADGE4LKQhmAMNpIQXBDGA4LaQgmAEMp4UUBDOA4bSQgmAGMJwWUhDMAIbTQgqCGcBwWkhBMAMYTgspCGYAw2khBcEMYDgtpCCYAQynhRQEM4DhtJCCYAYwnBZSEMwAhtNCCoIZwHBaSEEwAxhOCykIZgDDaSEFwQxgOC2kIJgBDKeFFAQzgOG0kIJgBjCcFlIQzACG00IKghnAcFrIfw7yfr/H6/XCTlwL5/bBnfY+9d8/47+ua5znuZYFiHZqEOiuZVH6DcHSFaQgmAEMp4UUBDOA4bSQgmAGMJwWUhDMAIbTQgqCGcBwWkhBMAMYTgspCGYAw2khBcEMYDgtBAvyA+wPEw79WuphAAAAAElFTkSuQmCC"/>
|
||||
<image width='100' height='100'
|
||||
xlink:href="data:image/png;base64,
|
||||
iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
|
||||
WXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3wkbDDIilL5aRAAAAB1pVFh0Q29tbWVudAAAAAAAQ3Jl
|
||||
YXRlZCB3aXRoIEdJTVBkLmUHAAAA9UlEQVR42u3csRHDIBBFwbPHddADiqmEduhFlSiWelBOSirX
|
||||
YFsB49lXAMHf4DIeEXGFpqi1Fk8zzFPOGchsAQEiIEAEBIiAABEQIAIiIEAEBIiAAPmgUkosy2LV
|
||||
H3rd+VitNXrvse+7ZWcASSlFSsmqbggQAQEiIAICRECACAgQAQEiIEAERECACAgQAQEiIEAERECA
|
||||
CAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAQEiIEAERECACAgQAfnHbv3Z+jzP6L1bdRaQdV1j
|
||||
jGHVWUC2bbOoGwJEQIAIiIAAERAgAgJEQIAIiIAAERAg+qrjOOINBcEbJFN4kugAAAAASUVORK5C
|
||||
YII="/>
|
||||
</svg>
|
||||
|
|
До Ширина: | Высота: | Размер: 1013 B После Ширина: | Высота: | Размер: 834 B |
|
@ -0,0 +1,11 @@
|
|||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="600px" height="300px">
|
||||
|
||||
<rect x="50" y="50" width="200" height="200" fill="black" />
|
||||
|
||||
<rect x="340" y="40" width="220" height="220" fill="grey" />
|
||||
<rect x="350" y="50" width="200" height="200" fill="white" />
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 387 B |
|
@ -0,0 +1,30 @@
|
|||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="600px" height="300px">
|
||||
<!-- From https://bugzilla.mozilla.org/show_bug.cgi?id=1203376 -->
|
||||
<defs>
|
||||
<!-- the filter lights are intentionally chosen to fill the entire area with
|
||||
a solid color since we're only testing the extents of the filter region
|
||||
-->
|
||||
<filter id="diffuse" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<!-- gives a black filter region -->
|
||||
<feDiffuseLighting lighting-color="black">
|
||||
<feDistantLight />
|
||||
</feDiffuseLighting>
|
||||
</filter>
|
||||
|
||||
<filter id="specular" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<!-- gives a white filter region -->
|
||||
<feSpecularLighting lighting-color="white" specularConstant="100">
|
||||
<feDistantLight elevation="90"/>
|
||||
</feSpecularLighting>
|
||||
</filter>
|
||||
</defs>
|
||||
|
||||
<rect x="100" y="100" width="100" height="100" filter="url(#diffuse)" />
|
||||
|
||||
<rect x="340" y="40" width="220" height="220" fill="grey" />
|
||||
<rect x="400" y="100" width="100" height="100" filter="url(#specular)" />
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 1.1 KiB |
|
@ -109,10 +109,12 @@ fuzzy(2,500) == feDisplacementMap-colour-01.svg feDisplacementMap-colour-01-ref.
|
|||
== feTile-large-02.svg feTile-large-02-ref.svg
|
||||
== feTile-outside-01.svg feTile-outside-01-ref.svg
|
||||
|
||||
fuzzy(1,119) == feDiffuseLighting-1.svg feDiffuseLighting-1-ref.svg
|
||||
fuzzy(1,217) == feDiffuseLighting-1.svg feDiffuseLighting-1-ref.svg
|
||||
|
||||
fuzzy(2,2659) skip-if(d2d) == feSpecularLighting-1.svg feSpecularLighting-1-ref.svg
|
||||
|
||||
== filter-lighting-region.svg filter-lighting-region-ref.svg
|
||||
|
||||
== fePointLight-zoomed-page.svg fePointLight-zoomed-page-ref.svg
|
||||
|
||||
== feTurbulence-offset.svg feTurbulence-offset-ref.svg
|
||||
|
|
Загрузка…
Ссылка в новой задаче