Граф коммитов

124 Коммитов

Автор SHA1 Сообщение Дата
Daosheng Mu 088f996216 Bug 1650714 - Part 1: Correct Matrix Decompose and SetRotationFromQuaternion. r=kip,imanol,lsalzman
Differential Revision: https://phabricator.services.mozilla.com/D82391
2020-07-10 22:01:11 +00:00
Markus Stange c5cf53e63b Bug 1642603 - Make TransformAndClipBounds stop discarding the corner positions of empty rectangles. r=kip
Differential Revision: https://phabricator.services.mozilla.com/D79582
2020-06-17 18:54:46 +00:00
Markus Stange 04fd0b27d7 Bug 1626111 - Fix two variable names in Matrix4x4TypedFlagged::TransformAndClipBounds. r=bas
Differential Revision: https://phabricator.services.mozilla.com/D68930

--HG--
extra : moz-landing-system : lando
2020-04-02 04:01:01 +00:00
Markus Stange d00525a3a9 Bug 1626113 - Use mozilla::Span in TransformAndClipRect and do some refactoring. r=kip
Differential Revision: https://phabricator.services.mozilla.com/D68929

--HG--
extra : moz-landing-system : lando
2020-04-02 04:01:01 +00:00
Markus Stange 6b7047492f Bug 1595038 - Make sure that TransformAndClipBounds returns an empty clipped rect when the clip itself is already empty. r=kip
The test added in this changeset is already fixed by the no-normalization change, but there are probably cases that require the explicit check that this patch adds.
When we were still normalizing the plane normals, the TransformAndClipBounds call in the added test was returning (1023.999878, 1023.999878, 0.000061, 0.000122).

Depends on D68703

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

--HG--
extra : moz-landing-system : lando
2020-04-02 04:00:53 +00:00
Markus Stange 70151209d3 Bug 1595038 - Stop normalizing the plane normals, in order reduce error from floating point inaccuracies. r=kip
For example, if the clipping rectangle has aClip.X() == 1024, then the normal for the clipping plane induced by the left edge of the clip will now be (1, 0, 0, -1024) rather than (0.0009765620343390458, 0, 0, -0.9999995231631829).

This change is mathematically valid:
 - The dot products computed from these vectors become multiplied by planeNormal.Length() (compared to before this patch).
 - The sign of the dot products is not affected, so the "intersection with plane" check is not affected:
   `if ((nextDot >= 0.0) != (prevDot >= 0.0)) {`
 - The value of the dot products is only used to compute `t`, as follows:
   `F t = -prevDot / (nextDot - prevDot);`
   Here, the length now appears both in the numerator and in the denominator, canceling itself out.

As a result from this change, the existing tests no longer require integer nudging in order to pass.

Depends on D68702

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

--HG--
extra : moz-landing-system : lando
2020-04-01 01:06:23 +00:00
Markus Stange c1f3167506 Bug 1595038 - Add a planeNormal variable so that it's clear that the same plane is used for the entire inner loop. r=kip
Differential Revision: https://phabricator.services.mozilla.com/D68702

--HG--
extra : moz-landing-system : lando
2020-04-02 02:42:17 +00:00
Botond Ballo 6a4407c26e Bug 1621803 - Fix additional bugs in Matrix4x4Flagged::operator*(Matrix4x4). r=bas
Differential Revision: https://phabricator.services.mozilla.com/D66505

--HG--
extra : moz-landing-system : lando
2020-03-25 15:22:14 +00:00
Nathan Froyd 364d8de43e Bug 1603409 - add missing operator= definitions for gfx/2d classes; r=botond
These definitions are implicitly created now, but trunk clang considers
implicit creation to be a bug when you have explicitly declared copy
constructors.

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

--HG--
extra : moz-landing-system : lando
2019-12-13 17:58:55 +00:00
Botond Ballo a980b29c49 Bug 1589204 - Fix a bug in Matrix4x4Flagged::operator*. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D49486

--HG--
extra : moz-landing-system : lando
2019-10-16 21:01:16 +00:00
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