am b8460d15: Merge "Take into account the texture layer\'s transform for clipping Bug #7370212" into jb-mr1-dev
* commit 'b8460d153a1e6dfc6a02ab127d4b5b5e82386137': Take into account the texture layer's transform for clipping Bug #7370212
This commit is contained in:
@@ -829,7 +829,6 @@ static void android_view_GLES20Canvas_clearLayerTexture(JNIEnv* env, jobject cla
|
||||
|
||||
static void android_view_GLES20Canvas_setTextureLayerTransform(JNIEnv* env, jobject clazz,
|
||||
Layer* layer, SkMatrix* matrix) {
|
||||
|
||||
layer->getTransform().load(*matrix);
|
||||
}
|
||||
|
||||
|
||||
@@ -209,6 +209,9 @@ struct Layer {
|
||||
}
|
||||
|
||||
inline void allocateTexture(GLenum format, GLenum storage) {
|
||||
#if DEBUG_LAYERS
|
||||
ALOGD(" Allocate layer: %dx%d", getWidth(), getHeight());
|
||||
#endif
|
||||
glTexImage2D(renderTarget, 0, format, getWidth(), getHeight(), 0, format, storage, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -895,12 +895,6 @@ void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
|
||||
void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
|
||||
float alpha = layer->getAlpha() / 255.0f;
|
||||
|
||||
mat4& transform = layer->getTransform();
|
||||
if (!transform.isIdentity()) {
|
||||
save(0);
|
||||
mSnapshot->transform->multiply(transform);
|
||||
}
|
||||
|
||||
setupDraw();
|
||||
if (layer->getRenderTarget() == GL_TEXTURE_2D) {
|
||||
setupDrawWithTexture();
|
||||
@@ -937,10 +931,6 @@ void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
|
||||
|
||||
finishDrawTexture();
|
||||
|
||||
if (!transform.isIdentity()) {
|
||||
restore();
|
||||
}
|
||||
}
|
||||
|
||||
void OpenGLRenderer::composeLayerRect(Layer* layer, const Rect& rect, bool swap) {
|
||||
@@ -2792,12 +2782,24 @@ status_t OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* pain
|
||||
return DrawGlInfo::kStatusDone;
|
||||
}
|
||||
|
||||
mat4* transform = NULL;
|
||||
if (layer->isTextureLayer()) {
|
||||
transform = &layer->getTransform();
|
||||
if (!transform->isIdentity()) {
|
||||
save(0);
|
||||
mSnapshot->transform->multiply(*transform);
|
||||
}
|
||||
}
|
||||
|
||||
Rect transformed;
|
||||
Rect clip;
|
||||
const bool rejected = quickRejectNoScissor(x, y,
|
||||
x + layer->layer.getWidth(), y + layer->layer.getHeight(), transformed, clip);
|
||||
|
||||
if (rejected) {
|
||||
if (transform && !transform->isIdentity()) {
|
||||
restore();
|
||||
}
|
||||
return DrawGlInfo::kStatusDone;
|
||||
}
|
||||
|
||||
@@ -2858,6 +2860,10 @@ status_t OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* pain
|
||||
}
|
||||
}
|
||||
|
||||
if (transform && !transform->isIdentity()) {
|
||||
restore();
|
||||
}
|
||||
|
||||
return DrawGlInfo::kStatusDrew;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user