diff options
| author | Andreas Oberritter <obi@opendreambox.org> | 2011-03-16 13:59:25 +0100 |
|---|---|---|
| committer | Andreas Oberritter <obi@opendreambox.org> | 2011-03-16 13:59:25 +0100 |
| commit | ac2878879847f965225e0f72c22ad17b513c16e6 (patch) | |
| tree | 9cb2aae4d28d8a85f99f90cef479a9ad9e651243 | |
| parent | 06a1a623534d89b1fd336dbf158dd2cee4425f13 (diff) | |
| parent | 63e32165a14ac9fc3539bfc9631330b5ca73b756 (diff) | |
| download | enigma2-ac2878879847f965225e0f72c22ad17b513c16e6.tar.gz enigma2-ac2878879847f965225e0f72c22ad17b513c16e6.zip | |
Merge branch 'obi/bcm_accel'
| -rw-r--r-- | lib/gdi/accel.cpp | 14 | ||||
| -rw-r--r-- | lib/gdi/bcm.cpp | 47 |
2 files changed, 54 insertions, 7 deletions
diff --git a/lib/gdi/accel.cpp b/lib/gdi/accel.cpp index fc739e92..bd1439f2 100644 --- a/lib/gdi/accel.cpp +++ b/lib/gdi/accel.cpp @@ -138,12 +138,14 @@ int gAccel::fill(gSurface *dst, const eRect &area, unsigned long col) col); return 0; #endif -#if 0 // def BCM_ACCEL - bcm_accel_fill( - dst->data_phys, dst->x, dst->y, dst->stride, - area.left(), area.top(), area.width(), area.height(), - col); - return 0; +#ifdef BCM_ACCEL + if (!m_bcm_accel_state) { + bcm_accel_fill( + dst->data_phys, dst->x, dst->y, dst->stride, + area.left(), area.top(), area.width(), area.height(), + col); + return 0; + } #endif return -1; } diff --git a/lib/gdi/bcm.cpp b/lib/gdi/bcm.cpp index ccf16f41..b215b108 100644 --- a/lib/gdi/bcm.cpp +++ b/lib/gdi/bcm.cpp @@ -123,6 +123,51 @@ void bcm_accel_fill( int x, int y, int width, int height, unsigned long color) { -// printf("unimplemented bcm_accel_fill\n"); + C(0x43); // reset source + C(0x53); // reset dest + C(0x5b); // reset pattern + C(0x67); // reset blend + C(0x75); // reset output + + // clear dest surface + P(0x0, 0); + P(0x1, 0); + P(0x2, 0); + P(0x3, 0); + P(0x4, 0); + C(0x45); + + // clear src surface + P(0x0, 0); + P(0x1, 0); + P(0x2, 0); + P(0x3, 0); + P(0x4, 0); + C(0x5); + + P(0x2d, color); + + P(0x2e, x); // prepare output rect + P(0x2f, y); + P(0x30, width); + P(0x31, height); + C(0x6e); // set this rect as output rect + + P(0x0, dst_addr); // prepare output surface + P(0x1, dst_stride); + P(0x2, dst_width); + P(0x3, dst_height); + P(0x4, 0x7e48888); + C(0x69); // set output surface + + P(0x6f, 0); + P(0x70, 0); + P(0x71, 2); + P(0x72, 2); + C(0x73); // select color keying + + C(0x77); // do it + + exec_list(); } |
