commit aab63ce5a0319932a2640c0e47bedeb4580305a4 Author: Emmanuele Bassi Date: Fri Apr 8 14:41:59 2016 +0100 Release 1.4.0 configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 8c4177775a12603e186ba71113338fb4e9a324df Author: Emmanuele Bassi Date: Fri Apr 8 15:27:06 2016 +0100 docs: Override graphene_simd4x4f_t The GRAPHENE_VECTORCALL annotation makes gtk-doc wet the bed, so we need to provide a manual override in order to pass `make check`. doc/graphene-overrides.txt | 6 ++++++ 1 file changed, 6 insertions(+) commit e8e0ca0e9d2c96c874e710a3c0561d43e9f0b385 Author: Emmanuele Bassi Date: Fri Apr 8 14:25:54 2016 +0100 build: Don't dist generated pkg-config files The .pc files for Graphene are going to be generated at configure time, so there's no point in having them into the dist tarball. src/Makefile.am | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 587bcc68f90d017f79ba0641c6c1d3fc157efc17 Author: Emmanuele Bassi Date: Fri Apr 8 14:23:41 2016 +0100 build: Use AM_DISTCHECK_CONFIGURE_FLAGS The AM_DISTCHECK_CONFIGURE_FLAGS variable is the preferred one for use inside Makefile.am, in order to leave DISTCHECK_CONFIGURE_FLAGS for distributors and builders for overrides. Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 11a463fd85f65712e035d282739c5675b11bd7c3 Author: Emmanuele Bassi Date: Fri Apr 8 15:28:04 2016 +0100 simd4f: Align masks for dot3 fallbacks On some platforms (mostly 32 bit architectures) we need to force the alignment of the unsigned integer masks we use to implement dot3() on non-SSE 4.1 capable platforms. src/graphene-simd4f.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4ee30fee15821e184f95b730954fd8665b730b7f Merge: 9290c88 8664d26 Author: Emmanuele Bassi Date: Fri Apr 8 13:04:12 2016 +0100 Merge pull request #58 from fanc999/master graphene-simd4x4f.h: Fix x86 Builds on MSVC 2013 and Later commit 8664d26ead9137444479871a565f1eb6ee379b3c Author: Chun-wei Fan Date: Thu Jan 29 13:50:41 2015 +0800 graphene-simd4x4f.h: Fix x86 Builds on MSVC 2013 and Later __vectorcall (hence GRAPHENE_VECTORCALL) must be after the return type, so move GRAPHENE_VECTORCALL around a bit to fix the build. src/graphene-simd4x4f.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 9290c88cd5d7e3333f9ab90a6e4def7a88b8b5a1 Author: Emmanuele Bassi Date: Fri Apr 8 11:19:36 2016 +0100 Use C11 _Generic macro for type appropriate lerp() Look at us, all fancy and using a spec written 5 years ago. src/graphene-private.h | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) commit 9dc16635fe55f05daf9c1a6f1214e2bf6a647573 Author: Emmanuele Bassi Date: Thu Apr 7 19:05:06 2016 +0100 matrix: Use the type appropriate abs() Do not use the integer abs() when dealing with doubles. src/graphene-matrix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 43248f9ec9db7b06789a2b1db1c3858a980befcb Author: Emmanuele Bassi Date: Thu Apr 7 18:57:50 2016 +0100 build: Re-indent configure.ac Too much white space and indentation makes editing and following the m4 madness harder than necessary. configure.ac | 489 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 220 insertions(+), 269 deletions(-) commit 0b225e407dd7d6bf6f11b7afc3a28c147b309d22 Author: Emmanuele Bassi Date: Thu Apr 7 18:14:55 2016 +0100 euler: Drop indirection in initializer Use the internal initializer function instead of going through the public API. src/graphene-euler.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit a6bb76f881ae7b56ba00a0aa3c670344433eb52c Author: Emmanuele Bassi Date: Thu Apr 7 13:52:58 2016 +0100 tests: Add interpolation test for 3D matrices We use a simple translation because rotations are going to be messy to test. This should still be enough to see if the matrix decomposition code is doing the right thing. src/tests/matrix.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 9e1108bacb78ee61e23a260d7a75e85f2b20e37c Author: Emmanuele Bassi Date: Thu Apr 7 13:49:51 2016 +0100 tests: Add interpolation test for 2D matrices Let's try and avoid breakage in the future. src/tests/matrix.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit 84237c079b5a52c21692af79f2768d4f56896eff Author: Emmanuele Bassi Date: Thu Apr 7 13:40:32 2016 +0100 matrix: Fix the interpolation of 3D matrices We're not extracting the translation and perspective components correctly; the matrix is made of row vectors, which means that the translation component is the W row vector, whereas the perspective component is the W component of each row vector. src/graphene-matrix.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) commit 178ebd1791364cff08b098d3cba51ae4706061af Author: Emmanuele Bassi Date: Thu Apr 7 13:39:16 2016 +0100 tests: Fix matrix fuzzy comparison macro We're not testing all the components because we're missing the row offset. src/tests/graphene-test-compat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6bf5939f83f3beb6510b6adb46b55c256171c001 Author: Emmanuele Bassi Date: Wed Apr 6 16:38:02 2016 +0100 matrix: Fix interpolation between 2D matrices The decomposition and interpolation code claims to come from the CSS3 Transformation specification, but it does something fairly custom; it also uses the existing 3D matrix interpolation and recomposition code which is just not really correct. We should split the interpolation cases for 2D and 3D matrices in a more radical way, and follow the whole CSS3 Transformation spec more closely. src/graphene-matrix.c | 266 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 188 insertions(+), 78 deletions(-) commit 159a329ec3cfab3afc8982f6eb913cc630dc2508 Merge: d28e9d3 706568b Author: Emmanuele Bassi Date: Thu Mar 31 08:34:57 2016 +0100 Merge pull request #57 from cubicool/minimal-aligned-alloc Fix compile warnings when debug is disabled commit 706568b0e6498066ca6cd1b9a8ee7e1e16f80155 Author: Jeremy Moles Date: Wed Mar 30 17:48:25 2016 -0400 Fix compile warnings when debug is disabled Initialize the 'res' pointer to NULL. Borrow the 'errno' variable rather than using an 'err' variable local to graphene_aligned_alloc. There is some precedent for this, as the existing code also set 'errno = 0' before calling the corresponding alloc routine. src/graphene-alloc.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) commit d28e9d3a9a6feb2623861d4e69b610d6dfcdbbb4 Author: Emmanuele Bassi Date: Wed Mar 23 16:29:18 2016 +0000 matrix: Load identity from a float array Instead of using an intermediate initializer. src/graphene-matrix.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 891bc52cb2e349e34dc48d9f44c4ad25de284438 Author: Emmanuele Bassi Date: Wed Mar 23 16:08:08 2016 +0000 rect: Add zero() constant rectangle Similar to the zero() points and sizes, this allows us to initialize rectangles without having to call graphene_rect_init(), memset(), or use temporary variable declarations. doc/graphene-sections.txt | 1 + src/graphene-rect.c | 18 ++++++++++++++++++ src/graphene-rect.h | 3 +++ 3 files changed, 22 insertions(+) commit 36b2a10db7b0bd691f2c83bee7fd10ae9dbcdbba Author: Emmanuele Bassi Date: Wed Mar 16 16:44:29 2016 +0000 build: Clean up autogen Use `set -x` to trace the result of various checks when setting up the build environment. autogen.sh | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) commit 997f3da4d3e5b63c963e6125e7b648f594d1e333 Author: Emmanuele Bassi Date: Tue Mar 8 14:30:46 2016 +0000 simd4x4f: Remove intermediate variables We can pass the address of the row vertices when multiplying two matrices together. src/graphene-simd4x4f.h | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) commit 97942778494424c3e87fea50cb675b302fd08b92 Author: Emmanuele Bassi Date: Tue Mar 8 12:32:05 2016 +0000 docs: Fix references for GLib/GObject symbols We need to tell gtk-doc where the installed docs are, in order for it to fix all the external references. doc/Makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 694661984970569749a8fcd894b607a459d142b8 Author: Emmanuele Bassi Date: Tue Mar 8 12:14:35 2016 +0000 docs: Make the order of operands explicit For non-commutative operators on vectors the order is important. Fixes #54 src/graphene-vectors.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) commit 73eb1d0b23ad7765700a379d7098ce857a360a17 Author: Emmanuele Bassi Date: Wed Feb 10 16:15:28 2016 +0000 Document restriction for graphene_triangle_get_barycoords() We require that the point is coplanar to the triangle. If we change implementation, we may lift the restriction, but for the time being better be explicit. Closes #56 src/graphene-triangle.c | 3 +++ 1 file changed, 3 insertions(+) commit be145c16b312cea45bb8fcfe4ab0e7cfd1f04f5f Merge: 89a8254 ac17167 Author: Emmanuele Bassi Date: Wed Feb 10 10:30:40 2016 +0100 Merge pull request #53 from swilmet/wip/improve-docs docs: improve doc of graphene_sphere_translate() commit 89a82547445048494e825671cc263d9fa9126782 Merge: 770682c e40294f Author: Emmanuele Bassi Date: Wed Feb 10 10:30:12 2016 +0100 Merge pull request #52 from swilmet/wip/triangle-unit-test tests: add unit test for graphene_triangle_get_area() commit ac17167221d8bc13cbd98aa011c6607a0ce8666f Author: Sébastien Wilmet Date: Wed Feb 10 10:22:17 2016 +0100 docs: improve doc of graphene_sphere_translate() I know what is a translation, but it was not clear to me whether @point referred to the new center coordinates, or the delta. It turns out that it's the delta, as expected for a translation, but it's better to explain it in the docs. src/graphene-sphere.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e40294f42a0004896aebd9423da0d4ef8847ad6e Author: Sébastien Wilmet Date: Tue Jan 12 15:57:35 2016 +0100 tests: add unit test for graphene_triangle_get_area() The function always returns a positive area. Signed areas can be useful for some computations in computer graphics, but it is not present in graphene. src/tests/triangle.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 770682c884a2ffc9dbbbc7b35de13e75812d824c Author: Emmanuele Bassi Date: Fri Jan 29 15:32:24 2016 +0100 matrix: Add checks for invertible matrices We should propagate error states for non-invertible matrices from the SIMD implementation to the public wrapper type. src/graphene-matrix.c | 33 ++++++++++++++++++++++++--------- src/graphene-matrix.h | 2 +- 2 files changed, 25 insertions(+), 10 deletions(-) commit 94c2d2d814eb215d43b0baa6f69ec44bb396fab0 Author: Emmanuele Bassi Date: Fri Jan 29 15:27:08 2016 +0100 simd: Check if the matrix is invertible We should check if the determinant is not zero before trying to invert the matrix. This commit changes the return value of the inverse() operator, but the ABI stability is preserved. src/graphene-simd4x4f.h | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) commit 9744fa81285ea9d52c88f5b50b3649267474a08d Author: Emmanuele Bassi Date: Wed Jan 27 11:32:07 2016 +0000 euler: Store angles in radians Instead of converting internally at the point of use, we should store the rotation angles in radians, and only transform to and from degrees when interfacing with the public API. Closes #32 src/graphene-euler.c | 63 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 20 deletions(-) commit 92081bdd963128e6405f3c4e092f631daf12085b Author: Emmanuele Bassi Date: Wed Jan 27 11:03:30 2016 +0000 Add radians variants for quaternions It's been requested, and it can help to avoid round-tripping between radians and degrees. Closes #32 doc/graphene-sections.txt | 2 + src/graphene-quaternion.c | 100 +++++++++++++++++++++++++++++++++------------- src/graphene-quaternion.h | 10 +++++ 3 files changed, 85 insertions(+), 27 deletions(-) commit 284043513602183e6007524d6e1ed7a788fa5f8f Author: Emmanuele Bassi Date: Wed Jan 27 10:46:57 2016 +0000 docs: Clarify the modelview required when unprojecting When unprojecting a point, Graphene expects the inverse of the modelview used to project it. We cannot really change the implementation to invert the modelview ourselves without breaking existing code. There's also the common behaviour of canvas libraries to cache the inverse of the modelview to avoid incurring into additional costs, which means we'd be working against our callers. Fixes issue #50 src/graphene-matrix.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7673ae2a4bf2d777d9063b587f2751efd555630c Author: Emmanuele Bassi Date: Tue Jan 26 18:27:06 2016 +0000 rect: Remove unused variables And thus silence two compiler warnings. src/graphene-rect.c | 1 - 1 file changed, 1 deletion(-) commit 2b2e23d367cc95ffd1c8b3461543bb6125bc44c3 Author: Emmanuele Bassi Date: Mon Jan 18 20:16:24 2016 +0000 docs: Clarify the meaning of the triangle's midpoint Link to Wikipedia, because all human knowledge should be up for debate. src/graphene-triangle.c | 3 +++ 1 file changed, 3 insertions(+) commit 9df082ddba2d1deb9971cc9b49e4dd149dec4e76 Author: Emmanuele Bassi Date: Mon Jan 18 19:23:29 2016 +0000 rect: Fix the implementation of union() We need to take into consideration the origin of each rectangle when comparing sizes. Fixes #49. src/graphene-rect.c | 4 ++-- src/tests/rect.c | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) commit ec5bf9ba38f5e8a0433bbe7c4f609560b38f9152 Author: Emmanuele Bassi Date: Mon Jan 18 19:22:34 2016 +0000 rect: Use union() to implement expand() We union a rectangle with a degenerate rectangle of size 0 and origin in the given point. src/graphene-rect.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) commit 979493eb0f61fabb3dee725956005cd6057c39aa Author: Emmanuele Bassi Date: Thu Jan 14 12:52:00 2016 +0000 docs: Add examples of GObject integration This should clarify how to use Graphene types with GObject. src/graphene-gobject.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) commit 788a305d45be54dd02d3eb0199ffbb8e9aac2f93 Author: Emmanuele Bassi Date: Thu Jan 14 12:35:40 2016 +0000 docs: Add some images to the graphene_rect_t reference doc/Makefile.am | 3 + doc/rectangle-intersection.png | Bin 0 -> 2174 bytes doc/rectangle-intersection.svg | 82 +++++++++++++++++++ doc/rectangle-union.png | Bin 0 -> 2668 bytes doc/rectangle-union.svg | 79 ++++++++++++++++++ doc/rectangle.png | Bin 0 -> 12713 bytes doc/rectangle.svg | 182 +++++++++++++++++++++++++++++++++++++++++ src/graphene-rect.c | 10 +++ 8 files changed, 356 insertions(+) commit 22fc4b600718408f57ebc3ea2cd54634cccce4ab Merge: 3b97374 79e43f1 Author: Emmanuele Bassi Date: Tue Jan 12 13:10:42 2016 +0000 Merge pull request #47 from swilmet/wip/barycoords Add unit tests for graphene_triangle_get_barycoords() commit 3b97374aa127ce23988bb06215223681c385f1bd Merge: d5decac e095efb Author: Emmanuele Bassi Date: Tue Jan 12 13:09:44 2016 +0000 Merge pull request #48 from swilmet/wip/docs-fixes Some docs fixes and improvements commit d5decac54d24e97e7880d33c13977f84a27a8f37 Author: Emmanuele Bassi Date: Tue Jan 12 13:08:01 2016 +0000 docs: Add an image to explain barycentric coordinates The current explanation is ambiguous as to what the 'u' and 'v' coordinates map; we should be more explicit, and an image gets the point across much more easily. doc/Makefile.am | 3 +- doc/triangle-barycentric.png | Bin 0 -> 19080 bytes doc/triangle-barycentric.svg | 223 +++++++++++++++++++++++++++++++++++++++++++ src/graphene-triangle.c | 6 ++ 4 files changed, 231 insertions(+), 1 deletion(-) commit e095efbb21adbff12b5de02a96e489d669c18c5d Author: Sébastien Wilmet Date: Tue Jan 12 13:53:46 2016 +0100 docs: add #include information doc/graphene-sections.txt | 3 +++ 1 file changed, 3 insertions(+) commit 4420cdd6b55258eff8d4b2491594dfc5be2da47c Author: Sébastien Wilmet Date: Tue Jan 12 13:37:05 2016 +0100 docs: fix explanation about CamelCase types When reading the docs, I thought that the CamelCase types were also available in C. But it is not the case. Change also "camel case" -> "CamelCase", for a better understanding. src/graphene-gobject.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 79e43f1a21239ca989a8fa7d77d5b8731402b36c Author: Sébastien Wilmet Date: Tue Jan 12 10:39:10 2016 +0100 tests: Add unit test for graphene_triangle_get_barycoords() u is on the ac axis and v is on the ab axis. Is that normal? src/tests/triangle.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) commit 0925d8c89f4fbfe9d93eabfe064b8120207dca47 Author: Sébastien Wilmet Date: Tue Jan 12 10:48:51 2016 +0100 tests: Add graphene_assert_fuzzy_vec2_equal() macro src/tests/graphene-test-compat.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit e1cdf36c1a3dd945fb39413c0518ad41d1c7a908 Author: Sébastien Wilmet Date: Tue Jan 5 14:18:18 2016 +0100 docs: another batch of trivial typo fixes src/graphene-sphere.c | 2 +- src/graphene-vectors.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) commit a4c2e97bd04c3716719560d4e31deffb7a234fc7 Merge: e0c4e4c b8481cd Author: Emmanuele Bassi Date: Tue Jan 5 09:16:30 2016 +0000 Merge pull request #44 from swilmet/wip/swilmet/docs-fixes docs: a few trivial typo fixes commit b8481cd98be95ffbbdbb6e324e040b8a19028ba1 Author: Sébastien Wilmet Date: Mon Jan 4 16:37:44 2016 +0100 docs: a few trivial typo fixes src/graphene-rect.c | 2 +- src/graphene-simd4f.c | 4 ++-- src/graphene-simd4f.h | 4 ++-- src/graphene-simd4x4f.h | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) commit e0c4e4c5dbc2eeaa45d10d65226954982fe080b3 Author: Emmanuele Bassi Date: Mon Nov 9 11:50:25 2015 +0000 Revert "matrix: Reorder point unprojection" This reverts commit 1c46f0b8521645b52427311687d1c30b565789f0. The change breaks existing users. src/graphene-matrix.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit 9ea181f51a3f6e38e1f31bfe376c5292ca90b130 Author: Emmanuele Bassi Date: Sun Nov 8 13:06:07 2015 +0000 point3d: Add viewport normalization utility function The newly added function is useful to normalize a 3D point to the unit coordinate space [ -1, 1 ] within a viewport. doc/graphene-sections.txt | 1 + src/graphene-point3d.c | 36 ++++++++++++++++++++++++++++++++++++ src/graphene-point3d.h | 7 +++++++ src/tests/point3d.c | 21 +++++++++++++++++++++ 4 files changed, 65 insertions(+) commit 1c46f0b8521645b52427311687d1c30b565789f0 Author: Emmanuele Bassi Date: Sun Nov 8 12:10:09 2015 +0000 matrix: Reorder point unprojection Let's follow the same approach as gluUnProject(): first, multiply the modelview and the projection matrices; then invert the result. We should also avoid a division by zero. src/graphene-matrix.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 9b90b480f8fa0caf7886a8b3d72dfd19d27ddcce Author: Emmanuele Bassi Date: Sat Nov 7 16:55:27 2015 +0000 docs: Fix typo in type name src/graphene-matrix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 445680d853be38f5c50cd664ba6a924d86da2063 Author: Emmanuele Bassi Date: Sat Nov 7 16:49:38 2015 +0000 docs: Use 'plain' language for non-code examples This way gtk-doc won't try to do things like syntax highlighting. src/graphene-matrix.c | 6 +++--- src/graphene-simd4f.c | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) commit 91487bc293c3e4a0ab3c69edfadd35d2fc697ba6 Author: Emmanuele Bassi Date: Thu Nov 5 19:00:06 2015 +0000 tests: Re-enable matrix tests under GCC Like we re-enabled the frustum tests, we should try and see if the GCC in TravisCI is back to working. src/tests/matrix.c | 12 ------------ 1 file changed, 12 deletions(-) commit b2f579650a419025acf8094791aaa10087f8a65b Author: Emmanuele Bassi Date: Thu Nov 5 18:39:09 2015 +0000 tests: Re-enable frustum units under GCC We fixed a series of issues with the dot3() operator, which is used when computing the distance from a plane; this should improve the behaviour of the graphene_frustum_contains_point() on older versions of GCC. src/tests/frustum.c | 9 --------- 1 file changed, 9 deletions(-) commit 48e8589dc788aa4a66e9af3cad322bbd521a58e2 Author: Emmanuele Bassi Date: Thu Nov 5 11:51:20 2015 +0000 quad: Vectorise min/max look up Instead of iterating and branching, we can vectorise the operation of looking for the minimum and maximum values in the points array. src/graphene-quad.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) commit e80acf94229236fd7b78d37d73cf27aa2fde138d Author: Emmanuele Bassi Date: Thu Nov 5 11:37:41 2015 +0000 quaternion: Precompute factors We reuse the same factors in all euler ordering cases, so we should extract them from the switch branches. src/graphene-quaternion.c | 75 ++++++++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 33 deletions(-) commit 34f776f27e0ee1545a386ec5d7caa30a5d3102c6 Author: Emmanuele Bassi Date: Thu Nov 5 11:36:45 2015 +0000 quaternion: Drop some indirection Set the row vectors of the result matrix, instead of using additional vector variables. src/graphene-quaternion.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) commit 823d9b169f689ce0406de579269b241c3aec194f Author: Emmanuele Bassi Date: Wed Nov 4 19:54:10 2015 +0000 euler: Avoid unnecessary indirection We're computing the components of the result matrix using a vec4, and then taking those vec4 variables to initialize a matrix — but the intent is to store the values as SIMD vectors. We can side step the whole thing, and directly initialize the row vectors of the result matrix. src/graphene-euler.c | 52 +++++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) commit aa9dd380b5369417a19ac14be0fcd2dfd0fb7d82 Author: Emmanuele Bassi Date: Wed Oct 14 11:37:29 2015 +0100 simd4f: Optimize neg() on GCC Instead of doing four single lane reads, use a splat and a mul. src/graphene-simd4f.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 51748e1bb3d7697317a3f74e7b6f9a7a9a0b84c8 Author: Emmanuele Bassi Date: Wed Oct 14 11:36:21 2015 +0100 simd4f: Zero-safe GCC reciprocal A bit more expensive, since it replaces a single splat and mul with four single lane reads, but at least it behaves consistently, and avoids NaN. src/graphene-simd4f.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit cb8409b09e1dcf5cf726029cea20a8a3bad78bf6 Author: Emmanuele Bassi Date: Wed Oct 14 11:35:41 2015 +0100 Fix indentation Keep operands at the right indentation level. src/graphene-simd4f.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cedeae5965d5b8cdcb18d90cb4a42e5fc46a7627 Author: Emmanuele Bassi Date: Wed Oct 14 11:22:58 2015 +0100 Include emmintrin.h from graphene-config.h We use __m128i for both the GCC and the MSVC paths, but only the MSVC one explicitly includes emmintrin.h — the GCC path relies on other headers. Let's be explicit and consistent everywhere. configure.ac | 1 + src/graphene-simd4f.h | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) commit f1126ac0a705d0221333ab82ec96c6b7c1462dec Author: Emmanuele Bassi Date: Wed Oct 14 01:09:39 2015 +0100 simd4f: Clean up the sum() implementation Do all the splats upfront, and then sum them, instead of using intermediate results. src/graphene-simd4f.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 08219582d1ca0e6dee9fa4ba8008d8c6cda48f99 Author: Emmanuele Bassi Date: Wed Oct 14 01:09:00 2015 +0100 Fix indentation of SSE rsqrt() on MSVC Too many spaces. src/graphene-simd4f.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit c1229a2add6e7096839eba3845db642525ad4d56 Author: Emmanuele Bassi Date: Wed Oct 14 00:49:38 2015 +0100 simd4f: Define union type once for the SSE path Both the GCC and the MSVC branches define the same union type for single lane reads; we can define it once in the common path, instead. src/graphene-simd4f.h | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) commit ee76f5389e8b9aba2ccf435a41a2f22b955ff457 Author: Emmanuele Bassi Date: Wed Oct 14 00:48:59 2015 +0100 Add a couple of explanatory comments Should improve the readability of the header. src/graphene-simd4f.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 99a8dc93dce99db67d298a378f975552efa9d04b Author: Emmanuele Bassi Date: Tue Oct 13 13:28:43 2015 +0100 rect: Add get_vertices() method Similar to graphene_box_get_vertices(), it returns the four vertices of a graphene_rect_t as an array of graphene_vec2_t. doc/graphene-sections.txt | 1 + src/graphene-rect.c | 25 +++++++++++++++++++++++++ src/graphene-rect.h | 4 ++++ 3 files changed, 30 insertions(+) commit 03ea593a181a981aeeea91c9913f1e598c7fcc59 Author: Emmanuele Bassi Date: Tue Oct 13 11:51:43 2015 +0100 box: Inline more implementations Instead of using graphene_vec3_t wrappers, let's use graphene_simd4f_t methods directly, as they are inlined and we don't pay the cost of a function call in most cases. src/graphene-box.c | 77 +++++++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 35 deletions(-) commit 744c34485198fc1e51002da5617a75aff550ea63 Author: Emmanuele Bassi Date: Wed Oct 7 23:08:50 2015 +0100 simd4f: Protect against division by zero in scalar reciprocal Like we do for rsqrt() and div(). src/graphene-simd4f.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 74e9e7bd6e8387f870aa7a37f886316d67032417 Author: Emmanuele Bassi Date: Wed Oct 7 17:49:31 2015 +0100 matrix: Drop some intermediate variables src/graphene-matrix.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) commit 644b7d29194e86e974f4b902b109e7e64c78cc83 Author: Emmanuele Bassi Date: Mon Oct 5 18:01:20 2015 +0100 rect: Remove check in normalize_in_place We are already doing a check on each direction of the rectangle's size, so there's really no point in doing a likely() check beforehand. src/graphene-rect.c | 3 --- 1 file changed, 3 deletions(-) commit e9c58af84fbd88bdf0603e44b4c08f80c1817240 Author: Emmanuele Bassi Date: Mon Oct 5 17:59:16 2015 +0100 build: Remove -Winline from SSE2_CFLAGS It's pretty pointless to have -Winline there, since we use inline all over the place. We should either always warn because of missed inlining, or never do that. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 18e48701f084171b04fa824f12eec9c1ac7f143b Author: Emmanuele Bassi Date: Mon Oct 5 16:36:03 2015 +0100 docs: Add explanations for SIMD operators Some functions have explanations on the operations they perform that include an example of the resulting vector; we should add more of those. src/graphene-simd4f.c | 67 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 7 deletions(-) commit 11a0d633bbae6c5910752c4a3eb9d7a287003696 Author: Emmanuele Bassi Date: Mon Oct 5 16:20:43 2015 +0100 bench: Include stdlib.h for malloc/free Otherwise the compiler will warn for the implicit declarations. src/bench/graphene-bench-utils.c | 1 + 1 file changed, 1 insertion(+) commit 85823e0d996b7f2d7aec5b8c1ddff15b60c114f3 Author: Emmanuele Bassi Date: Mon Oct 5 16:19:56 2015 +0100 simd: Fix the definition of dot3_scalar() in scalar context Cut and paste idiocy. src/graphene-simd4f.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 55484125158e0bc9e11c090f155b4840bf75cb71 Author: Emmanuele Bassi Date: Mon Oct 5 16:17:47 2015 +0100 simd4f: Fix an aliasing issue The dot3_scalar() operator in the scalar code path was aliased to dot3(). src/graphene-simd4f.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9674324e982d0d4a3c013f3f6dc604bb431bda35 Author: Emmanuele Bassi Date: Mon Oct 5 15:50:22 2015 +0100 Remove sse4.1 from GRAPHENE_SIMD variable We coalesce the SSE 4.1 support with SSE2, if that's available — i.e. the SSE 4.1 support is an extension on top of SSE2. configure.ac | 1 - 1 file changed, 1 deletion(-) commit 3eb29fbea4f5dc00cad9bc27628b5b2f13890277 Author: Emmanuele Bassi Date: Mon Oct 5 15:30:07 2015 +0100 Allow include-time SIMD detection The graphene-config.h header should allow determining the SIMD implementation. This way, projects could conceivably just use the SIMD API inside their own vector and matrix types. The capabiltities are still detected at configure time, because the rest of the API depends on a single SIMD implementation. configure.ac | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) commit 6e5248a7d52506ffde29fc81e37936f9847c6acc Author: Emmanuele Bassi Date: Mon Oct 5 15:25:00 2015 +0100 simd4f: Optimise cross3 on ARM NEON Instead of using a ton of single lane reads to unroll the cross vectors, we can use 2-lanes vectors and combinations to compute the cross product and then reassemble it in the correct order. src/graphene-simd4f.h | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) commit 733c9a020198ccf70e935351a914808c10dfbd9f Author: Emmanuele Bassi Date: Mon Oct 5 15:23:27 2015 +0100 simd4f: Add a float32x2_t typedef on NEON The NEON instructions set has a 2-lanes SIMD type that we already use; let's typedef it so it's immediately recognisable. doc/graphene-sections.txt | 1 + src/graphene-simd4f.h | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) commit ab5b1a69df4c35552d48e5775a9cfd182bfa5cae Author: Emmanuele Bassi Date: Mon Oct 5 13:50:58 2015 +0100 simd4f: Simplify rsqrt on NEON Instead of flattening the implementation, let's use a separate macro for the estimate iteration. This will allow us to tweak the implementation in the future without losing track of the number of iterations. src/graphene-simd4f.h | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) commit f323bac803637074b1ed98029cad1d83f004f8bb Author: Emmanuele Bassi Date: Sun Oct 4 17:28:51 2015 +0100 bench: Compute a better average time per round We're just doing a simple "total elapsed time / number of rounds", but we should do a little bit better than that, by discarding the maximum and minimum timing between all rounds. src/bench/graphene-bench-utils.c | 92 +++++++++++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 25 deletions(-) commit eb2d3efe56f77de1514abf2ecc6df8c0598d30c2 Author: Emmanuele Bassi Date: Sat Oct 3 12:47:27 2015 +0100 Use the scalar dot3 whenver possible Instead of doing a dot3() followed by a single lane read. src/graphene-matrix.c | 6 +++--- src/graphene-point3d.c | 5 ++--- src/graphene-vectors.c | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) commit 3399b51a10886476539e713d94e369d9b3612f9e Author: Emmanuele Bassi Date: Sat Oct 3 12:43:00 2015 +0100 simd4f: Add scalar version of dot3() We can optimize dot3() operations requiring a scalar on certain architectures, to avoid computing the dot product and then do a single lane read. doc/graphene-sections.txt | 1 + src/graphene-simd4f.c | 28 ++++++++++++++++++++++++++-- src/graphene-simd4f.h | 36 +++++++++++++++++++++++++++++++++++- 3 files changed, 62 insertions(+), 3 deletions(-) commit b050bca269829d7a0440168ef451b125b76ccced Author: Emmanuele Bassi Date: Fri Oct 2 14:35:39 2015 +0100 bench: Fix units for time formatting src/bench/graphene-bench-utils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit fdc5767e55141566468c7aa1233d28db7388e31f Author: Emmanuele Bassi Date: Wed Sep 30 18:11:51 2015 +0100 simd: Be more graceful when handling divisions Check if the denominator is 0, before attempting a division. This should reduce the cases where we get a NaN when we really expect a 0. src/graphene-simd4f.c | 16 ++++++++-------- src/graphene-simd4f.h | 15 ++++++++++----- 2 files changed, 18 insertions(+), 13 deletions(-) commit c167abfada9761e91c4240bbf31032b772081aa9 Author: Emmanuele Bassi Date: Wed Sep 30 17:49:27 2015 +0100 build: Fix typo in the dependencies of the asm rule src/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9bce774e295835578d283df8d9fee86880f83006 Author: Emmanuele Bassi Date: Wed Sep 30 17:35:47 2015 +0100 simd: Fill all channels of the dot3 results / pt.2 The GCC vector implementation of the dot3 product operator should conform to all the other implementations, and set all the channels. This is the equivalent of 2d8e877d40e3012f6430591eb5a8e8b564e19f63 which fixed the scalar implementation. src/graphene-simd4f.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 845f3745181ab72ac7fe4819cecd89531274508a Author: Emmanuele Bassi Date: Wed Sep 30 17:30:01 2015 +0100 simd: Use the appropriate sqrt function We're dealing with single precision floating point values, so we should use sqrtf() to avoid conversions to double precision floating point. src/graphene-simd4f.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 2d8e877d40e3012f6430591eb5a8e8b564e19f63 Author: Emmanuele Bassi Date: Wed Sep 30 17:26:25 2015 +0100 simd: Fill all channels of the dot3 results The scalar implementation of the dot3 product operator should conform to all the other implementations, and set all the channels. This fixes test suite failure we get in the matrix look_at() method: Graphene:ERROR:matrix.c:264:matrix_look_at: [0][3]: __m1[__idx] == __m2[__idx] (+/- 0.0001f): (-nan == 0) Because the SIMD normalize3() operator will try to compute the inverse square root of 0 in the .w channel, resulting in a NaN. src/graphene-simd4f.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 885579cd474d6673f0670e248aaa40985d64e667 Author: Emmanuele Bassi Date: Wed Sep 30 14:05:26 2015 +0100 simd4f: Optimise dup_3f() on NEON Avoids multiple coercions and single line reads by using offsets inside the array. src/graphene-simd4f.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit cd36110e64a6551980434d422f460d5ff3352168 Author: Emmanuele Bassi Date: Wed Sep 30 13:49:07 2015 +0100 simd4f: Optimize dot3 operator for SSE4.1 If we have access to SSE 4.1, we can use the `_mm_dp_ps()` intrinsic to speed up the dot3() product operator. src/graphene-simd4f.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit 9e6ca0196d4488d33886c745d31a7e7466d8b1d3 Author: Emmanuele Bassi Date: Wed Sep 30 13:42:27 2015 +0100 simd4f: Optimize dot3 product We can implement the dot3 operator depending on the SIMD implementation in use, instead of having a generic one, similarly to how we implement the cross3 operator. src/graphene-simd4f.c | 29 ++++++++++++++++++++ src/graphene-simd4f.h | 74 ++++++++++++++++++++++++++++++++++----------------- 2 files changed, 78 insertions(+), 25 deletions(-) commit ff58291e3e9ab9a221486e42c500c42e59b7c064 Author: Emmanuele Bassi Date: Wed Sep 30 12:44:48 2015 +0100 Detect SSE 4.1 intrinsics If we have SSE2 intrinsics then we should also check for the 4.1 instruction set. configure.ac | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) commit 491dabd886ec3f1540b7cfce069f8c0ef2a07ce6 Author: Emmanuele Bassi Date: Wed Sep 30 12:43:38 2015 +0100 Do a better job when detecting SSE2 intrinsics Instead of directly including the intrinsics headers, we can do a check on specific macros and error out more gracefully. configure.ac | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) commit 82869ccf90f39a117be2fb963ccd44f336f4191c Author: Emmanuele Bassi Date: Tue Sep 29 19:57:53 2015 +0100 matrix: Optimise normalize() By computing the scalar inverse of the matrix.ww field we can avoid four costly SIMD divisions in favour of four cheap multiplications. src/graphene-matrix.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) commit 27f311ec34be652409b7acd0d65398f04b4d0d44 Author: Emmanuele Bassi Date: Tue Sep 29 19:56:31 2015 +0100 matrix: Inline transform_bounds() Use the SIMD vector and matrix API, instead of the public graphene_matrix_t one, for better inlining. We should also vectorise the min/max operations instead of using a loop with a bunch of conditionals. src/graphene-matrix.c | 64 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 19 deletions(-) commit 7ddb110d097040e59633768a745954370eb0012f Author: Emmanuele Bassi Date: Tue Sep 29 19:55:45 2015 +0100 matrix: Inline some more functions Use the SIMD vector and matrix types, which inline better. src/graphene-matrix.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) commit fdfef1a8b7740b14dd0fe75015eea3072d74f49d Author: Emmanuele Bassi Date: Tue Sep 29 19:53:42 2015 +0100 simd: Add min_val/max_val operators We want to be able to get the minimum value in a SIMD vector, so that we can avoid a loop (rolled or unrolled). doc/graphene-sections.txt | 2 ++ src/graphene-simd4f.h | 44 ++++++++++++++++++++++++++++++++ src/tests/simd.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+) commit e25c9b4426eb09c53c818be59bbba0afe3378a0b Author: Emmanuele Bassi Date: Thu Sep 24 09:35:39 2015 +0100 tests/matrix: Follow coding style src/tests/matrix.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit d98e9011bcf451504689134ec087bf7f21a6cea7 Author: Emmanuele Bassi Date: Wed Sep 23 18:56:10 2015 +0100 matrix: Inline more functions Instead of calling into public graphene_matrix_t and graphene_vec[234]_t API we can try and use graphene_simd4x4f_t and graphene_simd4f_t functions, which get inlined and avoid intra-library calls. src/graphene-matrix.c | 66 +++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 34 deletions(-) commit 6ba1b807e862c244b82ba6f7cb1f47554676ac04 Author: Emmanuele Bassi Date: Wed Sep 23 18:44:39 2015 +0100 build: Add a make target for inspecting assembly We want to be able to quickly check the assembly code generated by the C compiler, in order to inspect and quickly evaluate if we are regressing. .gitignore | 1 + src/Makefile.am | 9 +++++++++ 2 files changed, 10 insertions(+) commit e3398f4bc1e0a50af51ba6924eaf827e793e91bb Author: Emmanuele Bassi Date: Tue Sep 22 18:18:09 2015 +0100 point3d: Do a compiler check for the SIMD read Apparently, Clang ≤ 3.5 has issues when doing a vectorised partial read from a SIMD type into a pointer to a structure. src/graphene-point3d.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 9f812c6f3c0c78272fb20ca3736020d18136f59c Author: Emmanuele Bassi Date: Tue Sep 22 18:08:37 2015 +0100 point3d: Reintroduce the optimized read Instead of the per-channel read, use a vectorised partial read from the SIMD into the point3d structure. This has been confirmed to work on Clang through the test suite. src/graphene-point3d.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit e957c7b678271bb3bcbdd6e97a37773cdfee5136 Author: Emmanuele Bassi Date: Tue Sep 22 18:02:55 2015 +0100 tests/simd: Do vectorised reads into structures Check if we can count on compiler assistance to do a vectorised read from a SIMD into a structure with the corresponding number of floating point members. src/tests/simd.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit d3ee76c2c4ae1fb5dd27ff5f9009b11961aa5929 Author: Emmanuele Bassi Date: Tue Sep 22 17:54:10 2015 +0100 tests/simd: Add units for dup_[234]f We want to check that we can do a full or partial read from a SIMD vector into an array of floats. src/tests/simd.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) commit db10ba37b5dca09de2636aa2c16c489106c3e0b3 Author: Emmanuele Bassi Date: Tue Sep 22 17:48:18 2015 +0100 Undo optimized reads Apparently, not all releases of Clang can do a partial memcpy from an SSE SIMD vector into a structure laid out as a float array. This warrants a bit more investigations, because it may mean that the graphene_simd4f_dup_[23] API are broken on certain versions of Clang. src/graphene-point.c | 3 ++- src/graphene-point3d.c | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) commit 44c900ea369bb7787ada443174eb7ed76f42dce1 Author: Emmanuele Bassi Date: Tue Sep 22 17:40:46 2015 +0100 point: Use the address of the struct Similarly to what we do when convering a SIMD to a 3D point, use the address of the struct instead of the address of the first element of the struct. src/graphene-point.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b70ef4a7febb149956aa5ef9b69613511b455946 Author: Emmanuele Bassi Date: Tue Sep 22 17:38:35 2015 +0100 point3d: Use the address of the struct When converting from a SIMD vector to a 3D point, use the address of the structure instead of the address of the first element of the structure. This should fix compilation with Clang. src/graphene-point3d.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 15caf83deccba0f1fbf0724baf63c0cba1f44378 Author: Emmanuele Bassi Date: Tue Sep 22 17:23:47 2015 +0100 rect: Add expand() method Based on a similar method in graphene_box_t, which expands the area of the rectangle to include a given point. doc/graphene-sections.txt | 1 + src/graphene-rect.c | 28 ++++++++++++++++++++++++++++ src/graphene-rect.h | 5 +++++ src/tests/rect.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+) commit 78d7ca97dd67428e5b4694ba590226461928dc6c Author: Emmanuele Bassi Date: Tue Sep 22 15:17:36 2015 +0100 point: Add point/vec2 conversion functions Similar to what graphene_point3d_t exposes for vec3. doc/graphene-sections.txt | 2 ++ src/graphene-point.c | 40 ++++++++++++++++++++++++++++++++++++++++ src/graphene-point.h | 9 ++++++++- 3 files changed, 50 insertions(+), 1 deletion(-) commit 43de32966069c6ad8ffe1f3a77cb825752bed551 Author: Emmanuele Bassi Date: Mon Sep 21 18:24:05 2015 +0100 Rename line segment header Since it's a private header, it should have 'private' in the file name, like other private headers. doc/Makefile.am | 2 +- src/Makefile.am | 2 +- src/graphene-line-segment-private.h | 62 +++++++++++++++++++++++++++++++++++++ src/graphene-line-segment.h | 62 ------------------------------------- src/graphene-quad.c | 4 ++- 5 files changed, 67 insertions(+), 65 deletions(-) commit b2b8b10587d02f7e9e2a708610b40dce47f692dd Author: Emmanuele Bassi Date: Mon Sep 21 18:10:30 2015 +0100 Use aligned allocations for all vector-based types All complex types embedding a vector should use the aligned allocator, as we want to ensure that they are allocated correctly. src/graphene-euler.c | 5 +++-- src/graphene-frustum.c | 4 ++-- src/graphene-plane.c | 6 ++++-- src/graphene-sphere.c | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) commit 2e79b084fbeb951192d5bcdc2a340a34ab05292b Author: Emmanuele Bassi Date: Mon Sep 21 12:54:15 2015 +0100 point3d: Optimize vec3 → point3d initializer We call this a fair amount; we can shave some time by avoiding the single channel reads in favour of a single memcpy. src/graphene-point3d.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 16c54d11103b97251088cec13f3e0a272f3ad09f Author: Emmanuele Bassi Date: Mon Sep 21 12:49:34 2015 +0100 box: Use the appropriate initializer We want to turn a vec3 into a point3d, and graphene_point3d_t provides us with a convenient functiont that does precisely that. src/graphene-box.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 1bf3638026289a255ea3731c36c913daf8eaa17b Author: Emmanuele Bassi Date: Mon Sep 21 12:28:26 2015 +0100 Move graphene_size_t to its own header Instead of hijacking the graphene-point.h one. src/Makefile.am | 1 + src/graphene-point.h | 68 --------------------------------- src/graphene-rect.h | 1 + src/graphene-size.c | 2 +- src/graphene-size.h | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/graphene.h | 1 + 6 files changed, 109 insertions(+), 69 deletions(-) commit e449d7c3dac628902da2be142fd0499a41a2a83b Author: Emmanuele Bassi Date: Mon Sep 21 11:02:26 2015 +0100 build: Sort SIMD implementations correctly We want the used SIMD implementation to be the first in the list, for convenience; otherwise, the 'scalar' fallback implementation will always appear first. configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 7b9a7c493a1f0c9f98003d4de3da999019fea53f Author: Emmanuele Bassi Date: Mon Sep 21 10:58:11 2015 +0100 build: Generate pkg-config files at configure time Instead of ad hoc rules inside the automake template, we can use the configuration script to generate the versioned pkg-config files for Graphene. configure.ac | 5 ++++- src/Makefile.am | 10 +--------- 2 files changed, 5 insertions(+), 10 deletions(-) commit 52d090de2faecabf9ea691ef005042bfcbc0e093 Author: Emmanuele Bassi Date: Wed Sep 16 17:08:52 2015 +0100 docs: Reword the description paragraph doc/graphene-docs.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 096c75d8cc0c7d46d470c2b8f610d955ae4b9e17 Author: Emmanuele Bassi Date: Tue Sep 15 15:58:25 2015 +0100 rect: Deprecate round_to_pixel() Let's make it abundantly clear that the correct method is round(). src/graphene-rect.c | 2 ++ src/graphene-rect.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) commit fd3f6b7f4ae354aaaef3ed4c27ef554b15ef8243 Author: Emmanuele Bassi Date: Tue Sep 15 15:53:56 2015 +0100 rect: Provide a replacement for round_to_pixel() The round_to_pixel() method of graphene_rect_t is all kinds of problematic. First of all, it operates in place, whereas we want our mutators to operate on a separate object; then, it mentions "pixels" in the name, when it really has nothing to do with them; finally, it's not clear what it does, as it's not similar to any other operator we have inside the rectangle API. We should simply have a round() method that operates on a copy of the given rectangle, and is clearly tied to the concept of 'rounding' the values of the rectangle's description. doc/graphene-sections.txt | 1 + src/graphene-rect.c | 34 ++++++++++++++++++++++++++++------ src/graphene-rect.h | 3 +++ 3 files changed, 32 insertions(+), 6 deletions(-) commit d91df7715a99f1a2e466c3ce94675c5d85db5e23 Author: Emmanuele Bassi Date: Tue Sep 15 15:27:34 2015 +0100 rect: Add non-mutating versions of various methods The graphene_rect_t API was written before I settled down on the design tenet of providing functions that do not mutate the object. The normalize(), inset(), and offset() methods operate in place on the given rectangle; we should provide equivalent methods that do not mutate the rectangle they are given but, instead, store the result in a separate out argument. doc/graphene-sections.txt | 3 ++ src/graphene-rect.c | 118 ++++++++++++++++++++++++++++++++++++++-------- src/graphene-rect.h | 13 +++++ 3 files changed, 115 insertions(+), 19 deletions(-) commit 8546f986758374ccd0c9857929c0b69a77fa4a72 Author: Emmanuele Bassi Date: Mon Sep 14 15:43:39 2015 +0100 matrix: Add ray transformation Like we allow transforming boxes, spheres, and other Graphene types using the given matrix. doc/graphene-sections.txt | 1 + src/graphene-matrix.c | 29 +++++++++++++++++++++++++++++ src/graphene-matrix.h | 4 ++++ src/tests/ray.c | 22 ++++++++++++++++++++++ 4 files changed, 56 insertions(+) commit 2562a709616e00a41ead2d4a98a207d648bda19e Author: Emmanuele Bassi Date: Sun Sep 13 13:10:32 2015 +0100 tests: Add suite for graphene_ray_t src/tests/.gitignore | 1 + src/tests/Makefile.am | 1 + src/tests/ray.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+) commit 938ddaee3ce8ade6550c3fcb8b954d0cd3ef9c24 Author: Emmanuele Bassi Date: Sat Sep 12 12:34:13 2015 +0100 docs: Add graphene_ray_t Plumbing for getting the API reference. doc/graphene-docs.xml | 5 +++++ doc/graphene-sections.txt | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) commit a31ca181eba0979ea7cb98fd4c392cd1887a0bae Author: Emmanuele Bassi Date: Sat Sep 12 12:33:37 2015 +0100 Add GType goo for graphene_ray_t Function and macro for a new boxed type. src/graphene-gobject.c | 2 ++ src/graphene-gobject.h | 5 +++++ 2 files changed, 7 insertions(+) commit a0d8ab0a4d2c3be88bca2f7567dd41d4e9ca80d7 Author: Emmanuele Bassi Date: Sat Sep 12 12:33:05 2015 +0100 Add graphene_ray_t The beginnings of a simple type for ray casting. src/Makefile.am | 2 + src/graphene-ray.c | 352 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/graphene-ray.h | 98 ++++++++++++++ src/graphene-types.h | 1 + src/graphene.h | 1 + 5 files changed, 454 insertions(+) commit 766df40602ca36d045d27bec719a386800603d67 Author: Emmanuele Bassi Date: Sun Sep 13 12:24:55 2015 +0100 point3d: Add distance() operator We have a distance() operator for the 2D point, but not for the 3D one. doc/graphene-sections.txt | 1 + src/graphene-point3d.c | 35 +++++++++++++++++++++++++++++++++++ src/graphene-point3d.h | 4 ++++ 3 files changed, 40 insertions(+) commit b6721de070f8e301a8265d7926940faaf6a30150 Author: Emmanuele Bassi Date: Fri Sep 11 15:49:16 2015 +0100 Add version macros for 1.4 The new API cycle opens now. src/graphene-version-macros.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit c56c5d5caf536b475f11bdbc33b5930de5c02517 Author: Emmanuele Bassi Date: Fri Sep 11 15:42:23 2015 +0100 Post-branch version bump to 1.3.1 configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 3caf3fc1fd1f257dab601ec683d15182dda3c57f Author: Emmanuele Bassi Date: Fri Sep 11 14:13:40 2015 +0100 tests: Increase coverage of graphene_matrix_t Coverage stats: Hits Total Coverage ------------------------------------ Lines: 145 460 31.5 % Functions: 34 63 54.0 % Still a *long* way to go. src/tests/matrix.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit b139eebfffa4f7ab2ab1b60dd85923000ce9d0ff Author: Emmanuele Bassi Date: Fri Sep 11 14:02:33 2015 +0100 tests: Increase converage of graphene_quaternion_t As measured by lcov: Hit Total Coverage ---------------------------------------- Lines: 163 187 87.2 % Functions: 20 20 100.0 % src/tests/quaternion.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) commit fea554e6cc11a03d6273a8f495c1b95c6d4a7898 Author: Emmanuele Bassi Date: Fri Sep 11 11:46:32 2015 +0100 matrix: Use dot() operator We have a dot() operator for SIMD vectors, we should use it. src/graphene-matrix.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit a6a3c44120b616d01c01d56fa7106219bdebff41 Author: Emmanuele Bassi Date: Fri Sep 11 11:44:51 2015 +0100 matrix: Simplify interal rotate mutator The internal function that we use to rotate a matrix given an (angle, axis) tuple should be simplified: * the angle should be in radians, like most of our internal API * the axis vector should be constified src/graphene-matrix.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit 796d19b17ee044f2e018a629c0d97f00b9d4b5e4 Author: Emmanuele Bassi Date: Thu Sep 10 16:48:58 2015 +0100 docs: Drop repeated 'for the' README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ed8c26df919934da07979cd9e9ba2785bcad510c Author: Emmanuele Bassi Date: Thu Sep 10 16:39:47 2015 +0100 Post-release version bump to 1.2.11 configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)