Skip to content

Instantly share code, notes, and snippets.

@springmeyer
Created June 17, 2012 13:35
Show Gist options
  • Save springmeyer/2944578 to your computer and use it in GitHub Desktop.
Save springmeyer/2944578 to your computer and use it in GitHub Desktop.
tweak agg to expose the src_over comp-op in cpp file, to reduce recompiles during experimentation
diff --git a/deps/agg/include/agg_pixfmt_rgba.h b/deps/agg/include/agg_pixfmt_rgba.h
index 7d2ef4f..37fd893 100644
--- a/deps/agg/include/agg_pixfmt_rgba.h
+++ b/deps/agg/include/agg_pixfmt_rgba.h
@@ -316,21 +316,7 @@ namespace agg
// Da' = Sa + Da - Sa.Da
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;
- }
- calc_type s1a = base_mask - sa;
- 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));
- }
+ unsigned sa, unsigned cover);
};
//======================================================comp_op_rgba_dst_over
diff --git a/deps/agg/src/agg_pixfmt_rgba.cpp b/deps/agg/src/agg_pixfmt_rgba.cpp
new file mode 100644
index 0000000..da52fca
--- /dev/null
+++ b/deps/agg/src/agg_pixfmt_rgba.cpp
@@ -0,0 +1,27 @@
+#include "agg_pixfmt_rgba.h"
+#include <iostream>
+
+namespace agg
+{
+
+template<class ColorT, class Order>
+void comp_op_rgba_src_over<ColorT,Order>::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;
+ }
+ calc_type s1a = base_mask - sa;
+ 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));
+}
+
+template struct comp_op_rgba_src_over<agg::rgba8, agg::order_rgba>;
+}
\ No newline at end of file
@springmeyer
Copy link
Author

/cc @tmcw

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment