summaryrefslogtreecommitdiff
path: root/libs/hwui/BakedOpRenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/BakedOpRenderer.cpp')
-rw-r--r--libs/hwui/BakedOpRenderer.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp
index 6cdc320a0bad..93a9406da7bc 100644
--- a/libs/hwui/BakedOpRenderer.cpp
+++ b/libs/hwui/BakedOpRenderer.cpp
@@ -121,30 +121,35 @@ void BakedOpRenderer::clearColorBuffer(const Rect& rect) {
}
Texture* BakedOpRenderer::getTexture(const SkBitmap* bitmap) {
- Texture* texture = mRenderState.assetAtlas().getEntryTexture(bitmap);
+ Texture* texture = mRenderState.assetAtlas().getEntryTexture(bitmap->pixelRef());
if (!texture) {
return mCaches.textureCache.get(bitmap);
}
return texture;
}
-void BakedOpRenderer::renderGlop(const BakedOpState& state, const Glop& glop) {
- bool useScissor = state.computedState.clipSideFlags != OpClipSideFlags::None;
- mRenderState.scissor().setEnabled(useScissor);
- if (useScissor) {
- const Rect& clip = state.computedState.clipRect;
- mRenderState.scissor().set(clip.left, mRenderTarget.viewportHeight - clip.bottom,
- clip.getWidth(), clip.getHeight());
+void BakedOpRenderer::renderGlop(const Rect* dirtyBounds, const Rect* clip, const Glop& glop) {
+ mRenderState.scissor().setEnabled(clip != nullptr);
+ if (clip) {
+ mRenderState.scissor().set(clip->left, mRenderTarget.viewportHeight - clip->bottom,
+ clip->getWidth(), clip->getHeight());
}
- if (mRenderTarget.offscreenBuffer) { // TODO: not with multi-draw
+ if (dirtyBounds && mRenderTarget.offscreenBuffer) {
// register layer damage to draw-back region
- const Rect& uiDirty = state.computedState.clippedBounds;
- android::Rect dirty(uiDirty.left, uiDirty.top, uiDirty.right, uiDirty.bottom);
+ android::Rect dirty(dirtyBounds->left, dirtyBounds->top,
+ dirtyBounds->right, dirtyBounds->bottom);
mRenderTarget.offscreenBuffer->region.orSelf(dirty);
}
mRenderState.render(glop, mRenderTarget.orthoMatrix);
if (!mRenderTarget.frameBufferId) mHasDrawn = true;
}
+void BakedOpRenderer::dirtyRenderTarget(const Rect& uiDirty) {
+ if (mRenderTarget.offscreenBuffer) {
+ android::Rect dirty(uiDirty.left, uiDirty.top, uiDirty.right, uiDirty.bottom);
+ mRenderTarget.offscreenBuffer->region.orSelf(dirty);
+ }
+}
+
} // namespace uirenderer
} // namespace android