diff options
author | Mathias Agopian <mathias@google.com> | 2009-11-09 19:38:43 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-11-09 19:38:43 -0800 |
commit | 51f7605e375d7d370dc8304bb500196c9c739913 (patch) | |
tree | b032f8bbf13b94ebf027724d3e9e18cd79437379 /opengl | |
parent | 95df5e89247adefd191afa2c1b1cef24d70acd76 (diff) | |
parent | cf3289cd9c0a91095e6416ef9979b74789bc4e27 (diff) | |
download | frameworks_native-51f7605e375d7d370dc8304bb500196c9c739913.zip frameworks_native-51f7605e375d7d370dc8304bb500196c9c739913.tar.gz frameworks_native-51f7605e375d7d370dc8304bb500196c9c739913.tar.bz2 |
am 0b9d3ba2: am c421fc2a: Merge change Id09376d1 into eclair
Merge commit '0b9d3ba2feab494e7bbd180b51a4311864d08e13' into eclair-mr2-plus-aosp
* commit '0b9d3ba2feab494e7bbd180b51a4311864d08e13':
fix [2071412] work around mdp 32-bits fade limitation
Diffstat (limited to 'opengl')
-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); |