Commit Graph

114 Commits

Author SHA1 Message Date
Markus Stange
9cd785e1c4 Bug 1578045 - Correctly return zero vertices if clipping plane 0 or 2 clip away the entire polygon. r=kip
This fixes a bug that was introduced three years ago in bug 1268854.
What happened was that the final pass over the polygon assumed that the current
polygon was living in plane[0]. But due to the double buffering, the "current"
polygon alternates between plane[0] and plane[1]. And bug 1268854 had introduced
an early exit so that we could hit the final pass at a time where the current,
now empty, polygon was in plane[1]. So we would incorrectly treat all 32 points
in plane[0] as part of the final polygon.

This bug was responsible for intermittently unreasonable numbers in CompositorOGL's fill
rate / overdraw overlay, and, since changeset cc84a0e9d5ddde198422f4f11ab6bf85f631d5f0,
also caused CompositorOGL to execute unnecessary draw calls.

Differential Revision: https://phabricator.services.mozilla.com/D44312

--HG--
extra : moz-landing-system : lando
2019-09-06 17:12:06 +00:00
Botond Ballo
629b3580ff Bug 1565525 - Modify MatrixMessage to carry a Maybe<Matrix>, so that a transform can be cleared by sending Nothing. r=hsivonen
Depends on D42564

Differential Revision: https://phabricator.services.mozilla.com/D42565

--HG--
extra : moz-landing-system : lando
2019-08-20 06:37:05 +00:00
Botond Ballo
4232079a25 Bug 1565525 - Add helper functions to make working with Maybe<Matrix> easier. r=hsivonen
Differential Revision: https://phabricator.services.mozilla.com/D42564

--HG--
extra : moz-landing-system : lando
2019-08-20 06:36:01 +00:00
Kagami Sascha Rosylight
8d91017fdb Bug 928150: Implement canvas getTransform() and setTransform() r=bzbarsky
Adds getTransform() and setTransform() to CanvasRenderingContext2D.

Differential Revision: https://phabricator.services.mozilla.com/D36871

--HG--
extra : moz-landing-system : lando
2019-07-11 06:14:58 +00:00
arthur.iakab
973b98aac6 Backed out changeset 0aea246d01bb (bug 928150) for causing build bustages on DOMMatrix.h CLOSED TREEE 2019-07-11 06:31:59 +03:00
Kagami Sascha Rosylight
b65864cf84 Bug 928150: Implement canvas getTransform() and setTransform() r=bzbarsky
Adds getTransform() and setTransform() to CanvasRenderingContext2D.

Differential Revision: https://phabricator.services.mozilla.com/D36871

--HG--
extra : moz-landing-system : lando
2019-07-11 02:43:46 +00:00
Kagami Sascha Rosylight
3a1f6f85f5 Bug 1558001: Use double for DOMMatrix r=bzbarsky
DOMMatrix now internally uses double instead of float. This only fixes DOMMatrix internals so we still have to work on Servo CSS Parser to pass doubles instead of floats.

Differential Revision: https://phabricator.services.mozilla.com/D35284

--HG--
extra : moz-landing-system : lando
2019-06-19 15:59:54 +00:00
Kearwood "Kip" Gilbert
55278c6768 Bug 1532375 - Implement Matrix4x4Double and QuaternionDouble r=lsalzman
The upcoming WebXR API (Bug 1419190) requires intermediate calculations of real-world space coordinates to have more precision with larger ranges. I expect that double precision matrix and quaternions will also be useful in other graphics and layout work.

It would not be ideal to expand the existing classes to always use double precision, as it would incur a significant performance penalty on certain platforms (eg, Arm). The double-precision variants should be used only when required.

The existing gfx::Matrix4x4 and gfx::Quaternion implementation can be extended with templates to generate both single and double precision variants.

Differential Revision: https://phabricator.services.mozilla.com/D22010

--HG--
extra : moz-landing-system : lando
2019-03-19 17:19:47 +00:00
Sylvestre Ledru
265e672179 Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset

--HG--
extra : amend_source : 4d301d3b0b8711c4692392aa76088ba7fd7d1022
2018-11-30 11:46:48 +01:00
Miko Mynttinen
c9202e2933 Bug 1477260 - Clip the rect in Matrix4x4TypedFlagged::TransformAndClipBounds, when transform is an identity matrix r=bas
MozReview-Commit-ID: 3a8vnl3K87n

--HG--
extra : rebase_source : b4bdd2b14e10becee20007e453497e9d7a204097
2018-07-20 17:28:37 +02:00
Boris Chiou
ffa1da7545 Bug 1467277 - Avoid getting zero normalized vector of rotate3d when setting a rotate matrix. r=nical
For example, if we set a transform to rotate3d(0, 0, 1e50, 45deg), the
expected normalized rotate axis is (0, 0, 1).
However, the length is larger than the maximum of float, so the actual value is
(0/inf, 0/inf, 1e50/inf) == (0, 0, 0). Therefore, we scale the vector before
doing normalization to avoid getting a zero vector.

MozReview-Commit-ID: 5LUDWD4RuNj

--HG--
extra : rebase_source : eb82f0b3979bf6ea3cd11b643ebb30a49edc24f8
2018-07-05 15:40:39 -07:00
Hiroyuki Ikezoe
5c588a8653 Bug 1464627 - Fix the spec link to 3D rotation matrix. r=emilio DONTBUILD
MozReview-Commit-ID: F5P4pCvD0Ww

--HG--
extra : rebase_source : 8c97814986517b81affa39c3be06e18427d1e4e8
2018-05-27 09:55:06 +09:00
Sebastian Hengst
0819f35e51 Backed out 4 changesets (bug 525063) on request from Andi. a=backout
Backed out changeset 516c4fb1e4b8 (bug 525063)
Backed out changeset 6ff8aaef2866 (bug 525063)
Backed out changeset bf13e4103150 (bug 525063)
Backed out changeset d7d2f08e051c (bug 525063)
2018-04-13 16:01:28 +03:00
Tristan Bourvon
a3a77c0312 Bug 525063 - Initialize uninitialized class attributes in m-c. r=ehsan 2018-04-10 21:11:02 +02:00
Jeff Muizelaar
e81d471371 Bug 1440702. Add equality operators to Matrix4x4Flagged. r=Bas
This adds a naive implementation of equality. We can do better
in the future by looking at the flags.

MozReview-Commit-ID: K4xdfCmvvb9
2018-03-16 16:42:03 -04:00
Bas Schouten
051f79e412 Bug 1437492 - Part 1: Add a Matrix class with optimizations for simple matrices. r=mattwoodrow
MozReview-Commit-ID: EVrgqE0VlwM
2018-02-17 00:43:36 +01:00
Ryan Hunt
0b29c49678 Remove implicit fuzzy operator== from BaseMatrix (bug 1435406, r=mattwoodrow)
--HG--
extra : rebase_source : 2635f386b96644922a345cea3a8fca6e3614253f
extra : histedit_source : b7cc3424492f88cbd32f3f945c5af86ff43ca0d0
2018-02-02 15:14:08 -06:00
Milan Sreckovic
099cfc4242 Bug 1423570: Use BaseRect access methods instead of member variables in gfx/ r=bas.schouten
MozReview-Commit-ID: ZGySgc9oP3

--HG--
extra : rebase_source : 23aadc10e9885002290155684b2c495780d979ce
2017-12-19 15:48:39 -05:00
Kearwood "Kip" Gilbert
ccc6462307 Bug 1410493 - Update Oculus SDK from 1.5 to 1.9, update IPD during VR presentation r=daoshengmu
- Oculus SDK was updated from 1.5 to 1.9
- As the Oculus API now returns quaternion orientations for each
  eye-to-head transform, I needed to send more information to the
  content process.
- Rather than adding the quaternion, we now calculate the view matrices
  on the VR thread in the GPU process rather than calculating it in the
  content thread from parameters.
- OpenVR's full view matrix is now used, for compatibility with more devices.
- IPD adjustments are now updated every frame for both Oculus and OpenVR.


MozReview-Commit-ID: LOtfs4QIqc8

--HG--
extra : rebase_source : 0a69824012ede4bea0e0e709a2d027d0c35730bb
2017-10-23 14:23:03 -07:00
Daniel Holbert
126bd9e1a4 Bug 1412427 part 8: (automated patch) Switch a bunch of C++ files in gfx to use our standard mode lines. r=jrmuizel
This patch was generated automatically by the "modeline.py" script, available
here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py

For every file that is modified in this patch, the changes are as follows:
 (1) The patch changes the file to use the exact C++ mode lines from the
     Mozilla coding style guide, available here:
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line

 (2) The patch deletes any blank lines between the mode line & the MPL
     boilerplate comment.

 (3) If the file previously had the mode lines and MPL boilerplate in a
     single contiguous C++ comment, then the patch splits them into
     separate C++ comments, to match the boilerplate in the coding style.

MozReview-Commit-ID: 77D61xpSmIl

--HG--
extra : rebase_source : c6162fa3cf539a07177a19838324bf368faa162b
2017-10-27 16:10:06 -07:00
Kartikaya Gupta
0df03f07af Bug 1377169 - Copy some useful functions from gfxRect into other places. r=jrmuizel
These functions need to survive the gfxRect purge as they are used in a
few places.

MozReview-Commit-ID: 1jGNlmAvV49

--HG--
extra : rebase_source : 0becc3b969063b5797502a3414dfd6573e82eee0
2017-07-05 11:21:58 -04:00
Kartikaya Gupta
8609d33dec Bug 1377090 - Further generify the Matrix class and define MatrixDouble. r=bas
To allow MatrixDouble to be a drop-in replacement for gfxMatrix, it
needs to accept the "double" versions of Point, Rect, and Size. This
patch does that by adding some extra typedefs inside BaseMatrix to
abstract over that.

It also moves some function implementations into the .h file as they
don't need specialization. I left some function implementations in
the Matrix.cpp file:
- Rotation, because it is specialized for Float and Double, since it uses
  sinf/cosf vs sin/cos in the two implementations.
- The Matrix4x4 multiplication operator overload, because if I put it
  inside the BaseMatrix class declaration Matrix4x4 isn't defined yet
  and the compiler doesn't like it.

MozReview-Commit-ID: K56dZjJhXWS

--HG--
extra : rebase_source : d009151942811a725ee6bf854238073e59665d5c
2017-07-05 11:18:49 -04:00
Kartikaya Gupta
1c54bb2347 Bug 1377090 - Make the Matrix class templated so we can instantiate it with a double type. r=bas
This extracts a BaseMatrix template of which Matrix is now a particular
specialization. The BaseMatrix allows us to reuse the same code for
floats and doubles, much like the other "base" classes (BasePoint,
BaseRect, etc.).

MozReview-Commit-ID: HO7bA83S9E0

--HG--
extra : rebase_source : dcd84d9a978cdea00bb54eb11eefcca9c6635901
2017-07-05 11:18:48 -04:00
Kartikaya Gupta
493543fcba Bug 1376522 - Remove unused code. r=botond
MozReview-Commit-ID: 7rfulZOILBT

--HG--
extra : rebase_source : 41edfea1b3a05d9b6431c3f4fad9eb4a40262ae8
2017-06-27 14:58:51 -04:00
David Anderson
65b03ef2d4 Add IsRectilinear to Matrix4x4. (bug 1365879 part 2, r=mattwoodrow)
This allows testing if a matrix is rectilinear without first converting
to a Matrix3x3.
2017-06-20 01:17:15 -07:00
Botond Ballo
9ebdb4f7f0 Bug 1352564 - Add a method to invert a Matrix4x4 if it's invertible. r=botond
Use it in HitTestingTreeNode::Untransform.

MozReview-Commit-ID: 1JkLh99FD0h

--HG--
extra : rebase_source : ca9836c1999a2af3cac5287a9efa875c415634f7
2017-04-02 17:20:23 -04:00
Boris Chiou
5e9077980f Bug 1272549 - Part 7: Compute distance for matrix and matrix3d. r=birtles
Decompose the 2d/3d matrix and calculate the Euclidean distance of
translate, scale, skew, quaternion, and perspective vectors.

MozReview-Commit-ID: 5nX9EeqvZi9

--HG--
extra : rebase_source : a15f2e4350e5c097eee8856a76244a81d589427a
2016-10-04 18:32:20 +08:00
Miko Mynttinen
1314efc774 Bug 1286412 - Add compositor support for triangle layers (for OpenGL backend) r=jrmuizel
MozReview-Commit-ID: 75q8ja7G1ko

--HG--
extra : rebase_source : 99e2684351a6403d7a957b876337de20b16de139
2016-10-07 10:58:13 -07:00
Botond Ballo
16c6388fe9 Bug 1288210 - Improve the use of strongly typed units in AsyncCompositionManager. r=mstange
MozReview-Commit-ID: 1EfGg0MNSBm

--HG--
extra : rebase_source : 50cdacad5c5e8b30bddf253584711a5668d23c8a
2016-09-21 17:33:29 -04:00
Nicolas Silva
56e5119c61 Bug 1301027 - Remove the matrix * point operator and replace it with TransformPoint methods. r=Bas 2016-09-08 18:26:03 +02:00
Nicolas Silva
ce8729cb81 Bug 1297986 - Don't assume w=1 when transforming 4d points. r=mattwoodrow 2016-08-26 14:31:29 +02:00
vincentliu
6a774f87dd Bug 1283113 - Add matrix checking before set matrix in Cairo. r=milan
---
 gfx/2d/Matrix.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
2016-07-13 16:47:32 +08:00
Carsten "Tomcat" Book
284c26c669 Bug 1268854 - Break out of loop if no intersecting points on positive side of clipping plane. r=kip 2016-06-23 12:41:04 +02:00
Kearwood (Kip) Gilbert
b25f2d6a84 Bug 1276066 - Add Union with "components" member to math classes to enable array access to members. r=bas
- Adding an array member to access the components of vector, size,
  and matrix classes reduces the code needed when passing all of the
  members to functions.

MozReview-Commit-ID: A6XL7y3zwsV

--HG--
extra : rebase_source : 77fb1b9784ae1213530cff7f42563e0afc8859e3
2016-04-18 12:12:36 -07:00
Markus Stange
04177e1aa2 Bug 1209100 - Back out bug 1165185 on inbound.
MozReview-Commit-ID: JqohyXNvjiU

--HG--
extra : rebase_source : c2165d279a6ca57a3439ebbfc081961369a42124
2016-03-21 16:16:52 -04:00
Lee Salzman
04fb5babb0 Bug 1241161 - make Matrix4x4::ProjectTo2D normalize out perpective where possible. r=mattwoodrow 2016-03-10 16:10:04 -05:00
William Chen
a7c2c21d89 Bug 1245242 - Normalize to unit vector for DOMMatrix.rotateAxisAngleSelf. r=roc 2016-02-04 00:30:00 -08:00
Bas Schouten
888d48a29a Bug 1245525: Fix some compiler errors in Moz2D type classes. r=jrmuizel
--HG--
extra : commitid : FmfVYTFF0DR
2016-02-03 19:44:41 +01:00
Botond Ballo
0858698ac3 Bug 1069417 - Generalize Matrix4x4 into Matrix4x4Typed<SourceUnits, TargetUnits>. r=Bas
Matrix4x4 remains a typedef for Matrix4x4Typed<UnknownUnits, UnknownUnits>.

No client code needed changing, except for forward-declarations of Matrix4x4
as a class (since it's now a typedef).

--HG--
extra : rebase_source : ecd9470b9defcc55cfb9e7dbd26e928a6219c3e5
extra : source : 0fc99b5490830953f37a4d8769e42dad2d10bc6e
2015-12-02 18:52:00 -05:00
Matt Woodrow
545885b406 Bug 1217012 - Use doubles when untransforming points since we need the extra precision. r=kip 2015-11-16 17:05:55 +13:00
Thinker K.F. Li
2a3f9839c2 Bug 1211360 - Don't snap for non-translation 3D transform. r=roc
--HG--
extra : histedit_source : 7515376b0eb76c7957adce0fc37cc5bb52361de5
2015-10-25 22:05:00 -04:00
Lee Salzman
36f6069f0c Bug 1201937 - push transform onto cairo context when evaluating path bounds. r=eihrul 2015-09-21 13:33:06 -04:00
Timothy Nikkel
1341b9b27d Bug 1204824. Make Matrix4x4::PreScale scale all values in the first three rows. r=bas 2015-09-16 23:39:09 -05:00
Jeremy Chen
866bb24e7e Bug 1149923 - Let 2D mask effect can check whether to use IntermediateSurface or not in its own logic. r=roc 2015-08-28 03:47:00 -04:00
Kearwood (Kip) Gilbert
5265775c94 Bug 1157984 - Part 2: Implement double precision clipping functions in Matrix4x4,r=vlad
- Implement Matrix4x4::TransformAndClipBounds
- Update methods in Matrix4x4 with templates, allowing for both single
  and double precision.

--HG--
extra : rebase_source : 6d5710a85bf5d82c441463debd98b31be4ec2ace
2015-08-06 17:26:03 -07:00
Lee Salzman
5036a0f61a Bug 1190705 - Ensure that canvas 2d matrix transforms are finite. r=Bas, r=jrmuizel 2015-08-05 18:48:25 -04:00
Kearwood (Kip) Gilbert
60dfc52e22 Bug 1181240 - Part 1: Copy methods from gfx3DMatrix,r=vlad
- Copied methods from gfx3DMatrix to Matrix4x4, gfxPoint, and gfxRect that
  with at double-precision floating point.
2015-07-09 16:27:38 -07:00
Birunthan Mohanathas
a8939590de Bug 1182996 - Fix and add missing namespace comments. rs=ehsan
The bulk of this commit was generated by running:

  run-clang-tidy.py \
    -checks='-*,llvm-namespace-comment' \
    -header-filter=^/.../mozilla-central/.* \
    -fix
2015-07-13 08:25:42 -07:00
Markus Stange
8f3e1c59d9 Bug 1165185 - Try to avoid invalidations when scrolling transformed elements. r=roc
--HG--
extra : rebase_source : e044d64a50c6afff9e518cf53c51aa9658f3b41e
2015-06-15 19:20:59 -04:00
Kearwood (Kip) Gilbert
8371055034 Bug 766345 - Part 2 - Implement Matrix4x4::TransformAndClipRect (v2 Patch). r=vladimir
- Implemented Matrix4x4::TransformAndClipRect, which emulates
the frustum clipping behavior of the GPU.
2015-04-29 14:25:47 -07:00