diff --git a/libs/hwui/GlLayer.cpp b/libs/hwui/GlLayer.cpp index 42ae29d768985..8357f8ebde2e4 100644 --- a/libs/hwui/GlLayer.cpp +++ b/libs/hwui/GlLayer.cpp @@ -72,5 +72,13 @@ void GlLayer::generateTexture() { } } +SkBlendMode GlLayer::getMode() const { + if (texture.blend || mode != SkBlendMode::kSrcOver) { + return mode; + } else { + return SkBlendMode::kSrc; + } +} + }; // namespace uirenderer }; // namespace android diff --git a/libs/hwui/GlLayer.h b/libs/hwui/GlLayer.h index 28749a0d125c6..4cf8f2522ff96 100644 --- a/libs/hwui/GlLayer.h +++ b/libs/hwui/GlLayer.h @@ -66,6 +66,8 @@ public: */ void onGlContextLost(); + SkBlendMode getMode() const override; + private: Caches& caches; diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp index fb8f0337c95e4..b86ae121af554 100644 --- a/libs/hwui/Layer.cpp +++ b/libs/hwui/Layer.cpp @@ -27,10 +27,10 @@ Layer::Layer(RenderState& renderState, Api api, sk_sp colorFilter SkBlendMode mode) : GpuMemoryTracker(GpuObjectType::Layer) , mRenderState(renderState) + , mode(mode) , mApi(api) , mColorFilter(colorFilter) - , alpha(alpha) - , mode(mode) { + , alpha(alpha) { // TODO: This is a violation of Android's typical ref counting, but it // preserves the old inc/dec ref locations. This should be changed... incStrong(nullptr); diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h index acaeab1b00687..d41c9703e9087 100644 --- a/libs/hwui/Layer.h +++ b/libs/hwui/Layer.h @@ -72,7 +72,7 @@ public: inline int getAlpha() const { return alpha; } - inline SkBlendMode getMode() const { return mode; } + virtual SkBlendMode getMode() const { return mode; } inline SkColorFilter* getColorFilter() const { return mColorFilter.get(); } @@ -109,6 +109,11 @@ protected: RenderState& mRenderState; + /** + * Blending mode of the layer. + */ + SkBlendMode mode; + private: void buildColorSpaceWithFilter(); @@ -139,11 +144,6 @@ private: */ int alpha; - /** - * Blending mode of the layer. - */ - SkBlendMode mode; - /** * Optional texture coordinates transform. */