Closed Bug 1067190 Opened 10 years ago Closed 8 years ago

Gracefully handle invalid matrices in the GFX backend

Categories

(Firefox Graveyard :: Shumway, defect, P2)

defect

Tracking

(Not tracked)

RESOLVED INCOMPLETE

People

(Reporter: till, Assigned: mbx)

References

()

Details

Attachments

(1 file)

86 bytes, application/x-shockwave-flash
Details
In github issue #1682, the problem is that a shape (the first one, with ID 1) contains a matrix with all fields 0. SVGMatrix throws an exception when calling .inverse() in the CanvasRenderingContext2D#fill polyfill.

I guess we'll have to try/catch that error - or calculate the matrix's determinant ourselves.

The question is what to do with non-invertible matrices. Do we just pretend they're identity matrices, or fall back to a plain-color fill?
Attached file gradient.swf
Created PR #1714[1] with a WIP fix.

That works insofar as it makes the SWF in #1682 functionally work.

It's not correct, though: Flash seems to be using a matrix that scales the gradient up tremendously, causing only a tiny part of it to be displayed. Attached is a SWF with an example gradient. Decompiling it with swfmill and testing various values for the positions and colors of the GradientItems is pretty interesting.

mbx, maybe you have an idea what's going on here.

[1]: https://github.com/mozilla/shumway/pull/1714
Flags: needinfo?(mbebenita)
Assignee: nobody → mbebenita
Blocks: shumway-m3
Priority: -- → P2
Blocks: shumway-m4
No longer blocks: shumway-m3
What we have now seems to work pretty well, so we don't need to revisit this for our initial release.
Blocks: shumway-later
No longer blocks: shumway-m4
Flags: needinfo?(mbebenita)
Product: Firefox → Firefox Graveyard
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → INCOMPLETE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: