diff options
author | Romain Guy <romainguy@google.com> | 2010-09-09 14:42:43 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2010-09-09 14:42:43 -0700 |
commit | a5aed0d58962a24c44728ffc46dc9e1ba2f9fda5 (patch) | |
tree | 4194d14711b2cba0e8192e5f1c0764f530bc7309 /libs/hwui/ProgramCache.h | |
parent | d90f23e24a4d1768d5a7ed0e7072e67af6330a45 (diff) | |
download | frameworks_base-a5aed0d58962a24c44728ffc46dc9e1ba2f9fda5.zip frameworks_base-a5aed0d58962a24c44728ffc46dc9e1ba2f9fda5.tar.gz frameworks_base-a5aed0d58962a24c44728ffc46dc9e1ba2f9fda5.tar.bz2 |
Add support for advanced blend modes with the framebuffer.
This adds the ability to blend with the framebuffer using Darken,
Lighten, Add, Multiply, Overlay and Screen.
Change-Id: Iae01a53797d4ad39c373cba6ff2a42293129da1a
Diffstat (limited to 'libs/hwui/ProgramCache.h')
-rw-r--r-- | libs/hwui/ProgramCache.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libs/hwui/ProgramCache.h b/libs/hwui/ProgramCache.h index f211ab6..8f5304d 100644 --- a/libs/hwui/ProgramCache.h +++ b/libs/hwui/ProgramCache.h @@ -35,7 +35,7 @@ namespace uirenderer { /////////////////////////////////////////////////////////////////////////////// // Debug -#define DEBUG_PROGRAM_CACHE 0 +#define DEBUG_PROGRAM_CACHE 1 // Debug #if DEBUG_PROGRAM_CACHE @@ -61,6 +61,7 @@ namespace uirenderer { #define PROGRAM_MAX_XFERMODE 0x1f #define PROGRAM_XFERMODE_SHADER_SHIFT 26 #define PROGRAM_XFERMODE_COLOR_OP_SHIFT 20 +#define PROGRAM_XFERMODE_FRAMEBUFFER_SHIFT 14 #define PROGRAM_BITMAP_WRAPS_SHIFT 9 #define PROGRAM_BITMAP_WRAPT_SHIFT 11 @@ -93,7 +94,8 @@ struct ProgramDescription { hasBitmap(false), isBitmapNpot(false), hasGradient(false), shadersMode(SkXfermode::kClear_Mode), isBitmapFirst(false), bitmapWrapS(GL_CLAMP_TO_EDGE), bitmapWrapT(GL_CLAMP_TO_EDGE), - colorOp(kColorNone), colorMode(SkXfermode::kClear_Mode) { + colorOp(kColorNone), colorMode(SkXfermode::kClear_Mode), + framebufferMode(SkXfermode::kClear_Mode) { } // Texturing @@ -113,6 +115,10 @@ struct ProgramDescription { int colorOp; SkXfermode::Mode colorMode; + // Framebuffer blending (requires Extensions.hasFramebufferFetch()) + // Ignored for all values < SkXfermode::kPlus_Mode + SkXfermode::Mode framebufferMode; + inline uint32_t getEnumForWrap(GLenum wrap) const { switch (wrap) { case GL_CLAMP_TO_EDGE: @@ -156,6 +162,7 @@ struct ProgramDescription { case kColorNone: break; } + key |= (framebufferMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_FRAMEBUFFER_SHIFT; return key; } }; // struct ProgramDescription |