From 05b710ff6a091d11db7bcf88c72cdac46aa48c20 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 17 Apr 2022 19:58:16 +0200 Subject: [PATCH] Now automatically creates "Libretro" and "FunKey/.sdlretro/cores" Renamed default OPK from nCrafti to Crafti Removed AGG package as it's not needed anymore --- FunKey/Config.in | 1 - .../rootfs-overlay/usr/local/sbin/share | 2 +- .../Native games/{nCrafti.PNG => Crafti.PNG} | Bin .../Native games/{nCrafti.opk => Crafti.opk} | Bin 7917568 -> 7917568 bytes FunKey/configs/funkey_defconfig | 1 - ...rminating-loop-conditions-when-len-1.patch | 81 -------- FunKey/package/agg/0001-autogen.patch | 15 -- ...y-aborting-if-the-co-ordinates-are-t.patch | 40 ---- FunKey/package/agg/0002-caca.patch | 34 --- ...from-previous-vertex-if-last-command.patch | 30 --- ...outline_aa-ignore-close_polygon-when.patch | 138 ------------- .../agg/0005-Remove-VC-6-workaround.patch | 52 ----- ...ement-grain-merge-blending-mode-GIMP.patch | 85 -------- ...ent-grain-extract-blending-mode-GIMP.patch | 85 -------- ...cation-and-division-operators-as-con.patch | 36 ---- ...Add-a-static-identity-transformation.patch | 37 ---- .../0010-Add-renderer_scanline_aa_alpha.patch | 193 ------------------ ...-division-by-zero-in-color-burn-mode.patch | 58 ------ ...oid-pixel-artifacts-when-compositing.patch | 26 --- ...classes-to-allow-access-to-the-origi.patch | 93 --------- ...zero-division-resulting-in-nan-in-ag.patch | 30 --- ...ue-in-the-gamma-table-is-always-zero.patch | 24 --- FunKey/package/agg/CREATE_FILES.patch | 14 -- FunKey/package/agg/Config.in | 13 -- FunKey/package/agg/agg-2.4-depends.patch | 36 ---- FunKey/package/agg/agg-2.5-autotools.patch | 11 - FunKey/package/agg/agg-2.5-pkgconfig.patch | 10 - FunKey/package/agg/agg.mk | 32 --- SDK/Config.in | 1 - SDK/configs/funkey_defconfig | 1 - ...rminating-loop-conditions-when-len-1.patch | 81 -------- SDK/package/agg/0001-autogen.patch | 15 -- ...y-aborting-if-the-co-ordinates-are-t.patch | 40 ---- SDK/package/agg/0002-caca.patch | 34 --- ...from-previous-vertex-if-last-command.patch | 30 --- ...outline_aa-ignore-close_polygon-when.patch | 138 ------------- .../agg/0005-Remove-VC-6-workaround.patch | 52 ----- ...ement-grain-merge-blending-mode-GIMP.patch | 85 -------- ...ent-grain-extract-blending-mode-GIMP.patch | 85 -------- ...cation-and-division-operators-as-con.patch | 36 ---- ...Add-a-static-identity-transformation.patch | 37 ---- .../0010-Add-renderer_scanline_aa_alpha.patch | 193 ------------------ ...-division-by-zero-in-color-burn-mode.patch | 58 ------ ...oid-pixel-artifacts-when-compositing.patch | 26 --- ...classes-to-allow-access-to-the-origi.patch | 93 --------- ...zero-division-resulting-in-nan-in-ag.patch | 30 --- ...ue-in-the-gamma-table-is-always-zero.patch | 24 --- SDK/package/agg/CREATE_FILES.patch | 14 -- SDK/package/agg/Config.in | 13 -- SDK/package/agg/agg-2.4-depends.patch | 36 ---- SDK/package/agg/agg-2.5-autotools.patch | 11 - SDK/package/agg/agg-2.5-pkgconfig.patch | 10 - SDK/package/agg/agg.mk | 32 --- 53 files changed, 1 insertion(+), 2351 deletions(-) rename FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/{nCrafti.PNG => Crafti.PNG} (100%) rename FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/{nCrafti.opk => Crafti.opk} (99%) delete mode 100644 FunKey/package/agg/0001-Fix-non-terminating-loop-conditions-when-len-1.patch delete mode 100644 FunKey/package/agg/0001-autogen.patch delete mode 100644 FunKey/package/agg/0002-Cure-recursion-by-aborting-if-the-co-ordinates-are-t.patch delete mode 100644 FunKey/package/agg/0002-caca.patch delete mode 100644 FunKey/package/agg/0003-Get-coordinates-from-previous-vertex-if-last-command.patch delete mode 100644 FunKey/package/agg/0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch delete mode 100644 FunKey/package/agg/0005-Remove-VC-6-workaround.patch delete mode 100644 FunKey/package/agg/0006-Implement-grain-merge-blending-mode-GIMP.patch delete mode 100644 FunKey/package/agg/0007-Implement-grain-extract-blending-mode-GIMP.patch delete mode 100644 FunKey/package/agg/0008-Declare-multiplication-and-division-operators-as-con.patch delete mode 100644 FunKey/package/agg/0009-Add-a-static-identity-transformation.patch delete mode 100644 FunKey/package/agg/0010-Add-renderer_scanline_aa_alpha.patch delete mode 100644 FunKey/package/agg/0011-Avoid-division-by-zero-in-color-burn-mode.patch delete mode 100644 FunKey/package/agg/0012-Avoid-pixel-artifacts-when-compositing.patch delete mode 100644 FunKey/package/agg/0013-Modify-agg-conv-classes-to-allow-access-to-the-origi.patch delete mode 100644 FunKey/package/agg/0014-Avoid-potential-zero-division-resulting-in-nan-in-ag.patch delete mode 100644 FunKey/package/agg/0015-Ensure-first-value-in-the-gamma-table-is-always-zero.patch delete mode 100644 FunKey/package/agg/CREATE_FILES.patch delete mode 100644 FunKey/package/agg/Config.in delete mode 100644 FunKey/package/agg/agg-2.4-depends.patch delete mode 100644 FunKey/package/agg/agg-2.5-autotools.patch delete mode 100644 FunKey/package/agg/agg-2.5-pkgconfig.patch delete mode 100644 FunKey/package/agg/agg.mk delete mode 100644 SDK/package/agg/0001-Fix-non-terminating-loop-conditions-when-len-1.patch delete mode 100644 SDK/package/agg/0001-autogen.patch delete mode 100644 SDK/package/agg/0002-Cure-recursion-by-aborting-if-the-co-ordinates-are-t.patch delete mode 100644 SDK/package/agg/0002-caca.patch delete mode 100644 SDK/package/agg/0003-Get-coordinates-from-previous-vertex-if-last-command.patch delete mode 100644 SDK/package/agg/0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch delete mode 100644 SDK/package/agg/0005-Remove-VC-6-workaround.patch delete mode 100644 SDK/package/agg/0006-Implement-grain-merge-blending-mode-GIMP.patch delete mode 100644 SDK/package/agg/0007-Implement-grain-extract-blending-mode-GIMP.patch delete mode 100644 SDK/package/agg/0008-Declare-multiplication-and-division-operators-as-con.patch delete mode 100644 SDK/package/agg/0009-Add-a-static-identity-transformation.patch delete mode 100644 SDK/package/agg/0010-Add-renderer_scanline_aa_alpha.patch delete mode 100644 SDK/package/agg/0011-Avoid-division-by-zero-in-color-burn-mode.patch delete mode 100644 SDK/package/agg/0012-Avoid-pixel-artifacts-when-compositing.patch delete mode 100644 SDK/package/agg/0013-Modify-agg-conv-classes-to-allow-access-to-the-origi.patch delete mode 100644 SDK/package/agg/0014-Avoid-potential-zero-division-resulting-in-nan-in-ag.patch delete mode 100644 SDK/package/agg/0015-Ensure-first-value-in-the-gamma-table-is-always-zero.patch delete mode 100644 SDK/package/agg/CREATE_FILES.patch delete mode 100644 SDK/package/agg/Config.in delete mode 100644 SDK/package/agg/agg-2.4-depends.patch delete mode 100644 SDK/package/agg/agg-2.5-autotools.patch delete mode 100644 SDK/package/agg/agg-2.5-pkgconfig.patch delete mode 100644 SDK/package/agg/agg.mk diff --git a/FunKey/Config.in b/FunKey/Config.in index 9eb6313..989b968 100644 --- a/FunKey/Config.in +++ b/FunKey/Config.in @@ -14,7 +14,6 @@ source "$BR2_EXTERNAL_FUNKEY_PATH/package/libini/Config.in" source "$BR2_EXTERNAL_FUNKEY_PATH/package/libopk/Config.in" source "$BR2_EXTERNAL_FUNKEY_PATH/package/libxdgmime/Config.in" source "$BR2_EXTERNAL_FUNKEY_PATH/package/gmenu2x/Config.in" -source "$BR2_EXTERNAL_FUNKEY_PATH/package/agg/Config.in" source "$BR2_EXTERNAL_FUNKEY_PATH/package/fluidlite/Config.in" source "$BR2_EXTERNAL_FUNKEY_PATH/package/libmikmod/Config.in" source "$BR2_EXTERNAL_FUNKEY_PATH/package/commander/Config.in" diff --git a/FunKey/board/funkey/rootfs-overlay/usr/local/sbin/share b/FunKey/board/funkey/rootfs-overlay/usr/local/sbin/share index 03c8254..6aa4beb 100755 --- a/FunKey/board/funkey/rootfs-overlay/usr/local/sbin/share +++ b/FunKey/board/funkey/rootfs-overlay/usr/local/sbin/share @@ -49,7 +49,7 @@ mount_share () { # Create the directory structure if required #(cd /mnt; mkdir -p "Applications" "Emulators" "Games" "Atari lynx" "Game Boy" "Game Boy Color" "Game Boy Advance" "Game Gear" "Neo Geo Pocket" "NES" "PS1" "PS1/bios" "Sega Genesis" "Sega Master System" "SNES" "WonderSwan" "PCE-TurboGrafx") - (cd /mnt; mkdir -p "Emulators" "Atari lynx" "Game Boy" "Game Boy Color" "Game Boy Advance" "Game Gear" "Neo Geo Pocket" "NES" "PS1" "PS1/bios" "Sega Genesis" "Sega Master System" "SNES" "WonderSwan" "PCE-TurboGrafx") + (cd /mnt; mkdir -p "Libretro" "FunKey/.sdlretro/cores" "Emulators" "Atari lynx" "Game Boy" "Game Boy Color" "Game Boy Advance" "Game Gear" "Neo Geo Pocket" "NES" "PS1" "PS1/bios" "Sega Genesis" "Sega Master System" "SNES" "WonderSwan" "PCE-TurboGrafx") # Check if there is a firmware update file if [ -f /mnt/FunKey-*.fwu ]; then diff --git a/FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/nCrafti.PNG b/FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/Crafti.PNG similarity index 100% rename from FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/nCrafti.PNG rename to FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/Crafti.PNG diff --git a/FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/nCrafti.opk b/FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/Crafti.opk similarity index 99% rename from FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/nCrafti.opk rename to FunKey/board/funkey/rootfs-overlay/usr/local/share/OPKs/Native games/Crafti.opk index e24bfc2d5f0a1c99c7c155613e41edb1ee914fc8..090c4ea49dc52b92d8b0cf0c337ed406e0d15e5d 100644 GIT binary patch delta 53256 zcmXV0WmMD;uvHLHI;2awLApVtrJE(CyE}g>EFIF_wJaswAl=;{-Al*P@&4z%ch8w~ z=FZ2NFEe-UkKAprgK)qg zTrda^4EhKL;e$a0U=Se~L<9yAgFz%<5Gfc$1_qIXK@?yRB^dMx459*qsKFo_Fo+fm zq635I!5{`Oh!G580)v>rAQmu)6%1kngV@0!4lw957{mz%ae+bHU=R-�v)TfkFIW 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 Ih3U+p!j%cdZtb*QXYl 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%0A(53*&^o{9t|q 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

-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 V0RjU6Xv287fx~!z4406@cnn*$c>w?b diff --git a/FunKey/configs/funkey_defconfig b/FunKey/configs/funkey_defconfig index efb09b6..08c7478 100644 --- a/FunKey/configs/funkey_defconfig +++ b/FunKey/configs/funkey_defconfig @@ -115,7 +115,6 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS=y BR2_PACKAGE_LIBOPK=y BR2_PACKAGE_LIBXDGMIME=y BR2_PACKAGE_GMENU2X=y -BR2_PACKAGE_AGG=y BR2_PACKAGE_FLUIDLITE=y BR2_PACKAGE_LIBMIKMOD=y BR2_PACKAGE_COMMANDER=y diff --git a/FunKey/package/agg/0001-Fix-non-terminating-loop-conditions-when-len-1.patch b/FunKey/package/agg/0001-Fix-non-terminating-loop-conditions-when-len-1.patch deleted file mode 100644 index eaf0467..0000000 --- a/FunKey/package/agg/0001-Fix-non-terminating-loop-conditions-when-len-1.patch +++ /dev/null @@ -1,81 +0,0 @@ -From efd33aad5e69f36ab343b1f28839a55db4538104 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 10:55:37 +0100 -Subject: [PATCH 01/15] Fix non-terminating loop conditions when len=1 - -- while(abs(sx - lp.x1) + abs(sy - lp.y1) > lp2.len) -+ while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len) - { - sx = (lp.x1 + sx) >> 1; - sy = (lp.y1 + sy) >> 1; - } ---- - include/agg_renderer_outline_aa.h | 8 ++++---- - include/agg_renderer_outline_image.h | 4 ++-- - 2 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/include/agg_renderer_outline_aa.h b/include/agg_renderer_outline_aa.h -index ce25a2e..cb2aa00 100644 ---- a/include/agg_renderer_outline_aa.h -+++ b/include/agg_renderer_outline_aa.h -@@ -1659,7 +1659,7 @@ namespace agg - } - else - { -- while(abs(sx - lp.x1) + abs(sy - lp.y1) > lp2.len) -+ while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len) - { - sx = (lp.x1 + sx) >> 1; - sy = (lp.y1 + sy) >> 1; -@@ -1726,7 +1726,7 @@ namespace agg - } - else - { -- while(abs(ex - lp.x2) + abs(ey - lp.y2) > lp2.len) -+ while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len) - { - ex = (lp.x2 + ex) >> 1; - ey = (lp.y2 + ey) >> 1; -@@ -1798,7 +1798,7 @@ namespace agg - } - else - { -- while(abs(sx - lp.x1) + abs(sy - lp.y1) > lp2.len) -+ while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len) - { - sx = (lp.x1 + sx) >> 1; - sy = (lp.y1 + sy) >> 1; -@@ -1811,7 +1811,7 @@ namespace agg - } - else - { -- while(abs(ex - lp.x2) + abs(ey - lp.y2) > lp2.len) -+ while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len) - { - ex = (lp.x2 + ex) >> 1; - ey = (lp.y2 + ey) >> 1; -diff --git a/include/agg_renderer_outline_image.h b/include/agg_renderer_outline_image.h -index fbfac10..66d2b9a 100644 ---- a/include/agg_renderer_outline_image.h -+++ b/include/agg_renderer_outline_image.h -@@ -969,7 +969,7 @@ namespace agg - } - else - { -- while(abs(sx - lp.x1) + abs(sy - lp.y1) > lp2.len) -+ while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len) - { - sx = (lp.x1 + sx) >> 1; - sy = (lp.y1 + sy) >> 1; -@@ -982,7 +982,7 @@ namespace agg - } - else - { -- while(abs(ex - lp.x2) + abs(ey - lp.y2) > lp2.len) -+ while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len) - { - ex = (lp.x2 + ex) >> 1; - ey = (lp.y2 + ey) >> 1; --- -1.8.1.4 - diff --git a/FunKey/package/agg/0001-autogen.patch b/FunKey/package/agg/0001-autogen.patch deleted file mode 100644 index b773f12..0000000 --- a/FunKey/package/agg/0001-autogen.patch +++ /dev/null @@ -1,15 +0,0 @@ -Author: Andrea Veri -Description: Disable configure's run from the autogen file. - -Index: agg-2.5+dfsg1/autogen.sh -=================================================================== ---- a/autogen.sh 2007-10-11 00:06:16.000000000 +0200 -+++ b/autogen.sh 2012-05-01 16:57:37.916862783 +0200 -@@ -18,6 +18,6 @@ - automake --foreign --add-missing --ignore-deps - - # and finally invoke our new configure --./configure $* -+[ -n "$NOCONFIGURE" ] || ./configure $* - - # end diff --git a/FunKey/package/agg/0002-Cure-recursion-by-aborting-if-the-co-ordinates-are-t.patch b/FunKey/package/agg/0002-Cure-recursion-by-aborting-if-the-co-ordinates-are-t.patch deleted file mode 100644 index 4fe7434..0000000 --- a/FunKey/package/agg/0002-Cure-recursion-by-aborting-if-the-co-ordinates-are-t.patch +++ /dev/null @@ -1,40 +0,0 @@ -From e269fe9b62af6fe314cebe0ee7a6d6d1a4a84d1c Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 11:03:26 +0100 -Subject: [PATCH 02/15] Cure recursion by aborting if the co-ordinates are to - big to handle - ---- - include/agg_rasterizer_cells_aa.h | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/include/agg_rasterizer_cells_aa.h b/include/agg_rasterizer_cells_aa.h -index d3bb138..3a616d9 100644 ---- a/include/agg_rasterizer_cells_aa.h -+++ b/include/agg_rasterizer_cells_aa.h -@@ -40,7 +40,8 @@ - #define AGG_RASTERIZER_CELLS_AA_INCLUDED - - #include --#include -+#include -+#include - #include "agg_math.h" - #include "agg_array.h" - -@@ -333,6 +334,12 @@ namespace agg - { - int cx = (x1 + x2) >> 1; - int cy = (y1 + y2) >> 1; -+ -+ // Bail if values are so large they are likely to wrap -+ if ((std::abs(x1) >= std::numeric_limits::max()/2) || (std::abs(y1) >= std::numeric_limits::max()/2) || -+ (std::abs(x2) >= std::numeric_limits::max()/2) || (std::abs(y2) >= std::numeric_limits::max()/2)) -+ return; -+ - line(x1, y1, cx, cy); - line(cx, cy, x2, y2); - } --- -1.8.1.4 - diff --git a/FunKey/package/agg/0002-caca.patch b/FunKey/package/agg/0002-caca.patch deleted file mode 100644 index f98a573..0000000 --- a/FunKey/package/agg/0002-caca.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/configure.in -+++ b/configure.in -@@ -39,7 +39,7 @@ - # used as platform library in examples: - # todo, make the PREFERED_PLATFORM selectable, after the set of possible - # Platforms to link the examples have been evaluated. --PREFERED_PLATFORM=X11 -+PREFERED_PLATFORM=sdl - case "$host" in - *darwin* ) - OSX_LIBS="-framework Carbon -framework QuickTime" -@@ -120,9 +120,7 @@ - if test "$no_x" = "yes"; then - AC_MSG_WARN([*** X11 not found! Omitting X11 layer.]) - fi --AM_CONDITIONAL(ENABLE_X11,[test x$no_x = x -a xno != x$enable_platform -a x$win32_host != xyes]) --AC_SUBST(x_includes) --AC_SUBST(x_libraries) -+AM_CONDITIONAL(ENABLE_X11,0) - dnl ############################################### - - dnl Settung up library version - ---- a/include/agg_renderer_outline_aa.h -+++ b/include/agg_renderer_outline_aa.h -@@ -1375,7 +1375,7 @@ - //--------------------------------------------------------------------- - void profile(const line_profile_aa& prof) { m_profile = &prof; } - const line_profile_aa& profile() const { return *m_profile; } -- line_profile_aa& profile() { return *m_profile; } -+// line_profile_aa& profile() { return *m_profile; } - - //--------------------------------------------------------------------- - int subpixel_width() const { return m_profile->subpixel_width(); } diff --git a/FunKey/package/agg/0003-Get-coordinates-from-previous-vertex-if-last-command.patch b/FunKey/package/agg/0003-Get-coordinates-from-previous-vertex-if-last-command.patch deleted file mode 100644 index b12684d..0000000 --- a/FunKey/package/agg/0003-Get-coordinates-from-previous-vertex-if-last-command.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 032d5342430f4c5dfbc34a2817d67386a14fd51b Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 11:40:49 +0100 -Subject: [PATCH 03/15] Get coordinates from previous vertex if last command is - path_cmd_end_poly - ---- - include/agg_path_storage.h | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/include/agg_path_storage.h b/include/agg_path_storage.h -index 7be7393..8922fc8 100644 ---- a/include/agg_path_storage.h -+++ b/include/agg_path_storage.h -@@ -878,6 +878,12 @@ namespace agg - *x += x2; - *y += y2; - } -+ else if (!is_stop(m_vertices.last_command()) && -+ is_vertex(m_vertices.prev_vertex(&x2, &y2))) -+ { -+ *x += x2; -+ *y += y2; -+ } - } - } - --- -1.8.1.4 - diff --git a/FunKey/package/agg/0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch b/FunKey/package/agg/0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch deleted file mode 100644 index 0cecaf7..0000000 --- a/FunKey/package/agg/0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch +++ /dev/null @@ -1,138 +0,0 @@ -From b9c4b1c72b4ad6b24c37f402d3eec39ef393b0eb Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 14:17:43 +0100 -Subject: [PATCH 04/15] Make rasterizer_outline_aa ignore close_polygon when - vertex count < 3 - ---- - include/agg_rasterizer_outline_aa.h | 107 ++++++++++++++++++------------------ - 1 file changed, 52 insertions(+), 55 deletions(-) - -diff --git a/include/agg_rasterizer_outline_aa.h b/include/agg_rasterizer_outline_aa.h -index 4d6dd57..24301d5 100644 ---- a/include/agg_rasterizer_outline_aa.h -+++ b/include/agg_rasterizer_outline_aa.h -@@ -333,68 +333,65 @@ namespace agg - int y2; - int lprev; - -- if(close_polygon) -+ if(close_polygon && (m_src_vertices.size() >= 3)) - { -- if(m_src_vertices.size() >= 3) -+ dv.idx = 2; -+ -+ v = &m_src_vertices[m_src_vertices.size() - 1]; -+ x1 = v->x; -+ y1 = v->y; -+ lprev = v->len; -+ -+ v = &m_src_vertices[0]; -+ x2 = v->x; -+ y2 = v->y; -+ dv.lcurr = v->len; -+ line_parameters prev(x1, y1, x2, y2, lprev); -+ -+ v = &m_src_vertices[1]; -+ dv.x1 = v->x; -+ dv.y1 = v->y; -+ dv.lnext = v->len; -+ dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr); -+ -+ v = &m_src_vertices[dv.idx]; -+ dv.x2 = v->x; -+ dv.y2 = v->y; -+ dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext); -+ -+ dv.xb1 = 0; -+ dv.yb1 = 0; -+ dv.xb2 = 0; -+ dv.yb2 = 0; -+ -+ switch(m_line_join) - { -- dv.idx = 2; -- -- v = &m_src_vertices[m_src_vertices.size() - 1]; -- x1 = v->x; -- y1 = v->y; -- lprev = v->len; -- -- v = &m_src_vertices[0]; -- x2 = v->x; -- y2 = v->y; -- dv.lcurr = v->len; -- line_parameters prev(x1, y1, x2, y2, lprev); -- -- v = &m_src_vertices[1]; -- dv.x1 = v->x; -- dv.y1 = v->y; -- dv.lnext = v->len; -- dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr); -- -- v = &m_src_vertices[dv.idx]; -- dv.x2 = v->x; -- dv.y2 = v->y; -- dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext); -- -- dv.xb1 = 0; -- dv.yb1 = 0; -- dv.xb2 = 0; -- dv.yb2 = 0; -- -- switch(m_line_join) -- { -- case outline_no_join: -- dv.flags = 3; -- break; -+ case outline_no_join: -+ dv.flags = 3; -+ break; - -- case outline_miter_join: -- case outline_round_join: -- dv.flags = -- (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) | -- ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1); -- break; -+ case outline_miter_join: -+ case outline_round_join: -+ dv.flags = -+ (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) | -+ ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1); -+ break; - -- case outline_miter_accurate_join: -- dv.flags = 0; -- break; -- } -+ case outline_miter_accurate_join: -+ dv.flags = 0; -+ break; -+ } - -- if((dv.flags & 1) == 0 && m_line_join != outline_round_join) -- { -- bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1); -- } -+ if((dv.flags & 1) == 0 && m_line_join != outline_round_join) -+ { -+ bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1); -+ } - -- if((dv.flags & 2) == 0 && m_line_join != outline_round_join) -- { -- bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2); -- } -- draw(dv, 0, m_src_vertices.size()); -+ if((dv.flags & 2) == 0 && m_line_join != outline_round_join) -+ { -+ bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2); - } -+ draw(dv, 0, m_src_vertices.size()); - } - else - { --- -1.8.1.4 - diff --git a/FunKey/package/agg/0005-Remove-VC-6-workaround.patch b/FunKey/package/agg/0005-Remove-VC-6-workaround.patch deleted file mode 100644 index f38f7c4..0000000 --- a/FunKey/package/agg/0005-Remove-VC-6-workaround.patch +++ /dev/null @@ -1,52 +0,0 @@ -From b8c43fb0ba13af0cc2b1050f48f81d76d2fdf0c7 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 15:04:05 +0100 -Subject: [PATCH 05/15] Remove VC++ 6 workaround - ---- - include/agg_renderer_scanline.h | 29 +---------------------------- - 1 file changed, 1 insertion(+), 28 deletions(-) - -diff --git a/include/agg_renderer_scanline.h b/include/agg_renderer_scanline.h -index c3bb6f0..c27ca60 100644 ---- a/include/agg_renderer_scanline.h -+++ b/include/agg_renderer_scanline.h -@@ -79,34 +79,7 @@ namespace agg - sl.reset(ras.min_x(), ras.max_x()); - while(ras.sweep_scanline(sl)) - { -- //render_scanline_aa_solid(sl, ren, ren_color); -- -- // This code is equivalent to the above call (copy/paste). -- // It's just a "manual" optimization for old compilers, -- // like Microsoft Visual C++ v6.0 -- //------------------------------- -- int y = sl.y(); -- unsigned num_spans = sl.num_spans(); -- typename Scanline::const_iterator span = sl.begin(); -- -- for(;;) -- { -- int x = span->x; -- if(span->len > 0) -- { -- ren.blend_solid_hspan(x, y, (unsigned)span->len, -- ren_color, -- span->covers); -- } -- else -- { -- ren.blend_hline(x, y, (unsigned)(x - span->len - 1), -- ren_color, -- *(span->covers)); -- } -- if(--num_spans == 0) break; -- ++span; -- } -+ render_scanline_aa_solid(sl, ren, ren_color); - } - } - } --- -1.8.1.4 - diff --git a/FunKey/package/agg/0006-Implement-grain-merge-blending-mode-GIMP.patch b/FunKey/package/agg/0006-Implement-grain-merge-blending-mode-GIMP.patch deleted file mode 100644 index f1e465b..0000000 --- a/FunKey/package/agg/0006-Implement-grain-merge-blending-mode-GIMP.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 9422570f4e099a834fc43619f7b2a7eb6b442e25 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 15:31:01 +0100 -Subject: [PATCH 06/15] Implement grain-merge blending mode (GIMP) - ---- - include/agg_pixfmt_rgba.h | 42 ++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 40 insertions(+), 2 deletions(-) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index 79d10dc..f576ce4 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -1401,9 +1401,46 @@ namespace agg - } - }; - -+ //================================================comp_op_rgba_grain_merge -+ template struct comp_op_rgba_grain_merge -+ { -+ typedef ColorT color_type; -+ typedef Order order_type; -+ typedef typename color_type::value_type value_type; -+ typedef typename color_type::calc_type calc_type; -+ typedef typename color_type::long_type long_type; -+ enum base_scale_e -+ { -+ base_shift = color_type::base_shift, -+ base_mask = color_type::base_mask -+ }; - -+ // E = I + M - 128 -+ static AGG_INLINE void blend_pix(value_type* p, -+ unsigned sr, unsigned sg, unsigned sb, -+ unsigned sa, unsigned cover) -+ { - -- -+ if(cover < 255) -+ { -+ sr = (sr * cover + 255) >> 8; -+ sg = (sg * cover + 255) >> 8; -+ sb = (sb * cover + 255) >> 8; -+ sa = (sa * cover + 255) >> 8; -+ } -+ if(sa) -+ { -+ calc_type da = p[Order::A]; -+ int dr = sr + p[Order::R] - 128; -+ int dg = sg + p[Order::G] - 128; -+ int db = sb + p[Order::B] - 128; -+ p[Order::R] = (value_type)(dr < 0 ? 0 : (dr > 255 ? 255 : dr)); -+ p[Order::G] = (value_type)(dg < 0 ? 0 : (dg > 255 ? 255 : dg)); -+ p[Order::B] = (value_type)(db < 0 ? 0 : (db > 255 ? 255 : db)); -+ p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); -+ } -+ } -+ }; - - //======================================================comp_op_table_rgba - template struct comp_op_table_rgba -@@ -1451,6 +1488,7 @@ namespace agg - comp_op_rgba_contrast ::blend_pix, - comp_op_rgba_invert ::blend_pix, - comp_op_rgba_invert_rgb ::blend_pix, -+ comp_op_rgba_grain_merge::blend_pix, - 0 - }; - -@@ -1486,6 +1524,7 @@ namespace agg - comp_op_contrast, //----comp_op_contrast - comp_op_invert, //----comp_op_invert - comp_op_invert_rgb, //----comp_op_invert_rgb -+ comp_op_grain_merge, //----comp_op_grain_merge - - end_of_comp_op_e - }; -@@ -2908,4 +2947,3 @@ namespace agg - } - - #endif -- --- -1.8.1.4 - diff --git a/FunKey/package/agg/0007-Implement-grain-extract-blending-mode-GIMP.patch b/FunKey/package/agg/0007-Implement-grain-extract-blending-mode-GIMP.patch deleted file mode 100644 index cafb36e..0000000 --- a/FunKey/package/agg/0007-Implement-grain-extract-blending-mode-GIMP.patch +++ /dev/null @@ -1,85 +0,0 @@ -From abd440342e166a90d08610bf5b31d2a8357eafbe Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 15:43:18 +0100 -Subject: [PATCH 07/15] Implement grain-extract blending mode (GIMP) - ---- - include/agg_pixfmt_rgba.h | 48 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 48 insertions(+) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index f576ce4..42f0a05 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -1442,6 +1442,52 @@ namespace agg - } - }; - -+ //==============================================comp_op_rgba_grain_extract -+ template struct comp_op_rgba_grain_extract -+ { -+ typedef ColorT color_type; -+ typedef Order order_type; -+ typedef typename color_type::value_type value_type; -+ typedef typename color_type::calc_type calc_type; -+ typedef typename color_type::long_type long_type; -+ enum base_scale_e -+ { -+ base_shift = color_type::base_shift, -+ base_mask = color_type::base_mask -+ }; -+ -+ // E = I - M + 128 -+ static AGG_INLINE void blend_pix(value_type* p, -+ unsigned sr, unsigned sg, unsigned sb, -+ unsigned sa, unsigned cover) -+ { -+ calc_type da = (p[Order::A] * sa + 255) >> 8; -+ -+ int dr = p[Order::R] - sr + 128; -+ int dg = p[Order::G] - sg + 128; -+ int db = p[Order::B] - sb + 128; -+ -+ dr = dr < 0 ? 0 : (dr > 255 ? 255 : dr); -+ dg = dg < 0 ? 0 : (dg > 255 ? 255 : dg); -+ db = db < 0 ? 0 : (db > 255 ? 255 : db); -+ -+ p[Order::A] = da; -+ -+ if(da < 255) -+ { -+ p[Order::R] = (dr * da + 255) >> 8; -+ p[Order::G] = (dg * da + 255) >> 8; -+ p[Order::B] = (db * da + 255) >> 8; -+ } -+ else -+ { -+ p[Order::R] = dr; -+ p[Order::G] = dg; -+ p[Order::B] = db; -+ } -+ } -+ }; -+ - //======================================================comp_op_table_rgba - template struct comp_op_table_rgba - { -@@ -1489,6 +1535,7 @@ namespace agg - comp_op_rgba_invert ::blend_pix, - comp_op_rgba_invert_rgb ::blend_pix, - comp_op_rgba_grain_merge::blend_pix, -+ comp_op_rgba_grain_extract::blend_pix, - 0 - }; - -@@ -1525,6 +1572,7 @@ namespace agg - comp_op_invert, //----comp_op_invert - comp_op_invert_rgb, //----comp_op_invert_rgb - comp_op_grain_merge, //----comp_op_grain_merge -+ comp_op_grain_extract, //----comp_op_grain_extract - - end_of_comp_op_e - }; --- -1.8.1.4 - diff --git a/FunKey/package/agg/0008-Declare-multiplication-and-division-operators-as-con.patch b/FunKey/package/agg/0008-Declare-multiplication-and-division-operators-as-con.patch deleted file mode 100644 index 0ed92ee..0000000 --- a/FunKey/package/agg/0008-Declare-multiplication-and-division-operators-as-con.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 2688af280836b95908d3cfd6915510d55de673b8 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 16:15:01 +0100 -Subject: [PATCH 08/15] Declare multiplication and division operators as const - ---- - include/agg_trans_affine.h | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/include/agg_trans_affine.h b/include/agg_trans_affine.h -index a662099..2f602a0 100644 ---- a/include/agg_trans_affine.h -+++ b/include/agg_trans_affine.h -@@ -216,15 +216,15 @@ namespace agg - } - - // Multiply the matrix by another one and return -- // the result in a separete matrix. -- trans_affine operator * (const trans_affine& m) -+ // the result in a separate matrix. -+ trans_affine operator * (const trans_affine& m) const - { - return trans_affine(*this).multiply(m); - } - - // Multiply the matrix by inverse of another one -- // and return the result in a separete matrix. -- trans_affine operator / (const trans_affine& m) -+ // and return the result in a separate matrix. -+ trans_affine operator / (const trans_affine& m) const - { - return trans_affine(*this).multiply_inv(m); - } --- -1.8.1.4 - diff --git a/FunKey/package/agg/0009-Add-a-static-identity-transformation.patch b/FunKey/package/agg/0009-Add-a-static-identity-transformation.patch deleted file mode 100644 index 01555cb..0000000 --- a/FunKey/package/agg/0009-Add-a-static-identity-transformation.patch +++ /dev/null @@ -1,37 +0,0 @@ -From be9ed90897bc43b4547a3a1f8046827caaf13b4c Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 16:15:36 +0100 -Subject: [PATCH 09/15] Add a static identity transformation - ---- - include/agg_trans_affine.h | 1 + - src/agg_trans_affine.cpp | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/include/agg_trans_affine.h b/include/agg_trans_affine.h -index 2f602a0..67fe5ca 100644 ---- a/include/agg_trans_affine.h -+++ b/include/agg_trans_affine.h -@@ -92,6 +92,7 @@ namespace agg - //---------------------------------------------------------------------- - struct trans_affine - { -+ static const trans_affine identity; - double sx, shy, shx, sy, tx, ty; - - //------------------------------------------ Construction -diff --git a/src/agg_trans_affine.cpp b/src/agg_trans_affine.cpp -index aca18c2..b3d9bc0 100644 ---- a/src/agg_trans_affine.cpp -+++ b/src/agg_trans_affine.cpp -@@ -28,6 +28,7 @@ - - namespace agg - { -+ const trans_affine trans_affine::identity; - - //------------------------------------------------------------------------ - const trans_affine& trans_affine::parl_to_parl(const double* src, --- -1.8.1.4 - diff --git a/FunKey/package/agg/0010-Add-renderer_scanline_aa_alpha.patch b/FunKey/package/agg/0010-Add-renderer_scanline_aa_alpha.patch deleted file mode 100644 index b0be258..0000000 --- a/FunKey/package/agg/0010-Add-renderer_scanline_aa_alpha.patch +++ /dev/null @@ -1,193 +0,0 @@ -From 749c8cd11e9e6f81e93ae5ce19258431722b6bdf Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 16:43:25 +0100 -Subject: [PATCH 10/15] Add renderer_scanline_aa_alpha - ---- - include/agg_pixfmt_rgba.h | 24 +++++++++++++- - include/agg_renderer_base.h | 28 ++++++++++++++++ - include/agg_renderer_scanline.h | 71 +++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 122 insertions(+), 1 deletion(-) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index 42f0a05..6c4bc37 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -2247,7 +2247,6 @@ namespace agg - } - - -- - //-------------------------------------------------------------------- - void blend_color_vspan(int x, int y, - unsigned len, -@@ -2751,6 +2750,29 @@ namespace agg - } - - //-------------------------------------------------------------------- -+ void blend_color_hspan_alpha(int x, int y, unsigned len, -+ const color_type* colors, -+ value_type alpha, -+ const int8u* covers, -+ int8u cover) -+ { -+ value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); -+ do -+ { -+ blender_type::blend_pix(m_comp_op, -+ p, -+ (colors->r * alpha + 255) >> 8, -+ (colors->g * alpha + 255) >> 8, -+ (colors->b * alpha + 255) >> 8, -+ (colors->a * alpha + 255) >> 8, -+ covers ? *covers++ : cover); -+ p += 4; -+ ++colors; -+ } -+ while(--len); -+ } -+ -+ //-------------------------------------------------------------------- - void blend_color_vspan(int x, int y, unsigned len, - const color_type* colors, - const int8u* covers, -diff --git a/include/agg_renderer_base.h b/include/agg_renderer_base.h -index 1808944..25f07c3 100644 ---- a/include/agg_renderer_base.h -+++ b/include/agg_renderer_base.h -@@ -37,6 +37,7 @@ namespace agg - public: - typedef PixelFormat pixfmt_type; - typedef typename pixfmt_type::color_type color_type; -+ typedef typename pixfmt_type::color_type::value_type value_type; - typedef typename pixfmt_type::row_data row_data; - - //-------------------------------------------------------------------- -@@ -383,6 +384,33 @@ namespace agg - } - - //-------------------------------------------------------------------- -+ void blend_color_hspan_alpha(int x, int y, int len, -+ const color_type* colors, -+ value_type alpha, -+ const cover_type* covers, -+ cover_type cover = agg::cover_full) -+ { -+ if(y > ymax()) return; -+ if(y < ymin()) return; -+ -+ if(x < xmin()) -+ { -+ int d = xmin() - x; -+ len -= d; -+ if(len <= 0) return; -+ if(covers) covers += d; -+ colors += d; -+ x = xmin(); -+ } -+ if(x + len > xmax()) -+ { -+ len = xmax() - x + 1; -+ if(len <= 0) return; -+ } -+ m_ren->blend_color_hspan_alpha(x, y, len, colors, alpha, covers, cover); -+ } -+ -+ //-------------------------------------------------------------------- - void blend_color_vspan(int x, int y, int len, - const color_type* colors, - const cover_type* covers, -diff --git a/include/agg_renderer_scanline.h b/include/agg_renderer_scanline.h -index c27ca60..4fcb557 100644 ---- a/include/agg_renderer_scanline.h -+++ b/include/agg_renderer_scanline.h -@@ -156,6 +156,35 @@ namespace agg - } - } - -+ //================================================render_scanline_aa_alpha -+ template -+ void render_scanline_aa_alpha(const Scanline& sl, BaseRenderer& ren, -+ SpanAllocator& alloc, SpanGenerator& span_gen, -+ unsigned alpha) -+ { -+ int y = sl.y(); -+ -+ unsigned num_spans = sl.num_spans(); -+ typename Scanline::const_iterator span = sl.begin(); -+ for(;;) -+ { -+ int x = span->x; -+ int len = span->len; -+ const typename Scanline::cover_type* covers = span->covers; -+ -+ if(len < 0) len = -len; -+ typename BaseRenderer::color_type* colors = alloc.allocate(len); -+ span_gen.generate(colors, x, y, len); -+ ren.blend_color_hspan_alpha(x, y, len, colors, alpha, -+ (span->len < 0) ? 0 : covers, *covers); -+ -+ if(--num_spans == 0) break; -+ ++span; -+ } -+ } -+ -+ - //=====================================================render_scanlines_aa - template -@@ -216,8 +245,50 @@ namespace agg - }; - - -+ //==============================================renderer_scanline_aa_alpha -+ template -+ class renderer_scanline_aa_alpha -+ { -+ public: -+ typedef BaseRenderer base_ren_type; -+ typedef SpanAllocator alloc_type; -+ typedef SpanGenerator span_gen_type; - -+ //-------------------------------------------------------------------- -+ renderer_scanline_aa_alpha() : m_ren(0), m_alloc(0), m_span_gen(0), m_alpha(1.0) {} -+ renderer_scanline_aa_alpha(base_ren_type& ren, -+ alloc_type& alloc, -+ span_gen_type& span_gen, -+ unsigned alpha) : -+ m_ren(&ren), -+ m_alloc(&alloc), -+ m_span_gen(&span_gen), -+ m_alpha(alpha) -+ {} -+ void attach(base_ren_type& ren, -+ alloc_type& alloc, -+ span_gen_type& span_gen) -+ { -+ m_ren = &ren; -+ m_alloc = &alloc; -+ m_span_gen = &span_gen; -+ } - -+ //-------------------------------------------------------------------- -+ void prepare() { m_span_gen->prepare(); } -+ -+ //-------------------------------------------------------------------- -+ template void render(const Scanline& sl) -+ { -+ render_scanline_aa_alpha(sl, *m_ren, *m_alloc, *m_span_gen, m_alpha); -+ } -+ -+ private: -+ base_ren_type* m_ren; -+ alloc_type* m_alloc; -+ span_gen_type* m_span_gen; -+ unsigned m_alpha; -+ }; - - - //===============================================render_scanline_bin_solid --- -1.8.1.4 - diff --git a/FunKey/package/agg/0011-Avoid-division-by-zero-in-color-burn-mode.patch b/FunKey/package/agg/0011-Avoid-division-by-zero-in-color-burn-mode.patch deleted file mode 100644 index 2a0d198..0000000 --- a/FunKey/package/agg/0011-Avoid-division-by-zero-in-color-burn-mode.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 0ec68d7f5695403eccac75025ba7f6f7ecf1814e Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 16:49:08 +0100 -Subject: [PATCH 11/15] Avoid division by zero in color-burn mode - -FIXME: re-work using latest math from http://www.w3.org/TR/SVGCompositing/ ---- - include/agg_pixfmt_rgba.h | 21 ++++++++++++++++++--- - 1 file changed, 18 insertions(+), 3 deletions(-) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index 6c4bc37..5d6b511 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -1027,6 +1027,21 @@ namespace agg - // Dca' = Sa.(Sca.Da + Dca.Sa - Sa.Da)/Sca + Sca.(1 - Da) + Dca.(1 - Sa) - // - // Da' = Sa + Da - Sa.Da -+ -+ -+ // http://www.w3.org/TR/SVGCompositing/ -+ // if Sca == 0 and Dca == Da -+ // Dca' = Sa × Da + Sca × (1 - Da) + Dca × (1 - Sa) -+ // = Sa × Da + Dca × (1 - Sa) -+ // = Da = Dca -+ // otherwise if Sca == 0 -+ // Dca' = Sca × (1 - Da) + Dca × (1 - Sa) -+ // = Dca × (1 - Sa) -+ // otherwise if Sca > 0 -+ // Dca' = Sa × Da - Sa × Da × min(1, (1 - Dca/Da) × Sa/Sca) + Sca × (1 - Da) + Dca × (1 - Sa) -+ // = Sa × Da × (1 - min(1, (1 - Dca/Da) × Sa/Sca)) + Sca × (1 - Da) + Dca × (1 - Sa) -+ -+ // sa * da * (255 - std::min(255, (255 - p[0]/da)*(sa/(sc*sa)) + - static AGG_INLINE void blend_pix(value_type* p, - unsigned sr, unsigned sg, unsigned sb, - unsigned sa, unsigned cover) -@@ -1056,15 +1071,15 @@ namespace agg - - p[Order::R] = (value_type)(((srda + drsa <= sada) ? - sr * d1a + dr * s1a : -- sa * (srda + drsa - sada) / sr + sr * d1a + dr * s1a + base_mask) >> base_shift); -+ (sr > 0 ? sa * (srda + drsa - sada) / sr + sr * d1a + dr * s1a + base_mask : 0)) >> base_shift); - - p[Order::G] = (value_type)(((sgda + dgsa <= sada) ? - sg * d1a + dg * s1a : -- sa * (sgda + dgsa - sada) / sg + sg * d1a + dg * s1a + base_mask) >> base_shift); -+ (sg > 0 ? sa * (sgda + dgsa - sada) / sg + sg * d1a + dg * s1a + base_mask : 0)) >> base_shift); - - p[Order::B] = (value_type)(((sbda + dbsa <= sada) ? - sb * d1a + db * s1a : -- sa * (sbda + dbsa - sada) / sb + sb * d1a + db * s1a + base_mask) >> base_shift); -+ (sb > 0 ? sa * (sbda + dbsa - sada) / sb + sb * d1a + db * s1a + base_mask : 0)) >> base_shift); - - p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); - } --- -1.8.1.4 - diff --git a/FunKey/package/agg/0012-Avoid-pixel-artifacts-when-compositing.patch b/FunKey/package/agg/0012-Avoid-pixel-artifacts-when-compositing.patch deleted file mode 100644 index b3e641e..0000000 --- a/FunKey/package/agg/0012-Avoid-pixel-artifacts-when-compositing.patch +++ /dev/null @@ -1,26 +0,0 @@ -From bf0e0b71360cfbc690a29f4abe15d7b9b61b8479 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sat, 22 Jun 2013 12:11:54 +0100 -Subject: [PATCH 12/15] Avoid pixel artifacts when compositing - -Change src_over alpha to avoid pixel artifacts by reordering computations. ---- - include/agg_pixfmt_rgba.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index 5d6b511..bb255cd 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -346,7 +346,7 @@ namespace agg - p[Order::R] = (value_type)(sr + ((p[Order::R] * s1a + base_mask) >> base_shift)); - p[Order::G] = (value_type)(sg + ((p[Order::G] * s1a + base_mask) >> base_shift)); - p[Order::B] = (value_type)(sb + ((p[Order::B] * s1a + base_mask) >> base_shift)); -- p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift)); -+ p[Order::A] = (value_type)(sa + ((p[Order::A] * s1a + base_mask) >> base_shift)); - } - }; - --- -1.8.1.4 - diff --git a/FunKey/package/agg/0013-Modify-agg-conv-classes-to-allow-access-to-the-origi.patch b/FunKey/package/agg/0013-Modify-agg-conv-classes-to-allow-access-to-the-origi.patch deleted file mode 100644 index 9deb904..0000000 --- a/FunKey/package/agg/0013-Modify-agg-conv-classes-to-allow-access-to-the-origi.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 6f1ab5f4b470bcf4e7e72aac6e2f7f6ee3e7b424 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sat, 22 Jun 2013 12:16:42 +0100 -Subject: [PATCH 13/15] Modify agg conv classes to allow access to the original - geometry type - ---- - include/agg_conv_adaptor_vcgen.h | 2 ++ - include/agg_conv_adaptor_vpgen.h | 1 + - include/agg_conv_clip_polygon.h | 1 + - include/agg_conv_clip_polyline.h | 1 + - include/agg_conv_smooth_poly1.h | 2 ++ - 5 files changed, 7 insertions(+) - -diff --git a/include/agg_conv_adaptor_vcgen.h b/include/agg_conv_adaptor_vcgen.h -index 7bd9b07..fef4579 100644 ---- a/include/agg_conv_adaptor_vcgen.h -+++ b/include/agg_conv_adaptor_vcgen.h -@@ -38,6 +38,7 @@ namespace agg - - void rewind(unsigned) {} - unsigned vertex(double*, double*) { return path_cmd_stop; } -+ unsigned type() const { return 0; } - }; - - -@@ -73,6 +74,7 @@ namespace agg - } - - unsigned vertex(double* x, double* y); -+ unsigned type() const { return m_source->type(); } - - private: - // Prohibit copying -diff --git a/include/agg_conv_adaptor_vpgen.h b/include/agg_conv_adaptor_vpgen.h -index dca9415..a39102d 100644 ---- a/include/agg_conv_adaptor_vpgen.h -+++ b/include/agg_conv_adaptor_vpgen.h -@@ -42,6 +42,7 @@ namespace agg - - void rewind(unsigned path_id); - unsigned vertex(double* x, double* y); -+ unsigned type() const { return m_source->type(); } - - private: - conv_adaptor_vpgen(const conv_adaptor_vpgen&); -diff --git a/include/agg_conv_clip_polygon.h b/include/agg_conv_clip_polygon.h -index 3c34590..e417a7d 100644 ---- a/include/agg_conv_clip_polygon.h -+++ b/include/agg_conv_clip_polygon.h -@@ -60,6 +60,7 @@ namespace agg - double y1() const { return base_type::vpgen().y1(); } - double x2() const { return base_type::vpgen().x2(); } - double y2() const { return base_type::vpgen().y2(); } -+ unsigned type() const { return base_type::type(); } - - private: - conv_clip_polygon(const conv_clip_polygon&); -diff --git a/include/agg_conv_clip_polyline.h b/include/agg_conv_clip_polyline.h -index d45067f..0de4b57 100644 ---- a/include/agg_conv_clip_polyline.h -+++ b/include/agg_conv_clip_polyline.h -@@ -60,6 +60,7 @@ namespace agg - double y1() const { return base_type::vpgen().y1(); } - double x2() const { return base_type::vpgen().x2(); } - double y2() const { return base_type::vpgen().y2(); } -+ unsigned type() const { return base_type::type(); } - - private: - conv_clip_polyline(const conv_clip_polyline&); -diff --git a/include/agg_conv_smooth_poly1.h b/include/agg_conv_smooth_poly1.h -index 15f7f8d..0956c4e 100644 ---- a/include/agg_conv_smooth_poly1.h -+++ b/include/agg_conv_smooth_poly1.h -@@ -48,6 +48,7 @@ namespace agg - - void smooth_value(double v) { base_type::generator().smooth_value(v); } - double smooth_value() const { return base_type::generator().smooth_value(); } -+ unsigned type() const { return base_type::type(); } - - private: - conv_smooth_poly1(const conv_smooth_poly1&); -@@ -70,6 +71,7 @@ namespace agg - - void smooth_value(double v) { m_smooth.generator().smooth_value(v); } - double smooth_value() const { return m_smooth.generator().smooth_value(); } -+ unsigned type() const { return m_smooth.type(); } - - private: - conv_smooth_poly1_curve(const conv_smooth_poly1_curve&); --- -1.8.1.4 - diff --git a/FunKey/package/agg/0014-Avoid-potential-zero-division-resulting-in-nan-in-ag.patch b/FunKey/package/agg/0014-Avoid-potential-zero-division-resulting-in-nan-in-ag.patch deleted file mode 100644 index 547b0d2..0000000 --- a/FunKey/package/agg/0014-Avoid-potential-zero-division-resulting-in-nan-in-ag.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 6433a64f4cd41e88499386b0b7c7ae05d30683b8 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sat, 22 Jun 2013 12:33:32 +0100 -Subject: [PATCH 14/15] Avoid potential zero division resulting in nan in - agg::gamma_linear - ---- - include/agg_gamma_functions.h | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/include/agg_gamma_functions.h b/include/agg_gamma_functions.h -index fa38a45..beb0c04 100644 ---- a/include/agg_gamma_functions.h -+++ b/include/agg_gamma_functions.h -@@ -94,7 +94,11 @@ namespace agg - { - if(x < m_start) return 0.0; - if(x > m_end) return 1.0; -- return (x - m_start) / (m_end - m_start); -+ double delta = m_end - m_start; -+ // avoid nan from potential zero division -+ // https://github.com/mapnik/mapnik/issues/761 -+ if (delta <= 0.0) return 0.0; -+ return (x - m_start) / delta; - } - - private: --- -1.8.1.4 - diff --git a/FunKey/package/agg/0015-Ensure-first-value-in-the-gamma-table-is-always-zero.patch b/FunKey/package/agg/0015-Ensure-first-value-in-the-gamma-table-is-always-zero.patch deleted file mode 100644 index 6214bd6..0000000 --- a/FunKey/package/agg/0015-Ensure-first-value-in-the-gamma-table-is-always-zero.patch +++ /dev/null @@ -1,24 +0,0 @@ -From ca818d4dcd428c5560fc3c341fbaf427a7485e32 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sat, 22 Jun 2013 12:34:37 +0100 -Subject: [PATCH 15/15] Ensure first value in the gamma table is always zero - ---- - include/agg_gamma_functions.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/include/agg_gamma_functions.h b/include/agg_gamma_functions.h -index beb0c04..b8eda52 100644 ---- a/include/agg_gamma_functions.h -+++ b/include/agg_gamma_functions.h -@@ -49,6 +49,7 @@ namespace agg - - double operator() (double x) const - { -+ if (x == 0.0) return 0.0; - return pow(x, m_gamma); - } - --- -1.8.1.4 - diff --git a/FunKey/package/agg/CREATE_FILES.patch b/FunKey/package/agg/CREATE_FILES.patch deleted file mode 100644 index 1a78125..0000000 --- a/FunKey/package/agg/CREATE_FILES.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/README.orig 2007-01-07 13:58:28.000000000 +0000 -+++ b/README 2007-01-07 14:02:40.000000000 +0000 -@@ -0,0 +1 @@ -+cacac - ---- a/NEWS.orig 2007-01-07 13:58:28.000000000 +0000 -+++ b/NEWS 2007-01-07 14:02:40.000000000 +0000 -@@ -0,0 +1 @@ -+cacac - ---- a/AUTHORS.orig 2007-01-07 13:58:28.000000000 +0000 -+++ b/AUTHORS 2007-01-07 14:02:40.000000000 +0000 -@@ -0,0 +1 @@ -+cacac diff --git a/FunKey/package/agg/Config.in b/FunKey/package/agg/Config.in deleted file mode 100644 index a842098..0000000 --- a/FunKey/package/agg/Config.in +++ /dev/null @@ -1,13 +0,0 @@ -config BR2_PACKAGE_AGG - bool "agg" - depends on BR2_INSTALL_LIBSTDCPP - select BR2_PACKAGE_SDL - help - The Anti-Grain Geometry project. A High Quality 2D Graphics Rendering - Engine for C++. - We select the SDL backend by default. - - http://www.antigrain.com/index.html - -comment "agg needs a toolchain with C++ support" - depends on !BR2_INSTALL_LIBSTDCPP diff --git a/FunKey/package/agg/agg-2.4-depends.patch b/FunKey/package/agg/agg-2.4-depends.patch deleted file mode 100644 index f5506e2..0000000 --- a/FunKey/package/agg/agg-2.4-depends.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- agg-2.4.orig/font_freetype/Makefile.am 2005-10-18 11:45:40.000000000 +0100 -+++ agg-2.4/font_freetype/Makefile.am 2006-07-10 15:11:55.000000000 +0100 -@@ -4,8 +4,9 @@ - agginclude_HEADERS = agg_font_freetype.h - lib_LTLIBRARIES = libaggfontfreetype.la - --libaggfontfreetype_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ @FREETYPE_LIBS@ -+libaggfontfreetype_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ - libaggfontfreetype_la_SOURCES = agg_font_freetype.cpp - libaggfontfreetype_la_CXXFLAGS = -I$(top_srcdir)/include @FREETYPE_CFLAGS@ -+libaggfontfreetype_la_LIBADD = ../src/libagg.la @FREETYPE_LIBS@ - endif - ---- agg-2.4.orig/src/platform/sdl/Makefile.am 2005-10-17 23:49:35.000000000 +0100 -+++ agg-2.4/src/platform/sdl/Makefile.am 2006-07-10 15:11:55.000000000 +0100 -@@ -5,6 +5,6 @@ - libaggplatformsdl_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ - libaggplatformsdl_la_SOURCES = agg_platform_support.cpp - libaggplatformsdl_la_CXXFLAGS = -I$(top_srcdir)/include @SDL_CFLAGS@ --libaggplatformsdl_la_LIBADD = @SDL_LIBS@ -+libaggplatformsdl_la_LIBADD = ../../libagg.la @SDL_LIBS@ - endif - ---- agg-2.5.orig/src/platform/X11/Makefile.am 2006-12-11 00:59:45.000000000 +0000 -+++ agg-2.5/src/platform/X11/Makefile.am 2007-01-07 14:07:39.000000000 +0000 -@@ -1,8 +1,8 @@ - if ENABLE_X11 - lib_LTLIBRARIES = libaggplatformX11.la - --libaggplatformX11_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ -L@x_libraries@ -+libaggplatformX11_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ @X_LDFLAGS@ - libaggplatformX11_la_SOURCES = agg_platform_support.cpp - libaggplatformX11_la_CXXFLAGS = -I$(top_srcdir)/include -I@x_includes@ --libaggplatformX11_la_LIBADD = -lX11 -+libaggplatformX11_la_LIBADD = ../../libagg.la -lX11 - endif diff --git a/FunKey/package/agg/agg-2.5-autotools.patch b/FunKey/package/agg/agg-2.5-autotools.patch deleted file mode 100644 index 1272b65..0000000 --- a/FunKey/package/agg/agg-2.5-autotools.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/configure.in 2013-02-22 09:30:00.000000000 -0600 -+++ b/configure.in 2013-02-22 09:30:49.030777571 -0600 -@@ -8,7 +8,7 @@ - AC_PROG_CC - AC_PROG_CXX - AC_ISC_POSIX --AM_C_PROTOTYPES -+#AM_C_PROTOTYPES - if test "x$U" != "x"; then - AC_MSG_ERROR(Compiler not ANSI compliant) - fi diff --git a/FunKey/package/agg/agg-2.5-pkgconfig.patch b/FunKey/package/agg/agg-2.5-pkgconfig.patch deleted file mode 100644 index a303bfb..0000000 --- a/FunKey/package/agg/agg-2.5-pkgconfig.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- agg-2.5/libagg.pc.in.orig 2007-01-07 13:58:28.000000000 +0000 -+++ agg-2.5/libagg.pc.in 2007-01-07 14:02:40.000000000 +0000 -@@ -6,5 +6,6 @@ - Name: libagg - Description: Anti Grain Geometry - A High Quality Rendering Engine for C++ - Version: @VERSION@ --Libs: -L${libdir} -Wl,-rpath,${exec_prefix}/lib -lagg -+Requires.private: freetype2 -+Libs: -L${libdir} -lagg - Cflags: -I${includedir} diff --git a/FunKey/package/agg/agg.mk b/FunKey/package/agg/agg.mk deleted file mode 100644 index ecf5749..0000000 --- a/FunKey/package/agg/agg.mk +++ /dev/null @@ -1,32 +0,0 @@ -############################################################################### -# -# agg -# -############################################################################### - -AGG_VERSION = 2.5 -AGG_SOURCE = agg-$(AGG_VERSION).tar.gz -AGG_SITE = https://ftp.osuosl.org/pub/blfs/8.0/a -AGG_LICENSE = GPLv3+ -AGG_LICENSE_FILES = COPYING -AGG_INSTALL_STAGING = YES -AGG_AUTORECONF = YES - -AGG_DEPENDENCIES = host-pkgconf sdl - -AGG_CONF_OPTS = \ - --with-sdl-prefix=$(STAGING_DIR)/usr \ - --disable-sdltest - -AGG_CONF_OPTS += \ - --with-x=NO \ - --disable-examples --disable-gpc - -ifeq ($(BR2_PACKAGE_FREETYPE),y) -AGG_DEPENDENCIES += freetype -AGG_CONF_OPTS += --enable-freetype -else -AGG_CONF_OPTS += --disable-freetype -endif - -$(eval $(autotools-package)) diff --git a/SDK/Config.in b/SDK/Config.in index 984b74f..d43a5c0 100644 --- a/SDK/Config.in +++ b/SDK/Config.in @@ -2,6 +2,5 @@ source "$BR2_EXTERNAL_SDK_PATH/package/dmtx-utils/Config.in" source "$BR2_EXTERNAL_SDK_PATH/package/libini/Config.in" source "$BR2_EXTERNAL_SDK_PATH/package/libopk/Config.in" source "$BR2_EXTERNAL_SDK_PATH/package/libxdgmime/Config.in" -source "$BR2_EXTERNAL_SDK_PATH/package/agg/Config.in" source "$BR2_EXTERNAL_SDK_PATH/package/fluidlite/Config.in" source "$BR2_EXTERNAL_SDK_PATH/package/libmikmod/Config.in" diff --git a/SDK/configs/funkey_defconfig b/SDK/configs/funkey_defconfig index 0cc96e1..b4dc4c7 100644 --- a/SDK/configs/funkey_defconfig +++ b/SDK/configs/funkey_defconfig @@ -78,6 +78,5 @@ BR2_PACKAGE_HOST_SQUASHFS=y BR2_PACKAGE_HOST_UBOOT_TOOLS=y BR2_PACKAGE_LIBOPK=y BR2_PACKAGE_LIBXDGMIME=y -BR2_PACKAGE_AGG=y BR2_PACKAGE_FLUIDLITE=y BR2_PACKAGE_LIBMIKMOD=y diff --git a/SDK/package/agg/0001-Fix-non-terminating-loop-conditions-when-len-1.patch b/SDK/package/agg/0001-Fix-non-terminating-loop-conditions-when-len-1.patch deleted file mode 100644 index eaf0467..0000000 --- a/SDK/package/agg/0001-Fix-non-terminating-loop-conditions-when-len-1.patch +++ /dev/null @@ -1,81 +0,0 @@ -From efd33aad5e69f36ab343b1f28839a55db4538104 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 10:55:37 +0100 -Subject: [PATCH 01/15] Fix non-terminating loop conditions when len=1 - -- while(abs(sx - lp.x1) + abs(sy - lp.y1) > lp2.len) -+ while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len) - { - sx = (lp.x1 + sx) >> 1; - sy = (lp.y1 + sy) >> 1; - } ---- - include/agg_renderer_outline_aa.h | 8 ++++---- - include/agg_renderer_outline_image.h | 4 ++-- - 2 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/include/agg_renderer_outline_aa.h b/include/agg_renderer_outline_aa.h -index ce25a2e..cb2aa00 100644 ---- a/include/agg_renderer_outline_aa.h -+++ b/include/agg_renderer_outline_aa.h -@@ -1659,7 +1659,7 @@ namespace agg - } - else - { -- while(abs(sx - lp.x1) + abs(sy - lp.y1) > lp2.len) -+ while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len) - { - sx = (lp.x1 + sx) >> 1; - sy = (lp.y1 + sy) >> 1; -@@ -1726,7 +1726,7 @@ namespace agg - } - else - { -- while(abs(ex - lp.x2) + abs(ey - lp.y2) > lp2.len) -+ while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len) - { - ex = (lp.x2 + ex) >> 1; - ey = (lp.y2 + ey) >> 1; -@@ -1798,7 +1798,7 @@ namespace agg - } - else - { -- while(abs(sx - lp.x1) + abs(sy - lp.y1) > lp2.len) -+ while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len) - { - sx = (lp.x1 + sx) >> 1; - sy = (lp.y1 + sy) >> 1; -@@ -1811,7 +1811,7 @@ namespace agg - } - else - { -- while(abs(ex - lp.x2) + abs(ey - lp.y2) > lp2.len) -+ while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len) - { - ex = (lp.x2 + ex) >> 1; - ey = (lp.y2 + ey) >> 1; -diff --git a/include/agg_renderer_outline_image.h b/include/agg_renderer_outline_image.h -index fbfac10..66d2b9a 100644 ---- a/include/agg_renderer_outline_image.h -+++ b/include/agg_renderer_outline_image.h -@@ -969,7 +969,7 @@ namespace agg - } - else - { -- while(abs(sx - lp.x1) + abs(sy - lp.y1) > lp2.len) -+ while(abs(sx - lp.x1) + abs(sy - lp.y1) > 1 + lp2.len) - { - sx = (lp.x1 + sx) >> 1; - sy = (lp.y1 + sy) >> 1; -@@ -982,7 +982,7 @@ namespace agg - } - else - { -- while(abs(ex - lp.x2) + abs(ey - lp.y2) > lp2.len) -+ while(abs(ex - lp.x2) + abs(ey - lp.y2) > 1 + lp2.len) - { - ex = (lp.x2 + ex) >> 1; - ey = (lp.y2 + ey) >> 1; --- -1.8.1.4 - diff --git a/SDK/package/agg/0001-autogen.patch b/SDK/package/agg/0001-autogen.patch deleted file mode 100644 index b773f12..0000000 --- a/SDK/package/agg/0001-autogen.patch +++ /dev/null @@ -1,15 +0,0 @@ -Author: Andrea Veri -Description: Disable configure's run from the autogen file. - -Index: agg-2.5+dfsg1/autogen.sh -=================================================================== ---- a/autogen.sh 2007-10-11 00:06:16.000000000 +0200 -+++ b/autogen.sh 2012-05-01 16:57:37.916862783 +0200 -@@ -18,6 +18,6 @@ - automake --foreign --add-missing --ignore-deps - - # and finally invoke our new configure --./configure $* -+[ -n "$NOCONFIGURE" ] || ./configure $* - - # end diff --git a/SDK/package/agg/0002-Cure-recursion-by-aborting-if-the-co-ordinates-are-t.patch b/SDK/package/agg/0002-Cure-recursion-by-aborting-if-the-co-ordinates-are-t.patch deleted file mode 100644 index 4fe7434..0000000 --- a/SDK/package/agg/0002-Cure-recursion-by-aborting-if-the-co-ordinates-are-t.patch +++ /dev/null @@ -1,40 +0,0 @@ -From e269fe9b62af6fe314cebe0ee7a6d6d1a4a84d1c Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 11:03:26 +0100 -Subject: [PATCH 02/15] Cure recursion by aborting if the co-ordinates are to - big to handle - ---- - include/agg_rasterizer_cells_aa.h | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/include/agg_rasterizer_cells_aa.h b/include/agg_rasterizer_cells_aa.h -index d3bb138..3a616d9 100644 ---- a/include/agg_rasterizer_cells_aa.h -+++ b/include/agg_rasterizer_cells_aa.h -@@ -40,7 +40,8 @@ - #define AGG_RASTERIZER_CELLS_AA_INCLUDED - - #include --#include -+#include -+#include - #include "agg_math.h" - #include "agg_array.h" - -@@ -333,6 +334,12 @@ namespace agg - { - int cx = (x1 + x2) >> 1; - int cy = (y1 + y2) >> 1; -+ -+ // Bail if values are so large they are likely to wrap -+ if ((std::abs(x1) >= std::numeric_limits::max()/2) || (std::abs(y1) >= std::numeric_limits::max()/2) || -+ (std::abs(x2) >= std::numeric_limits::max()/2) || (std::abs(y2) >= std::numeric_limits::max()/2)) -+ return; -+ - line(x1, y1, cx, cy); - line(cx, cy, x2, y2); - } --- -1.8.1.4 - diff --git a/SDK/package/agg/0002-caca.patch b/SDK/package/agg/0002-caca.patch deleted file mode 100644 index f98a573..0000000 --- a/SDK/package/agg/0002-caca.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/configure.in -+++ b/configure.in -@@ -39,7 +39,7 @@ - # used as platform library in examples: - # todo, make the PREFERED_PLATFORM selectable, after the set of possible - # Platforms to link the examples have been evaluated. --PREFERED_PLATFORM=X11 -+PREFERED_PLATFORM=sdl - case "$host" in - *darwin* ) - OSX_LIBS="-framework Carbon -framework QuickTime" -@@ -120,9 +120,7 @@ - if test "$no_x" = "yes"; then - AC_MSG_WARN([*** X11 not found! Omitting X11 layer.]) - fi --AM_CONDITIONAL(ENABLE_X11,[test x$no_x = x -a xno != x$enable_platform -a x$win32_host != xyes]) --AC_SUBST(x_includes) --AC_SUBST(x_libraries) -+AM_CONDITIONAL(ENABLE_X11,0) - dnl ############################################### - - dnl Settung up library version - ---- a/include/agg_renderer_outline_aa.h -+++ b/include/agg_renderer_outline_aa.h -@@ -1375,7 +1375,7 @@ - //--------------------------------------------------------------------- - void profile(const line_profile_aa& prof) { m_profile = &prof; } - const line_profile_aa& profile() const { return *m_profile; } -- line_profile_aa& profile() { return *m_profile; } -+// line_profile_aa& profile() { return *m_profile; } - - //--------------------------------------------------------------------- - int subpixel_width() const { return m_profile->subpixel_width(); } diff --git a/SDK/package/agg/0003-Get-coordinates-from-previous-vertex-if-last-command.patch b/SDK/package/agg/0003-Get-coordinates-from-previous-vertex-if-last-command.patch deleted file mode 100644 index b12684d..0000000 --- a/SDK/package/agg/0003-Get-coordinates-from-previous-vertex-if-last-command.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 032d5342430f4c5dfbc34a2817d67386a14fd51b Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 11:40:49 +0100 -Subject: [PATCH 03/15] Get coordinates from previous vertex if last command is - path_cmd_end_poly - ---- - include/agg_path_storage.h | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/include/agg_path_storage.h b/include/agg_path_storage.h -index 7be7393..8922fc8 100644 ---- a/include/agg_path_storage.h -+++ b/include/agg_path_storage.h -@@ -878,6 +878,12 @@ namespace agg - *x += x2; - *y += y2; - } -+ else if (!is_stop(m_vertices.last_command()) && -+ is_vertex(m_vertices.prev_vertex(&x2, &y2))) -+ { -+ *x += x2; -+ *y += y2; -+ } - } - } - --- -1.8.1.4 - diff --git a/SDK/package/agg/0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch b/SDK/package/agg/0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch deleted file mode 100644 index 0cecaf7..0000000 --- a/SDK/package/agg/0004-Make-rasterizer_outline_aa-ignore-close_polygon-when.patch +++ /dev/null @@ -1,138 +0,0 @@ -From b9c4b1c72b4ad6b24c37f402d3eec39ef393b0eb Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 14:17:43 +0100 -Subject: [PATCH 04/15] Make rasterizer_outline_aa ignore close_polygon when - vertex count < 3 - ---- - include/agg_rasterizer_outline_aa.h | 107 ++++++++++++++++++------------------ - 1 file changed, 52 insertions(+), 55 deletions(-) - -diff --git a/include/agg_rasterizer_outline_aa.h b/include/agg_rasterizer_outline_aa.h -index 4d6dd57..24301d5 100644 ---- a/include/agg_rasterizer_outline_aa.h -+++ b/include/agg_rasterizer_outline_aa.h -@@ -333,68 +333,65 @@ namespace agg - int y2; - int lprev; - -- if(close_polygon) -+ if(close_polygon && (m_src_vertices.size() >= 3)) - { -- if(m_src_vertices.size() >= 3) -+ dv.idx = 2; -+ -+ v = &m_src_vertices[m_src_vertices.size() - 1]; -+ x1 = v->x; -+ y1 = v->y; -+ lprev = v->len; -+ -+ v = &m_src_vertices[0]; -+ x2 = v->x; -+ y2 = v->y; -+ dv.lcurr = v->len; -+ line_parameters prev(x1, y1, x2, y2, lprev); -+ -+ v = &m_src_vertices[1]; -+ dv.x1 = v->x; -+ dv.y1 = v->y; -+ dv.lnext = v->len; -+ dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr); -+ -+ v = &m_src_vertices[dv.idx]; -+ dv.x2 = v->x; -+ dv.y2 = v->y; -+ dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext); -+ -+ dv.xb1 = 0; -+ dv.yb1 = 0; -+ dv.xb2 = 0; -+ dv.yb2 = 0; -+ -+ switch(m_line_join) - { -- dv.idx = 2; -- -- v = &m_src_vertices[m_src_vertices.size() - 1]; -- x1 = v->x; -- y1 = v->y; -- lprev = v->len; -- -- v = &m_src_vertices[0]; -- x2 = v->x; -- y2 = v->y; -- dv.lcurr = v->len; -- line_parameters prev(x1, y1, x2, y2, lprev); -- -- v = &m_src_vertices[1]; -- dv.x1 = v->x; -- dv.y1 = v->y; -- dv.lnext = v->len; -- dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr); -- -- v = &m_src_vertices[dv.idx]; -- dv.x2 = v->x; -- dv.y2 = v->y; -- dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext); -- -- dv.xb1 = 0; -- dv.yb1 = 0; -- dv.xb2 = 0; -- dv.yb2 = 0; -- -- switch(m_line_join) -- { -- case outline_no_join: -- dv.flags = 3; -- break; -+ case outline_no_join: -+ dv.flags = 3; -+ break; - -- case outline_miter_join: -- case outline_round_join: -- dv.flags = -- (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) | -- ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1); -- break; -+ case outline_miter_join: -+ case outline_round_join: -+ dv.flags = -+ (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) | -+ ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1); -+ break; - -- case outline_miter_accurate_join: -- dv.flags = 0; -- break; -- } -+ case outline_miter_accurate_join: -+ dv.flags = 0; -+ break; -+ } - -- if((dv.flags & 1) == 0 && m_line_join != outline_round_join) -- { -- bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1); -- } -+ if((dv.flags & 1) == 0 && m_line_join != outline_round_join) -+ { -+ bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1); -+ } - -- if((dv.flags & 2) == 0 && m_line_join != outline_round_join) -- { -- bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2); -- } -- draw(dv, 0, m_src_vertices.size()); -+ if((dv.flags & 2) == 0 && m_line_join != outline_round_join) -+ { -+ bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2); - } -+ draw(dv, 0, m_src_vertices.size()); - } - else - { --- -1.8.1.4 - diff --git a/SDK/package/agg/0005-Remove-VC-6-workaround.patch b/SDK/package/agg/0005-Remove-VC-6-workaround.patch deleted file mode 100644 index f38f7c4..0000000 --- a/SDK/package/agg/0005-Remove-VC-6-workaround.patch +++ /dev/null @@ -1,52 +0,0 @@ -From b8c43fb0ba13af0cc2b1050f48f81d76d2fdf0c7 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 15:04:05 +0100 -Subject: [PATCH 05/15] Remove VC++ 6 workaround - ---- - include/agg_renderer_scanline.h | 29 +---------------------------- - 1 file changed, 1 insertion(+), 28 deletions(-) - -diff --git a/include/agg_renderer_scanline.h b/include/agg_renderer_scanline.h -index c3bb6f0..c27ca60 100644 ---- a/include/agg_renderer_scanline.h -+++ b/include/agg_renderer_scanline.h -@@ -79,34 +79,7 @@ namespace agg - sl.reset(ras.min_x(), ras.max_x()); - while(ras.sweep_scanline(sl)) - { -- //render_scanline_aa_solid(sl, ren, ren_color); -- -- // This code is equivalent to the above call (copy/paste). -- // It's just a "manual" optimization for old compilers, -- // like Microsoft Visual C++ v6.0 -- //------------------------------- -- int y = sl.y(); -- unsigned num_spans = sl.num_spans(); -- typename Scanline::const_iterator span = sl.begin(); -- -- for(;;) -- { -- int x = span->x; -- if(span->len > 0) -- { -- ren.blend_solid_hspan(x, y, (unsigned)span->len, -- ren_color, -- span->covers); -- } -- else -- { -- ren.blend_hline(x, y, (unsigned)(x - span->len - 1), -- ren_color, -- *(span->covers)); -- } -- if(--num_spans == 0) break; -- ++span; -- } -+ render_scanline_aa_solid(sl, ren, ren_color); - } - } - } --- -1.8.1.4 - diff --git a/SDK/package/agg/0006-Implement-grain-merge-blending-mode-GIMP.patch b/SDK/package/agg/0006-Implement-grain-merge-blending-mode-GIMP.patch deleted file mode 100644 index f1e465b..0000000 --- a/SDK/package/agg/0006-Implement-grain-merge-blending-mode-GIMP.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 9422570f4e099a834fc43619f7b2a7eb6b442e25 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 15:31:01 +0100 -Subject: [PATCH 06/15] Implement grain-merge blending mode (GIMP) - ---- - include/agg_pixfmt_rgba.h | 42 ++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 40 insertions(+), 2 deletions(-) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index 79d10dc..f576ce4 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -1401,9 +1401,46 @@ namespace agg - } - }; - -+ //================================================comp_op_rgba_grain_merge -+ template struct comp_op_rgba_grain_merge -+ { -+ typedef ColorT color_type; -+ typedef Order order_type; -+ typedef typename color_type::value_type value_type; -+ typedef typename color_type::calc_type calc_type; -+ typedef typename color_type::long_type long_type; -+ enum base_scale_e -+ { -+ base_shift = color_type::base_shift, -+ base_mask = color_type::base_mask -+ }; - -+ // E = I + M - 128 -+ static AGG_INLINE void blend_pix(value_type* p, -+ unsigned sr, unsigned sg, unsigned sb, -+ unsigned sa, unsigned cover) -+ { - -- -+ if(cover < 255) -+ { -+ sr = (sr * cover + 255) >> 8; -+ sg = (sg * cover + 255) >> 8; -+ sb = (sb * cover + 255) >> 8; -+ sa = (sa * cover + 255) >> 8; -+ } -+ if(sa) -+ { -+ calc_type da = p[Order::A]; -+ int dr = sr + p[Order::R] - 128; -+ int dg = sg + p[Order::G] - 128; -+ int db = sb + p[Order::B] - 128; -+ p[Order::R] = (value_type)(dr < 0 ? 0 : (dr > 255 ? 255 : dr)); -+ p[Order::G] = (value_type)(dg < 0 ? 0 : (dg > 255 ? 255 : dg)); -+ p[Order::B] = (value_type)(db < 0 ? 0 : (db > 255 ? 255 : db)); -+ p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); -+ } -+ } -+ }; - - //======================================================comp_op_table_rgba - template struct comp_op_table_rgba -@@ -1451,6 +1488,7 @@ namespace agg - comp_op_rgba_contrast ::blend_pix, - comp_op_rgba_invert ::blend_pix, - comp_op_rgba_invert_rgb ::blend_pix, -+ comp_op_rgba_grain_merge::blend_pix, - 0 - }; - -@@ -1486,6 +1524,7 @@ namespace agg - comp_op_contrast, //----comp_op_contrast - comp_op_invert, //----comp_op_invert - comp_op_invert_rgb, //----comp_op_invert_rgb -+ comp_op_grain_merge, //----comp_op_grain_merge - - end_of_comp_op_e - }; -@@ -2908,4 +2947,3 @@ namespace agg - } - - #endif -- --- -1.8.1.4 - diff --git a/SDK/package/agg/0007-Implement-grain-extract-blending-mode-GIMP.patch b/SDK/package/agg/0007-Implement-grain-extract-blending-mode-GIMP.patch deleted file mode 100644 index cafb36e..0000000 --- a/SDK/package/agg/0007-Implement-grain-extract-blending-mode-GIMP.patch +++ /dev/null @@ -1,85 +0,0 @@ -From abd440342e166a90d08610bf5b31d2a8357eafbe Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 15:43:18 +0100 -Subject: [PATCH 07/15] Implement grain-extract blending mode (GIMP) - ---- - include/agg_pixfmt_rgba.h | 48 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 48 insertions(+) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index f576ce4..42f0a05 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -1442,6 +1442,52 @@ namespace agg - } - }; - -+ //==============================================comp_op_rgba_grain_extract -+ template struct comp_op_rgba_grain_extract -+ { -+ typedef ColorT color_type; -+ typedef Order order_type; -+ typedef typename color_type::value_type value_type; -+ typedef typename color_type::calc_type calc_type; -+ typedef typename color_type::long_type long_type; -+ enum base_scale_e -+ { -+ base_shift = color_type::base_shift, -+ base_mask = color_type::base_mask -+ }; -+ -+ // E = I - M + 128 -+ static AGG_INLINE void blend_pix(value_type* p, -+ unsigned sr, unsigned sg, unsigned sb, -+ unsigned sa, unsigned cover) -+ { -+ calc_type da = (p[Order::A] * sa + 255) >> 8; -+ -+ int dr = p[Order::R] - sr + 128; -+ int dg = p[Order::G] - sg + 128; -+ int db = p[Order::B] - sb + 128; -+ -+ dr = dr < 0 ? 0 : (dr > 255 ? 255 : dr); -+ dg = dg < 0 ? 0 : (dg > 255 ? 255 : dg); -+ db = db < 0 ? 0 : (db > 255 ? 255 : db); -+ -+ p[Order::A] = da; -+ -+ if(da < 255) -+ { -+ p[Order::R] = (dr * da + 255) >> 8; -+ p[Order::G] = (dg * da + 255) >> 8; -+ p[Order::B] = (db * da + 255) >> 8; -+ } -+ else -+ { -+ p[Order::R] = dr; -+ p[Order::G] = dg; -+ p[Order::B] = db; -+ } -+ } -+ }; -+ - //======================================================comp_op_table_rgba - template struct comp_op_table_rgba - { -@@ -1489,6 +1535,7 @@ namespace agg - comp_op_rgba_invert ::blend_pix, - comp_op_rgba_invert_rgb ::blend_pix, - comp_op_rgba_grain_merge::blend_pix, -+ comp_op_rgba_grain_extract::blend_pix, - 0 - }; - -@@ -1525,6 +1572,7 @@ namespace agg - comp_op_invert, //----comp_op_invert - comp_op_invert_rgb, //----comp_op_invert_rgb - comp_op_grain_merge, //----comp_op_grain_merge -+ comp_op_grain_extract, //----comp_op_grain_extract - - end_of_comp_op_e - }; --- -1.8.1.4 - diff --git a/SDK/package/agg/0008-Declare-multiplication-and-division-operators-as-con.patch b/SDK/package/agg/0008-Declare-multiplication-and-division-operators-as-con.patch deleted file mode 100644 index 0ed92ee..0000000 --- a/SDK/package/agg/0008-Declare-multiplication-and-division-operators-as-con.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 2688af280836b95908d3cfd6915510d55de673b8 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 16:15:01 +0100 -Subject: [PATCH 08/15] Declare multiplication and division operators as const - ---- - include/agg_trans_affine.h | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/include/agg_trans_affine.h b/include/agg_trans_affine.h -index a662099..2f602a0 100644 ---- a/include/agg_trans_affine.h -+++ b/include/agg_trans_affine.h -@@ -216,15 +216,15 @@ namespace agg - } - - // Multiply the matrix by another one and return -- // the result in a separete matrix. -- trans_affine operator * (const trans_affine& m) -+ // the result in a separate matrix. -+ trans_affine operator * (const trans_affine& m) const - { - return trans_affine(*this).multiply(m); - } - - // Multiply the matrix by inverse of another one -- // and return the result in a separete matrix. -- trans_affine operator / (const trans_affine& m) -+ // and return the result in a separate matrix. -+ trans_affine operator / (const trans_affine& m) const - { - return trans_affine(*this).multiply_inv(m); - } --- -1.8.1.4 - diff --git a/SDK/package/agg/0009-Add-a-static-identity-transformation.patch b/SDK/package/agg/0009-Add-a-static-identity-transformation.patch deleted file mode 100644 index 01555cb..0000000 --- a/SDK/package/agg/0009-Add-a-static-identity-transformation.patch +++ /dev/null @@ -1,37 +0,0 @@ -From be9ed90897bc43b4547a3a1f8046827caaf13b4c Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 16:15:36 +0100 -Subject: [PATCH 09/15] Add a static identity transformation - ---- - include/agg_trans_affine.h | 1 + - src/agg_trans_affine.cpp | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/include/agg_trans_affine.h b/include/agg_trans_affine.h -index 2f602a0..67fe5ca 100644 ---- a/include/agg_trans_affine.h -+++ b/include/agg_trans_affine.h -@@ -92,6 +92,7 @@ namespace agg - //---------------------------------------------------------------------- - struct trans_affine - { -+ static const trans_affine identity; - double sx, shy, shx, sy, tx, ty; - - //------------------------------------------ Construction -diff --git a/src/agg_trans_affine.cpp b/src/agg_trans_affine.cpp -index aca18c2..b3d9bc0 100644 ---- a/src/agg_trans_affine.cpp -+++ b/src/agg_trans_affine.cpp -@@ -28,6 +28,7 @@ - - namespace agg - { -+ const trans_affine trans_affine::identity; - - //------------------------------------------------------------------------ - const trans_affine& trans_affine::parl_to_parl(const double* src, --- -1.8.1.4 - diff --git a/SDK/package/agg/0010-Add-renderer_scanline_aa_alpha.patch b/SDK/package/agg/0010-Add-renderer_scanline_aa_alpha.patch deleted file mode 100644 index b0be258..0000000 --- a/SDK/package/agg/0010-Add-renderer_scanline_aa_alpha.patch +++ /dev/null @@ -1,193 +0,0 @@ -From 749c8cd11e9e6f81e93ae5ce19258431722b6bdf Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 16:43:25 +0100 -Subject: [PATCH 10/15] Add renderer_scanline_aa_alpha - ---- - include/agg_pixfmt_rgba.h | 24 +++++++++++++- - include/agg_renderer_base.h | 28 ++++++++++++++++ - include/agg_renderer_scanline.h | 71 +++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 122 insertions(+), 1 deletion(-) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index 42f0a05..6c4bc37 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -2247,7 +2247,6 @@ namespace agg - } - - -- - //-------------------------------------------------------------------- - void blend_color_vspan(int x, int y, - unsigned len, -@@ -2751,6 +2750,29 @@ namespace agg - } - - //-------------------------------------------------------------------- -+ void blend_color_hspan_alpha(int x, int y, unsigned len, -+ const color_type* colors, -+ value_type alpha, -+ const int8u* covers, -+ int8u cover) -+ { -+ value_type* p = (value_type*)m_rbuf->row_ptr(x, y, len) + (x << 2); -+ do -+ { -+ blender_type::blend_pix(m_comp_op, -+ p, -+ (colors->r * alpha + 255) >> 8, -+ (colors->g * alpha + 255) >> 8, -+ (colors->b * alpha + 255) >> 8, -+ (colors->a * alpha + 255) >> 8, -+ covers ? *covers++ : cover); -+ p += 4; -+ ++colors; -+ } -+ while(--len); -+ } -+ -+ //-------------------------------------------------------------------- - void blend_color_vspan(int x, int y, unsigned len, - const color_type* colors, - const int8u* covers, -diff --git a/include/agg_renderer_base.h b/include/agg_renderer_base.h -index 1808944..25f07c3 100644 ---- a/include/agg_renderer_base.h -+++ b/include/agg_renderer_base.h -@@ -37,6 +37,7 @@ namespace agg - public: - typedef PixelFormat pixfmt_type; - typedef typename pixfmt_type::color_type color_type; -+ typedef typename pixfmt_type::color_type::value_type value_type; - typedef typename pixfmt_type::row_data row_data; - - //-------------------------------------------------------------------- -@@ -383,6 +384,33 @@ namespace agg - } - - //-------------------------------------------------------------------- -+ void blend_color_hspan_alpha(int x, int y, int len, -+ const color_type* colors, -+ value_type alpha, -+ const cover_type* covers, -+ cover_type cover = agg::cover_full) -+ { -+ if(y > ymax()) return; -+ if(y < ymin()) return; -+ -+ if(x < xmin()) -+ { -+ int d = xmin() - x; -+ len -= d; -+ if(len <= 0) return; -+ if(covers) covers += d; -+ colors += d; -+ x = xmin(); -+ } -+ if(x + len > xmax()) -+ { -+ len = xmax() - x + 1; -+ if(len <= 0) return; -+ } -+ m_ren->blend_color_hspan_alpha(x, y, len, colors, alpha, covers, cover); -+ } -+ -+ //-------------------------------------------------------------------- - void blend_color_vspan(int x, int y, int len, - const color_type* colors, - const cover_type* covers, -diff --git a/include/agg_renderer_scanline.h b/include/agg_renderer_scanline.h -index c27ca60..4fcb557 100644 ---- a/include/agg_renderer_scanline.h -+++ b/include/agg_renderer_scanline.h -@@ -156,6 +156,35 @@ namespace agg - } - } - -+ //================================================render_scanline_aa_alpha -+ template -+ void render_scanline_aa_alpha(const Scanline& sl, BaseRenderer& ren, -+ SpanAllocator& alloc, SpanGenerator& span_gen, -+ unsigned alpha) -+ { -+ int y = sl.y(); -+ -+ unsigned num_spans = sl.num_spans(); -+ typename Scanline::const_iterator span = sl.begin(); -+ for(;;) -+ { -+ int x = span->x; -+ int len = span->len; -+ const typename Scanline::cover_type* covers = span->covers; -+ -+ if(len < 0) len = -len; -+ typename BaseRenderer::color_type* colors = alloc.allocate(len); -+ span_gen.generate(colors, x, y, len); -+ ren.blend_color_hspan_alpha(x, y, len, colors, alpha, -+ (span->len < 0) ? 0 : covers, *covers); -+ -+ if(--num_spans == 0) break; -+ ++span; -+ } -+ } -+ -+ - //=====================================================render_scanlines_aa - template -@@ -216,8 +245,50 @@ namespace agg - }; - - -+ //==============================================renderer_scanline_aa_alpha -+ template -+ class renderer_scanline_aa_alpha -+ { -+ public: -+ typedef BaseRenderer base_ren_type; -+ typedef SpanAllocator alloc_type; -+ typedef SpanGenerator span_gen_type; - -+ //-------------------------------------------------------------------- -+ renderer_scanline_aa_alpha() : m_ren(0), m_alloc(0), m_span_gen(0), m_alpha(1.0) {} -+ renderer_scanline_aa_alpha(base_ren_type& ren, -+ alloc_type& alloc, -+ span_gen_type& span_gen, -+ unsigned alpha) : -+ m_ren(&ren), -+ m_alloc(&alloc), -+ m_span_gen(&span_gen), -+ m_alpha(alpha) -+ {} -+ void attach(base_ren_type& ren, -+ alloc_type& alloc, -+ span_gen_type& span_gen) -+ { -+ m_ren = &ren; -+ m_alloc = &alloc; -+ m_span_gen = &span_gen; -+ } - -+ //-------------------------------------------------------------------- -+ void prepare() { m_span_gen->prepare(); } -+ -+ //-------------------------------------------------------------------- -+ template void render(const Scanline& sl) -+ { -+ render_scanline_aa_alpha(sl, *m_ren, *m_alloc, *m_span_gen, m_alpha); -+ } -+ -+ private: -+ base_ren_type* m_ren; -+ alloc_type* m_alloc; -+ span_gen_type* m_span_gen; -+ unsigned m_alpha; -+ }; - - - //===============================================render_scanline_bin_solid --- -1.8.1.4 - diff --git a/SDK/package/agg/0011-Avoid-division-by-zero-in-color-burn-mode.patch b/SDK/package/agg/0011-Avoid-division-by-zero-in-color-burn-mode.patch deleted file mode 100644 index 2a0d198..0000000 --- a/SDK/package/agg/0011-Avoid-division-by-zero-in-color-burn-mode.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 0ec68d7f5695403eccac75025ba7f6f7ecf1814e Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sun, 19 May 2013 16:49:08 +0100 -Subject: [PATCH 11/15] Avoid division by zero in color-burn mode - -FIXME: re-work using latest math from http://www.w3.org/TR/SVGCompositing/ ---- - include/agg_pixfmt_rgba.h | 21 ++++++++++++++++++--- - 1 file changed, 18 insertions(+), 3 deletions(-) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index 6c4bc37..5d6b511 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -1027,6 +1027,21 @@ namespace agg - // Dca' = Sa.(Sca.Da + Dca.Sa - Sa.Da)/Sca + Sca.(1 - Da) + Dca.(1 - Sa) - // - // Da' = Sa + Da - Sa.Da -+ -+ -+ // http://www.w3.org/TR/SVGCompositing/ -+ // if Sca == 0 and Dca == Da -+ // Dca' = Sa × Da + Sca × (1 - Da) + Dca × (1 - Sa) -+ // = Sa × Da + Dca × (1 - Sa) -+ // = Da = Dca -+ // otherwise if Sca == 0 -+ // Dca' = Sca × (1 - Da) + Dca × (1 - Sa) -+ // = Dca × (1 - Sa) -+ // otherwise if Sca > 0 -+ // Dca' = Sa × Da - Sa × Da × min(1, (1 - Dca/Da) × Sa/Sca) + Sca × (1 - Da) + Dca × (1 - Sa) -+ // = Sa × Da × (1 - min(1, (1 - Dca/Da) × Sa/Sca)) + Sca × (1 - Da) + Dca × (1 - Sa) -+ -+ // sa * da * (255 - std::min(255, (255 - p[0]/da)*(sa/(sc*sa)) + - static AGG_INLINE void blend_pix(value_type* p, - unsigned sr, unsigned sg, unsigned sb, - unsigned sa, unsigned cover) -@@ -1056,15 +1071,15 @@ namespace agg - - p[Order::R] = (value_type)(((srda + drsa <= sada) ? - sr * d1a + dr * s1a : -- sa * (srda + drsa - sada) / sr + sr * d1a + dr * s1a + base_mask) >> base_shift); -+ (sr > 0 ? sa * (srda + drsa - sada) / sr + sr * d1a + dr * s1a + base_mask : 0)) >> base_shift); - - p[Order::G] = (value_type)(((sgda + dgsa <= sada) ? - sg * d1a + dg * s1a : -- sa * (sgda + dgsa - sada) / sg + sg * d1a + dg * s1a + base_mask) >> base_shift); -+ (sg > 0 ? sa * (sgda + dgsa - sada) / sg + sg * d1a + dg * s1a + base_mask : 0)) >> base_shift); - - p[Order::B] = (value_type)(((sbda + dbsa <= sada) ? - sb * d1a + db * s1a : -- sa * (sbda + dbsa - sada) / sb + sb * d1a + db * s1a + base_mask) >> base_shift); -+ (sb > 0 ? sa * (sbda + dbsa - sada) / sb + sb * d1a + db * s1a + base_mask : 0)) >> base_shift); - - p[Order::A] = (value_type)(sa + da - ((sa * da + base_mask) >> base_shift)); - } --- -1.8.1.4 - diff --git a/SDK/package/agg/0012-Avoid-pixel-artifacts-when-compositing.patch b/SDK/package/agg/0012-Avoid-pixel-artifacts-when-compositing.patch deleted file mode 100644 index b3e641e..0000000 --- a/SDK/package/agg/0012-Avoid-pixel-artifacts-when-compositing.patch +++ /dev/null @@ -1,26 +0,0 @@ -From bf0e0b71360cfbc690a29f4abe15d7b9b61b8479 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sat, 22 Jun 2013 12:11:54 +0100 -Subject: [PATCH 12/15] Avoid pixel artifacts when compositing - -Change src_over alpha to avoid pixel artifacts by reordering computations. ---- - include/agg_pixfmt_rgba.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/include/agg_pixfmt_rgba.h b/include/agg_pixfmt_rgba.h -index 5d6b511..bb255cd 100644 ---- a/include/agg_pixfmt_rgba.h -+++ b/include/agg_pixfmt_rgba.h -@@ -346,7 +346,7 @@ namespace agg - p[Order::R] = (value_type)(sr + ((p[Order::R] * s1a + base_mask) >> base_shift)); - p[Order::G] = (value_type)(sg + ((p[Order::G] * s1a + base_mask) >> base_shift)); - p[Order::B] = (value_type)(sb + ((p[Order::B] * s1a + base_mask) >> base_shift)); -- p[Order::A] = (value_type)(sa + p[Order::A] - ((sa * p[Order::A] + base_mask) >> base_shift)); -+ p[Order::A] = (value_type)(sa + ((p[Order::A] * s1a + base_mask) >> base_shift)); - } - }; - --- -1.8.1.4 - diff --git a/SDK/package/agg/0013-Modify-agg-conv-classes-to-allow-access-to-the-origi.patch b/SDK/package/agg/0013-Modify-agg-conv-classes-to-allow-access-to-the-origi.patch deleted file mode 100644 index 9deb904..0000000 --- a/SDK/package/agg/0013-Modify-agg-conv-classes-to-allow-access-to-the-origi.patch +++ /dev/null @@ -1,93 +0,0 @@ -From 6f1ab5f4b470bcf4e7e72aac6e2f7f6ee3e7b424 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sat, 22 Jun 2013 12:16:42 +0100 -Subject: [PATCH 13/15] Modify agg conv classes to allow access to the original - geometry type - ---- - include/agg_conv_adaptor_vcgen.h | 2 ++ - include/agg_conv_adaptor_vpgen.h | 1 + - include/agg_conv_clip_polygon.h | 1 + - include/agg_conv_clip_polyline.h | 1 + - include/agg_conv_smooth_poly1.h | 2 ++ - 5 files changed, 7 insertions(+) - -diff --git a/include/agg_conv_adaptor_vcgen.h b/include/agg_conv_adaptor_vcgen.h -index 7bd9b07..fef4579 100644 ---- a/include/agg_conv_adaptor_vcgen.h -+++ b/include/agg_conv_adaptor_vcgen.h -@@ -38,6 +38,7 @@ namespace agg - - void rewind(unsigned) {} - unsigned vertex(double*, double*) { return path_cmd_stop; } -+ unsigned type() const { return 0; } - }; - - -@@ -73,6 +74,7 @@ namespace agg - } - - unsigned vertex(double* x, double* y); -+ unsigned type() const { return m_source->type(); } - - private: - // Prohibit copying -diff --git a/include/agg_conv_adaptor_vpgen.h b/include/agg_conv_adaptor_vpgen.h -index dca9415..a39102d 100644 ---- a/include/agg_conv_adaptor_vpgen.h -+++ b/include/agg_conv_adaptor_vpgen.h -@@ -42,6 +42,7 @@ namespace agg - - void rewind(unsigned path_id); - unsigned vertex(double* x, double* y); -+ unsigned type() const { return m_source->type(); } - - private: - conv_adaptor_vpgen(const conv_adaptor_vpgen&); -diff --git a/include/agg_conv_clip_polygon.h b/include/agg_conv_clip_polygon.h -index 3c34590..e417a7d 100644 ---- a/include/agg_conv_clip_polygon.h -+++ b/include/agg_conv_clip_polygon.h -@@ -60,6 +60,7 @@ namespace agg - double y1() const { return base_type::vpgen().y1(); } - double x2() const { return base_type::vpgen().x2(); } - double y2() const { return base_type::vpgen().y2(); } -+ unsigned type() const { return base_type::type(); } - - private: - conv_clip_polygon(const conv_clip_polygon&); -diff --git a/include/agg_conv_clip_polyline.h b/include/agg_conv_clip_polyline.h -index d45067f..0de4b57 100644 ---- a/include/agg_conv_clip_polyline.h -+++ b/include/agg_conv_clip_polyline.h -@@ -60,6 +60,7 @@ namespace agg - double y1() const { return base_type::vpgen().y1(); } - double x2() const { return base_type::vpgen().x2(); } - double y2() const { return base_type::vpgen().y2(); } -+ unsigned type() const { return base_type::type(); } - - private: - conv_clip_polyline(const conv_clip_polyline&); -diff --git a/include/agg_conv_smooth_poly1.h b/include/agg_conv_smooth_poly1.h -index 15f7f8d..0956c4e 100644 ---- a/include/agg_conv_smooth_poly1.h -+++ b/include/agg_conv_smooth_poly1.h -@@ -48,6 +48,7 @@ namespace agg - - void smooth_value(double v) { base_type::generator().smooth_value(v); } - double smooth_value() const { return base_type::generator().smooth_value(); } -+ unsigned type() const { return base_type::type(); } - - private: - conv_smooth_poly1(const conv_smooth_poly1&); -@@ -70,6 +71,7 @@ namespace agg - - void smooth_value(double v) { m_smooth.generator().smooth_value(v); } - double smooth_value() const { return m_smooth.generator().smooth_value(); } -+ unsigned type() const { return m_smooth.type(); } - - private: - conv_smooth_poly1_curve(const conv_smooth_poly1_curve&); --- -1.8.1.4 - diff --git a/SDK/package/agg/0014-Avoid-potential-zero-division-resulting-in-nan-in-ag.patch b/SDK/package/agg/0014-Avoid-potential-zero-division-resulting-in-nan-in-ag.patch deleted file mode 100644 index 547b0d2..0000000 --- a/SDK/package/agg/0014-Avoid-potential-zero-division-resulting-in-nan-in-ag.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 6433a64f4cd41e88499386b0b7c7ae05d30683b8 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sat, 22 Jun 2013 12:33:32 +0100 -Subject: [PATCH 14/15] Avoid potential zero division resulting in nan in - agg::gamma_linear - ---- - include/agg_gamma_functions.h | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/include/agg_gamma_functions.h b/include/agg_gamma_functions.h -index fa38a45..beb0c04 100644 ---- a/include/agg_gamma_functions.h -+++ b/include/agg_gamma_functions.h -@@ -94,7 +94,11 @@ namespace agg - { - if(x < m_start) return 0.0; - if(x > m_end) return 1.0; -- return (x - m_start) / (m_end - m_start); -+ double delta = m_end - m_start; -+ // avoid nan from potential zero division -+ // https://github.com/mapnik/mapnik/issues/761 -+ if (delta <= 0.0) return 0.0; -+ return (x - m_start) / delta; - } - - private: --- -1.8.1.4 - diff --git a/SDK/package/agg/0015-Ensure-first-value-in-the-gamma-table-is-always-zero.patch b/SDK/package/agg/0015-Ensure-first-value-in-the-gamma-table-is-always-zero.patch deleted file mode 100644 index 6214bd6..0000000 --- a/SDK/package/agg/0015-Ensure-first-value-in-the-gamma-table-is-always-zero.patch +++ /dev/null @@ -1,24 +0,0 @@ -From ca818d4dcd428c5560fc3c341fbaf427a7485e32 Mon Sep 17 00:00:00 2001 -From: Tom Hughes -Date: Sat, 22 Jun 2013 12:34:37 +0100 -Subject: [PATCH 15/15] Ensure first value in the gamma table is always zero - ---- - include/agg_gamma_functions.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/include/agg_gamma_functions.h b/include/agg_gamma_functions.h -index beb0c04..b8eda52 100644 ---- a/include/agg_gamma_functions.h -+++ b/include/agg_gamma_functions.h -@@ -49,6 +49,7 @@ namespace agg - - double operator() (double x) const - { -+ if (x == 0.0) return 0.0; - return pow(x, m_gamma); - } - --- -1.8.1.4 - diff --git a/SDK/package/agg/CREATE_FILES.patch b/SDK/package/agg/CREATE_FILES.patch deleted file mode 100644 index 1a78125..0000000 --- a/SDK/package/agg/CREATE_FILES.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/README.orig 2007-01-07 13:58:28.000000000 +0000 -+++ b/README 2007-01-07 14:02:40.000000000 +0000 -@@ -0,0 +1 @@ -+cacac - ---- a/NEWS.orig 2007-01-07 13:58:28.000000000 +0000 -+++ b/NEWS 2007-01-07 14:02:40.000000000 +0000 -@@ -0,0 +1 @@ -+cacac - ---- a/AUTHORS.orig 2007-01-07 13:58:28.000000000 +0000 -+++ b/AUTHORS 2007-01-07 14:02:40.000000000 +0000 -@@ -0,0 +1 @@ -+cacac diff --git a/SDK/package/agg/Config.in b/SDK/package/agg/Config.in deleted file mode 100644 index a842098..0000000 --- a/SDK/package/agg/Config.in +++ /dev/null @@ -1,13 +0,0 @@ -config BR2_PACKAGE_AGG - bool "agg" - depends on BR2_INSTALL_LIBSTDCPP - select BR2_PACKAGE_SDL - help - The Anti-Grain Geometry project. A High Quality 2D Graphics Rendering - Engine for C++. - We select the SDL backend by default. - - http://www.antigrain.com/index.html - -comment "agg needs a toolchain with C++ support" - depends on !BR2_INSTALL_LIBSTDCPP diff --git a/SDK/package/agg/agg-2.4-depends.patch b/SDK/package/agg/agg-2.4-depends.patch deleted file mode 100644 index f5506e2..0000000 --- a/SDK/package/agg/agg-2.4-depends.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- agg-2.4.orig/font_freetype/Makefile.am 2005-10-18 11:45:40.000000000 +0100 -+++ agg-2.4/font_freetype/Makefile.am 2006-07-10 15:11:55.000000000 +0100 -@@ -4,8 +4,9 @@ - agginclude_HEADERS = agg_font_freetype.h - lib_LTLIBRARIES = libaggfontfreetype.la - --libaggfontfreetype_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ @FREETYPE_LIBS@ -+libaggfontfreetype_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ - libaggfontfreetype_la_SOURCES = agg_font_freetype.cpp - libaggfontfreetype_la_CXXFLAGS = -I$(top_srcdir)/include @FREETYPE_CFLAGS@ -+libaggfontfreetype_la_LIBADD = ../src/libagg.la @FREETYPE_LIBS@ - endif - ---- agg-2.4.orig/src/platform/sdl/Makefile.am 2005-10-17 23:49:35.000000000 +0100 -+++ agg-2.4/src/platform/sdl/Makefile.am 2006-07-10 15:11:55.000000000 +0100 -@@ -5,6 +5,6 @@ - libaggplatformsdl_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ - libaggplatformsdl_la_SOURCES = agg_platform_support.cpp - libaggplatformsdl_la_CXXFLAGS = -I$(top_srcdir)/include @SDL_CFLAGS@ --libaggplatformsdl_la_LIBADD = @SDL_LIBS@ -+libaggplatformsdl_la_LIBADD = ../../libagg.la @SDL_LIBS@ - endif - ---- agg-2.5.orig/src/platform/X11/Makefile.am 2006-12-11 00:59:45.000000000 +0000 -+++ agg-2.5/src/platform/X11/Makefile.am 2007-01-07 14:07:39.000000000 +0000 -@@ -1,8 +1,8 @@ - if ENABLE_X11 - lib_LTLIBRARIES = libaggplatformX11.la - --libaggplatformX11_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ -L@x_libraries@ -+libaggplatformX11_la_LDFLAGS = -version-info @AGG_LIB_VERSION@ @X_LDFLAGS@ - libaggplatformX11_la_SOURCES = agg_platform_support.cpp - libaggplatformX11_la_CXXFLAGS = -I$(top_srcdir)/include -I@x_includes@ --libaggplatformX11_la_LIBADD = -lX11 -+libaggplatformX11_la_LIBADD = ../../libagg.la -lX11 - endif diff --git a/SDK/package/agg/agg-2.5-autotools.patch b/SDK/package/agg/agg-2.5-autotools.patch deleted file mode 100644 index 1272b65..0000000 --- a/SDK/package/agg/agg-2.5-autotools.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/configure.in 2013-02-22 09:30:00.000000000 -0600 -+++ b/configure.in 2013-02-22 09:30:49.030777571 -0600 -@@ -8,7 +8,7 @@ - AC_PROG_CC - AC_PROG_CXX - AC_ISC_POSIX --AM_C_PROTOTYPES -+#AM_C_PROTOTYPES - if test "x$U" != "x"; then - AC_MSG_ERROR(Compiler not ANSI compliant) - fi diff --git a/SDK/package/agg/agg-2.5-pkgconfig.patch b/SDK/package/agg/agg-2.5-pkgconfig.patch deleted file mode 100644 index a303bfb..0000000 --- a/SDK/package/agg/agg-2.5-pkgconfig.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- agg-2.5/libagg.pc.in.orig 2007-01-07 13:58:28.000000000 +0000 -+++ agg-2.5/libagg.pc.in 2007-01-07 14:02:40.000000000 +0000 -@@ -6,5 +6,6 @@ - Name: libagg - Description: Anti Grain Geometry - A High Quality Rendering Engine for C++ - Version: @VERSION@ --Libs: -L${libdir} -Wl,-rpath,${exec_prefix}/lib -lagg -+Requires.private: freetype2 -+Libs: -L${libdir} -lagg - Cflags: -I${includedir} diff --git a/SDK/package/agg/agg.mk b/SDK/package/agg/agg.mk deleted file mode 100644 index ecf5749..0000000 --- a/SDK/package/agg/agg.mk +++ /dev/null @@ -1,32 +0,0 @@ -############################################################################### -# -# agg -# -############################################################################### - -AGG_VERSION = 2.5 -AGG_SOURCE = agg-$(AGG_VERSION).tar.gz -AGG_SITE = https://ftp.osuosl.org/pub/blfs/8.0/a -AGG_LICENSE = GPLv3+ -AGG_LICENSE_FILES = COPYING -AGG_INSTALL_STAGING = YES -AGG_AUTORECONF = YES - -AGG_DEPENDENCIES = host-pkgconf sdl - -AGG_CONF_OPTS = \ - --with-sdl-prefix=$(STAGING_DIR)/usr \ - --disable-sdltest - -AGG_CONF_OPTS += \ - --with-x=NO \ - --disable-examples --disable-gpc - -ifeq ($(BR2_PACKAGE_FREETYPE),y) -AGG_DEPENDENCIES += freetype -AGG_CONF_OPTS += --enable-freetype -else -AGG_CONF_OPTS += --disable-freetype -endif - -$(eval $(autotools-package))