diff options
| author | Jason Sams <rjsams@android.com> | 2010-03-01 15:31:04 -0800 |
|---|---|---|
| committer | Jason Sams <rjsams@android.com> | 2010-03-01 15:31:04 -0800 |
| commit | 8a64743f37ed35af7c2204acd18bb3d62d8f66d5 (patch) | |
| tree | 13222fdd1021b6af52f78d1d3576b0139b724ee1 /libs/rs/rsAllocation.cpp | |
| parent | c2908e60c9b021fb4bb69acff8d49981dd4dade8 (diff) | |
| download | frameworks_base-8a64743f37ed35af7c2204acd18bb3d62d8f66d5.zip frameworks_base-8a64743f37ed35af7c2204acd18bb3d62d8f66d5.tar.gz frameworks_base-8a64743f37ed35af7c2204acd18bb3d62d8f66d5.tar.bz2 | |
Add support for linking to a skia bitmap rather than always copying the data from the bitmap.
Diffstat (limited to 'libs/rs/rsAllocation.cpp')
| -rw-r--r-- | libs/rs/rsAllocation.cpp | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp index f1798de..4e8278d 100644 --- a/libs/rs/rsAllocation.cpp +++ b/libs/rs/rsAllocation.cpp @@ -25,6 +25,27 @@ using namespace android::renderscript; Allocation::Allocation(Context *rsc, const Type *type) : ObjectBase(rsc) { + init(rsc, type); + + mPtr = malloc(mType->getSizeBytes()); + if (!mPtr) { + LOGE("Allocation::Allocation, alloc failure"); + } +} + +Allocation::Allocation(Context *rsc, const Type *type, void *bmp, + void *callbackData, RsBitmapCallback_t callback) +: ObjectBase(rsc) +{ + init(rsc, type); + + mPtr = bmp; + mUserBitmapCallback = callback; + mUserBitmapCallbackData = callbackData; +} + +void Allocation::init(Context *rsc, const Type *type) +{ mAllocFile = __FILE__; mAllocLine = __LINE__; mPtr = NULL; @@ -43,17 +64,22 @@ Allocation::Allocation(Context *rsc, const Type *type) : ObjectBase(rsc) mBufferID = 0; mUploadDefered = false; + mUserBitmapCallback = NULL; + mUserBitmapCallbackData = NULL; + mType.set(type); rsAssert(type); - mPtr = malloc(mType->getSizeBytes()); - if (!mPtr) { - LOGE("Allocation::Allocation, alloc failure"); - } + + mPtr = NULL; } Allocation::~Allocation() { - free(mPtr); + if (mUserBitmapCallback != NULL) { + mUserBitmapCallback(mUserBitmapCallbackData); + } else { + free(mPtr); + } mPtr = NULL; if (mBufferID) { @@ -486,6 +512,14 @@ static ElementConverter_t pickConverter(const Element *dst, const Element *src) return 0; } +RsAllocation rsi_AllocationCreateBitmapRef(Context *rsc, RsType vtype, + void *bmp, void *callbackData, RsBitmapCallback_t callback) +{ + const Type * type = static_cast<const Type *>(vtype); + Allocation * alloc = new Allocation(rsc, type, bmp, callbackData, callback); + alloc->incUserRef(); + return alloc; +} RsAllocation rsi_AllocationCreateFromBitmap(Context *rsc, uint32_t w, uint32_t h, RsElement _dst, RsElement _src, bool genMips, const void *data) { |
