freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2-demos] master 89f1af0 2/2: * graph/gblbgra.h: Gamma-corrected


From: Alexei Podtelezhnikov
Subject: [freetype2-demos] master 89f1af0 2/2: * graph/gblbgra.h: Gamma-corrected variant (disabled).
Date: Mon, 21 May 2018 23:04:50 -0400 (EDT)

branch: master
commit 89f1af01acfec275c54e6ac676cfd9d6226df4a2
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>

    * graph/gblbgra.h: Gamma-corrected variant (disabled).
---
 ChangeLog       |  4 ++++
 graph/gblbgra.h | 20 +++++++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 4a50165..0cda76d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2018-05-21  Alexei Podtelezhnikov  <address@hidden>
 
+       * graph/gblbgra.h: Gamma-corrected variant (disabled).
+
+2018-05-21  Alexei Podtelezhnikov  <address@hidden>
+
        * graph/gblbgra.h: Make it wotk for all destination targets.
 
 2018-05-19  Alexei Podtelezhnikov  <address@hidden>
diff --git a/graph/gblbgra.h b/graph/gblbgra.h
index c7a60b6..848a57b 100644
--- a/graph/gblbgra.h
+++ b/graph/gblbgra.h
@@ -37,10 +37,28 @@
           unsigned int  back_g = (back >> 8) & 255;
           unsigned int  back_b = (back) & 255;
 
-
+#if 1     /* premultiplied blending without gamma correction */
           pix_r = (back_r * ba / 255 + pix_r);
           pix_g = (back_g * ba / 255 + pix_g);
           pix_b = (back_b * ba / 255 + pix_b);
+
+#else     /* gamma-corrected blending */
+          const unsigned char*   gamma_ramp_inv = 
blit->blender->gamma_ramp_inv;
+          const unsigned short*  gamma_ramp     = blit->blender->gamma_ramp;
+
+          back_r = gamma_ramp[back_r];
+          back_g = gamma_ramp[back_g];
+          back_b = gamma_ramp[back_b];
+
+          /* premultiplication undone */
+          pix_r = gamma_ramp[pix_r * 255 / a];
+          pix_g = gamma_ramp[pix_g * 255 / a];
+          pix_b = gamma_ramp[pix_b * 255 / a];
+
+          pix_r = gamma_ramp_inv[(back_r * ba + pix_r * a + 127) / 255];
+          pix_g = gamma_ramp_inv[(back_g * ba + pix_g * a + 127) / 255];
+          pix_b = gamma_ramp_inv[(back_b * ba + pix_b * a + 127) / 255];
+#endif
         }
 
         GDST_STOREC(dst,pix_r,pix_g,pix_b);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]