diff options
| author | Jason Sams <rjsams@android.com> | 2010-01-19 17:53:54 -0800 |
|---|---|---|
| committer | Jason Sams <rjsams@android.com> | 2010-01-19 17:53:54 -0800 |
| commit | 2f6d8617769b5fd6287404a31d4e10140ebdcf7e (patch) | |
| tree | da1e42c546cf9d34d4aa6d633f54829c34436e58 /rsAllocation.cpp | |
| parent | 49da3b637b9a9f1b63e20eb38054c27c59617125 (diff) | |
| download | android_frameworks_rs-2f6d8617769b5fd6287404a31d4e10140ebdcf7e.tar.gz android_frameworks_rs-2f6d8617769b5fd6287404a31d4e10140ebdcf7e.tar.bz2 android_frameworks_rs-2f6d8617769b5fd6287404a31d4e10140ebdcf7e.zip | |
Fix RS mipmap generation for 8 bit alpha textures.
Diffstat (limited to 'rsAllocation.cpp')
| -rw-r--r-- | rsAllocation.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/rsAllocation.cpp b/rsAllocation.cpp index b4ec1a2d..1ae23176 100644 --- a/rsAllocation.cpp +++ b/rsAllocation.cpp @@ -366,6 +366,25 @@ static void mip8888(const Adapter2D &out, const Adapter2D &in) } } +static void mip8(const Adapter2D &out, const Adapter2D &in) +{ + uint32_t w = out.getDimX(); + uint32_t h = out.getDimY(); + + for (uint32_t y=0; y < h; y++) { + uint8_t *oPtr = static_cast<uint8_t *>(out.getElement(0, y)); + const uint8_t *i1 = static_cast<uint8_t *>(in.getElement(0, y*2)); + const uint8_t *i2 = static_cast<uint8_t *>(in.getElement(0, y*2+1)); + + for (uint32_t x=0; x < w; x++) { + *oPtr = (uint8_t)(((uint32_t)i1[0] + i1[1] + i2[0] + i2[1]) * 0.25f); + oPtr ++; + i1 += 2; + i2 += 2; + } + } +} + static void mip(const Adapter2D &out, const Adapter2D &in) { switch(out.getBaseType()->getElement()->getSizeBits()) { @@ -375,6 +394,9 @@ static void mip(const Adapter2D &out, const Adapter2D &in) case 16: mip565(out, in); break; + case 8: + mip8(out, in); + break; } |
