diff options
author | Mathias Agopian <mathias@google.com> | 2009-11-09 19:34:26 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-11-09 19:34:26 -0800 |
commit | 60625acb24cbb05496eca7f41dacb6b8d82853a7 (patch) | |
tree | d499806e7309557bb2471c2214c1a67f965e8625 /opengl/libagl | |
parent | e7122ab0ba783daf7ce7c8f8bc250c7c88ba44b9 (diff) | |
parent | 4611a1b8764a1c081a071ec3c7a954deee36574e (diff) | |
download | frameworks_native-60625acb24cbb05496eca7f41dacb6b8d82853a7.zip frameworks_native-60625acb24cbb05496eca7f41dacb6b8d82853a7.tar.gz frameworks_native-60625acb24cbb05496eca7f41dacb6b8d82853a7.tar.bz2 |
am c421fc2a: Merge change Id09376d1 into eclair
Merge commit 'c421fc2ada7c1bff104733b840bd640151bebbbb' into eclair-plus-aosp
* commit 'c421fc2ada7c1bff104733b840bd640151bebbbb':
fix [2071412] work around mdp 32-bits fade limitation
Diffstat (limited to 'opengl/libagl')
-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); |