diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-11-09 19:32:47 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-11-09 19:32:47 -0800 |
commit | c421fc2ada7c1bff104733b840bd640151bebbbb (patch) | |
tree | 9f76c3ae709f292e7b049a123b3ca1067596fd72 | |
parent | 11cff8cd30f03b5adb137e985532543da5e960c4 (diff) | |
parent | d09376d1e2bce635adfb9e4c5439b6ae0991cf92 (diff) | |
download | frameworks_base-c421fc2ada7c1bff104733b840bd640151bebbbb.zip frameworks_base-c421fc2ada7c1bff104733b840bd640151bebbbb.tar.gz frameworks_base-c421fc2ada7c1bff104733b840bd640151bebbbb.tar.bz2 |
Merge change Id09376d1 into eclair
* changes:
fix [2071412] work around mdp 32-bits fade limitation
-rw-r--r-- | opengl/libagl/copybit.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/opengl/libagl/copybit.cpp b/opengl/libagl/copybit.cpp index 1bef859..a68750e 100644 --- a/opengl/libagl/copybit.cpp +++ b/opengl/libagl/copybit.cpp @@ -388,14 +388,33 @@ static bool copybit(GLint x, GLint y, copybit_image_t tmpCbImg; copybit_rect_t tmpCbRect; + copybit_rect_t tmpdrect = drect; tmpCbImg.w = w; tmpCbImg.h = h; tmpCbImg.format = tempCb->format; tmpCbImg.handle = (native_handle_t*)tempCb->getNativeBuffer()->handle; tmpCbRect.l = 0; tmpCbRect.t = 0; - tmpCbRect.r = w; - tmpCbRect.b = h; + + if (drect.l < 0) { + tmpCbRect.l = -tmpdrect.l; + tmpdrect.l = 0; + } + if (drect.t < 0) { + tmpCbRect.t = -tmpdrect.t; + tmpdrect.t = 0; + } + if (drect.l + tmpCbImg.w > dst.w) { + tmpCbImg.w = dst.w - drect.l; + tmpdrect.r = dst.w; + } + if (drect.t + tmpCbImg.h > dst.h) { + tmpCbImg.h = dst.h - drect.t; + tmpdrect.b = dst.h; + } + + tmpCbRect.r = tmpCbImg.w; + tmpCbRect.b = tmpCbImg.h; if (!err) { // first make a copy of the destination buffer @@ -404,7 +423,7 @@ static bool copybit(GLint x, GLint y, copybit->set_parameter(copybit, COPYBIT_PLANE_ALPHA, 0xFF); copybit->set_parameter(copybit, COPYBIT_DITHER, COPYBIT_DISABLE); err = copybit->stretch(copybit, - &tmpCbImg, &dst, &tmpCbRect, &drect, &tmp_it); + &tmpCbImg, &dst, &tmpCbRect, &tmpdrect, &tmp_it); } if (!err) { // then proceed as usual, but without the alpha plane @@ -424,7 +443,7 @@ static bool copybit(GLint x, GLint y, copybit->set_parameter(copybit, COPYBIT_PLANE_ALPHA, invPlaneAlpha); copybit->set_parameter(copybit, COPYBIT_DITHER, COPYBIT_ENABLE); err = copybit->stretch(copybit, - &dst, &tmpCbImg, &drect, &tmpCbRect, &it); + &dst, &tmpCbImg, &tmpdrect, &tmpCbRect, &it); } } else { copybit->set_parameter(copybit, COPYBIT_TRANSFORM, transform); |