summaryrefslogtreecommitdiff
path: root/libs/hwui/DeferredLayerUpdater.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/DeferredLayerUpdater.cpp')
-rw-r--r--libs/hwui/DeferredLayerUpdater.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp
index f833a5405a5c..a7d5f6026d00 100644
--- a/libs/hwui/DeferredLayerUpdater.cpp
+++ b/libs/hwui/DeferredLayerUpdater.cpp
@@ -15,11 +15,9 @@
*/
#include "DeferredLayerUpdater.h"
-#include "OpenGLRenderer.h"
-
-#include "LayerRenderer.h"
#include "renderthread/EglManager.h"
#include "renderthread/RenderTask.h"
+#include "utils/PaintUtils.h"
namespace android {
namespace uirenderer {
@@ -29,10 +27,9 @@ DeferredLayerUpdater::DeferredLayerUpdater(Layer* layer)
, mTransform(nullptr)
, mNeedsGLContextAttach(false)
, mUpdateTexImage(false)
- , mLayer(layer)
- , mCaches(Caches::getInstance()) {
- mWidth = mLayer->layer.getWidth();
- mHeight = mLayer->layer.getHeight();
+ , mLayer(layer) {
+ mWidth = mLayer->getWidth();
+ mHeight = mLayer->getHeight();
mBlend = mLayer->isBlend();
mColorFilter = SkSafeRef(mLayer->getColorFilter());
mAlpha = mLayer->getAlpha();
@@ -48,13 +45,12 @@ DeferredLayerUpdater::~DeferredLayerUpdater() {
void DeferredLayerUpdater::setPaint(const SkPaint* paint) {
mAlpha = PaintUtils::getAlphaDirect(paint);
- mMode = PaintUtils::getXfermodeDirect(paint);
+ mMode = PaintUtils::getBlendModeDirect(paint);
SkColorFilter* colorFilter = (paint) ? paint->getColorFilter() : nullptr;
SkRefCnt_SafeAssign(mColorFilter, colorFilter);
}
void DeferredLayerUpdater::apply() {
- // These properties are applied the same to both layer types
mLayer->setColorFilter(mColorFilter);
mLayer->setAlpha(mAlpha, mMode);
@@ -110,8 +106,22 @@ void DeferredLayerUpdater::doUpdateTexImage() {
LOG_ALWAYS_FATAL_IF(renderTarget != GL_TEXTURE_2D && renderTarget != GL_TEXTURE_EXTERNAL_OES,
"doUpdateTexImage target %x, 2d %x, EXT %x",
renderTarget, GL_TEXTURE_2D, GL_TEXTURE_EXTERNAL_OES);
- LayerRenderer::updateTextureLayer(mLayer, mWidth, mHeight,
- !mBlend, forceFilter, renderTarget, transform);
+ updateLayer(forceFilter, renderTarget, transform);
+ }
+}
+
+void DeferredLayerUpdater::updateLayer(bool forceFilter, GLenum renderTarget,
+ const float* textureTransform) {
+ mLayer->setBlend(mBlend);
+ mLayer->setForceFilter(forceFilter);
+ mLayer->setSize(mWidth, mHeight);
+ mLayer->getTexTransform().load(textureTransform);
+
+ if (renderTarget != mLayer->getRenderTarget()) {
+ mLayer->setRenderTarget(renderTarget);
+ mLayer->bindTexture();
+ mLayer->setFilter(GL_NEAREST, false, true);
+ mLayer->setWrap(GL_CLAMP_TO_EDGE, false, true);
}
}