Merge "Remove CreateFromBitmapRef and add CopyTo(bitmap) replacement."
This commit is contained in:
@@ -55,13 +55,13 @@ public class Allocation extends BaseObj {
|
||||
}
|
||||
}
|
||||
|
||||
public enum MipmapGenerationControl {
|
||||
public enum MipmapControl {
|
||||
MIPMAP_NONE(0),
|
||||
MIPMAP_FULL(1),
|
||||
MIPMAP_ON_SYNC_TO_TEXTURE(2);
|
||||
|
||||
int mID;
|
||||
MipmapGenerationControl(int id) {
|
||||
MipmapControl(int id) {
|
||||
mID = id;
|
||||
}
|
||||
}
|
||||
@@ -131,6 +131,14 @@ public class Allocation extends BaseObj {
|
||||
subData1D(0, mType.getCount(), i);
|
||||
}
|
||||
|
||||
private void validateBitmap(Bitmap b) {
|
||||
mRS.validate();
|
||||
if(mType.getX() != b.getWidth() ||
|
||||
mType.getY() != b.getHeight()) {
|
||||
throw new RSIllegalArgumentException("Cannot update allocation from bitmap, sizes mismatch");
|
||||
}
|
||||
}
|
||||
|
||||
public void copyFrom(int[] d) {
|
||||
mRS.validate();
|
||||
subData1D(0, mType.getCount(), d);
|
||||
@@ -147,18 +155,17 @@ public class Allocation extends BaseObj {
|
||||
mRS.validate();
|
||||
subData1D(0, mType.getCount(), d);
|
||||
}
|
||||
|
||||
public void copyFrom(Bitmap b) {
|
||||
|
||||
mRS.validate();
|
||||
if(mType.getX() != b.getWidth() ||
|
||||
mType.getY() != b.getHeight()) {
|
||||
throw new RSIllegalArgumentException("Cannot update allocation from bitmap, sizes mismatch");
|
||||
}
|
||||
|
||||
mRS.nAllocationUpdateFromBitmap(getID(), b);
|
||||
validateBitmap(b);
|
||||
mRS.nAllocationCopyFromBitmap(getID(), b);
|
||||
}
|
||||
|
||||
public void copyTo(Bitmap b) {
|
||||
validateBitmap(b);
|
||||
mRS.nAllocationCopyToBitmap(getID(), b);
|
||||
}
|
||||
|
||||
|
||||
public void subData(int xoff, FieldPacker fp) {
|
||||
int eSize = mType.mElement.getSizeBytes();
|
||||
final byte[] data = fp.getData();
|
||||
@@ -423,17 +430,17 @@ public class Allocation extends BaseObj {
|
||||
}
|
||||
|
||||
static private Type typeFromBitmap(RenderScript rs, Bitmap b,
|
||||
MipmapGenerationControl mip) {
|
||||
MipmapControl mip) {
|
||||
Element e = elementFromBitmap(rs, b);
|
||||
Type.Builder tb = new Type.Builder(rs, e);
|
||||
tb.setX(b.getWidth());
|
||||
tb.setY(b.getHeight());
|
||||
tb.setMipmaps(mip == MipmapGenerationControl.MIPMAP_FULL);
|
||||
tb.setMipmaps(mip == MipmapControl.MIPMAP_FULL);
|
||||
return tb.create();
|
||||
}
|
||||
|
||||
static public Allocation createFromBitmap(RenderScript rs, Bitmap b,
|
||||
MipmapGenerationControl mips,
|
||||
MipmapControl mips,
|
||||
int usage) {
|
||||
rs.validate();
|
||||
Type t = typeFromBitmap(rs, b, mips);
|
||||
@@ -447,15 +454,15 @@ public class Allocation extends BaseObj {
|
||||
|
||||
static public Allocation createFromBitmap(RenderScript rs, Bitmap b,
|
||||
Element dstFmt, boolean genMips) {
|
||||
MipmapGenerationControl mc = MipmapGenerationControl.MIPMAP_NONE;
|
||||
MipmapControl mc = MipmapControl.MIPMAP_NONE;
|
||||
if (genMips) {
|
||||
mc = MipmapGenerationControl.MIPMAP_ON_SYNC_TO_TEXTURE;
|
||||
mc = MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE;
|
||||
}
|
||||
return createFromBitmap(rs, b, mc, USAGE_ALL);
|
||||
}
|
||||
|
||||
static public Allocation createCubemapFromBitmap(RenderScript rs, Bitmap b,
|
||||
MipmapGenerationControl mips,
|
||||
MipmapControl mips,
|
||||
CubemapLayout layout,
|
||||
int usage) {
|
||||
rs.validate();
|
||||
@@ -482,7 +489,7 @@ public class Allocation extends BaseObj {
|
||||
tb.setX(width);
|
||||
tb.setY(width);
|
||||
tb.setFaces(true);
|
||||
tb.setMipmaps(mips == MipmapGenerationControl.MIPMAP_FULL);
|
||||
tb.setMipmaps(mips == MipmapControl.MIPMAP_FULL);
|
||||
Type t = tb.create();
|
||||
|
||||
int id = rs.nAllocationCubeCreateFromBitmap(t.getID(), mips.mID, b, usage);
|
||||
@@ -496,33 +503,17 @@ public class Allocation extends BaseObj {
|
||||
Element dstFmt,
|
||||
boolean genMips,
|
||||
CubemapLayout layout) {
|
||||
MipmapGenerationControl mc = MipmapGenerationControl.MIPMAP_NONE;
|
||||
MipmapControl mc = MipmapControl.MIPMAP_NONE;
|
||||
if (genMips) {
|
||||
mc = MipmapGenerationControl.MIPMAP_ON_SYNC_TO_TEXTURE;
|
||||
mc = MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE;
|
||||
}
|
||||
return createCubemapFromBitmap(rs, b, mc, layout, USAGE_ALL);
|
||||
}
|
||||
|
||||
|
||||
static public Allocation createBitmapRef(RenderScript rs, Bitmap b) {
|
||||
|
||||
rs.validate();
|
||||
Type t = typeFromBitmap(rs, b, MipmapGenerationControl.MIPMAP_NONE);
|
||||
|
||||
int id = rs.nAllocationCreateBitmapRef(t.getID(), b);
|
||||
if(id == 0) {
|
||||
throw new RSRuntimeException("Load failed.");
|
||||
}
|
||||
|
||||
Allocation a = new Allocation(id, rs, t, USAGE_SCRIPT);
|
||||
a.mBitmap = b;
|
||||
return a;
|
||||
}
|
||||
|
||||
static public Allocation createFromBitmapResource(RenderScript rs,
|
||||
Resources res,
|
||||
int id,
|
||||
MipmapGenerationControl mips,
|
||||
MipmapControl mips,
|
||||
int usage) {
|
||||
|
||||
rs.validate();
|
||||
@@ -537,9 +528,9 @@ public class Allocation extends BaseObj {
|
||||
int id,
|
||||
Element dstFmt,
|
||||
boolean genMips) {
|
||||
MipmapGenerationControl mc = MipmapGenerationControl.MIPMAP_NONE;
|
||||
MipmapControl mc = MipmapControl.MIPMAP_NONE;
|
||||
if (genMips) {
|
||||
mc = MipmapGenerationControl.MIPMAP_ON_SYNC_TO_TEXTURE;
|
||||
mc = MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE;
|
||||
}
|
||||
return createFromBitmapResource(rs, res, id, mc, USAGE_ALL);
|
||||
}
|
||||
|
||||
@@ -654,17 +654,5 @@ public class Element extends BaseObj {
|
||||
return new Element(id, mRS, ein, sin, asin);
|
||||
}
|
||||
}
|
||||
|
||||
static void initPredefined(RenderScript rs) {
|
||||
int a8 = rs.nElementCreate(DataType.UNSIGNED_8.mID,
|
||||
DataKind.PIXEL_A.mID, true, 1);
|
||||
int rgba4444 = rs.nElementCreate(DataType.UNSIGNED_4_4_4_4.mID,
|
||||
DataKind.PIXEL_RGBA.mID, true, 4);
|
||||
int rgba8888 = rs.nElementCreate(DataType.UNSIGNED_8.mID,
|
||||
DataKind.PIXEL_RGBA.mID, true, 4);
|
||||
int rgb565 = rs.nElementCreate(DataType.UNSIGNED_5_6_5.mID,
|
||||
DataKind.PIXEL_RGB.mID, true, 3);
|
||||
rs.nInitElements(a8, rgba4444, rgba8888, rgb565);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,6 @@ public class RenderScript {
|
||||
}
|
||||
|
||||
// Non-threadsafe functions.
|
||||
native void nInitElements(int a8, int rgba4444, int rgba8888, int rgb565);
|
||||
native int nDeviceCreate();
|
||||
native void nDeviceDestroy(int dev);
|
||||
native void nDeviceSetConfig(int dev, int param, int value);
|
||||
@@ -213,13 +212,19 @@ public class RenderScript {
|
||||
return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
|
||||
}
|
||||
|
||||
native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
|
||||
synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
|
||||
rsnAllocationCopyToBitmap(mContext, alloc, bmp);
|
||||
}
|
||||
|
||||
|
||||
native void rsnAllocationSyncAll(int con, int alloc, int src);
|
||||
synchronized void nAllocationSyncAll(int alloc, int src) {
|
||||
rsnAllocationSyncAll(mContext, alloc, src);
|
||||
}
|
||||
native void rsnAllocationUpdateFromBitmap(int con, int alloc, Bitmap bmp);
|
||||
synchronized void nAllocationUpdateFromBitmap(int alloc, Bitmap bmp) {
|
||||
rsnAllocationUpdateFromBitmap(mContext, alloc, bmp);
|
||||
native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
|
||||
synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
|
||||
rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
|
||||
}
|
||||
|
||||
native void rsnAllocationUploadToTexture(int con, int alloc, boolean genMips, int baseMioLevel);
|
||||
@@ -787,7 +792,6 @@ public class RenderScript {
|
||||
rs.mContext = rs.nContextCreate(rs.mDev, 0);
|
||||
rs.mMessageThread = new MessageThread(rs);
|
||||
rs.mMessageThread.start();
|
||||
Element.initPredefined(rs);
|
||||
return rs;
|
||||
}
|
||||
|
||||
|
||||
@@ -190,7 +190,6 @@ public class RenderScriptGL extends RenderScript {
|
||||
}
|
||||
mMessageThread = new MessageThread(this);
|
||||
mMessageThread.start();
|
||||
Element.initPredefined(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -59,11 +59,6 @@ static jfieldID gContextId = 0;
|
||||
static jfieldID gNativeBitmapID = 0;
|
||||
static jfieldID gTypeNativeCache = 0;
|
||||
|
||||
static RsElement g_A_8 = NULL;
|
||||
static RsElement g_RGBA_4444 = NULL;
|
||||
static RsElement g_RGBA_8888 = NULL;
|
||||
static RsElement g_RGB_565 = NULL;
|
||||
|
||||
static void _nInit(JNIEnv *_env, jclass _this)
|
||||
{
|
||||
gContextId = _env->GetFieldID(_this, "mContext", "I");
|
||||
@@ -72,14 +67,6 @@ static void _nInit(JNIEnv *_env, jclass _this)
|
||||
gNativeBitmapID = _env->GetFieldID(bitmapClass, "mNativeBitmap", "I");
|
||||
}
|
||||
|
||||
static void nInitElements(JNIEnv *_env, jobject _this, jint a8, jint rgba4444, jint rgba8888, jint rgb565)
|
||||
{
|
||||
g_A_8 = reinterpret_cast<RsElement>(a8);
|
||||
g_RGBA_4444 = reinterpret_cast<RsElement>(rgba4444);
|
||||
g_RGBA_8888 = reinterpret_cast<RsElement>(rgba8888);
|
||||
g_RGB_565 = reinterpret_cast<RsElement>(rgb565);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
static void
|
||||
@@ -415,26 +402,6 @@ nAllocationSyncAll(JNIEnv *_env, jobject _this, RsContext con, jint a, jint bits
|
||||
rsAllocationSyncAll(con, (RsAllocation)a, (RsAllocationUsageType)bits);
|
||||
}
|
||||
|
||||
static RsElement SkBitmapToPredefined(SkBitmap::Config cfg)
|
||||
{
|
||||
switch (cfg) {
|
||||
case SkBitmap::kA8_Config:
|
||||
return g_A_8;
|
||||
case SkBitmap::kARGB_4444_Config:
|
||||
return g_RGBA_4444;
|
||||
case SkBitmap::kARGB_8888_Config:
|
||||
return g_RGBA_8888;
|
||||
case SkBitmap::kRGB_565_Config:
|
||||
return g_RGB_565;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// If we don't have a conversion mark it as a user type.
|
||||
LOGE("Unsupported bitmap type");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
nAllocationCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint type, jint mip, jobject jbitmap, jint usage)
|
||||
{
|
||||
@@ -464,20 +431,29 @@ nAllocationCubeCreateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint
|
||||
}
|
||||
|
||||
static void
|
||||
nAllocationUpdateFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
|
||||
nAllocationCopyFromBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
|
||||
{
|
||||
SkBitmap const * nativeBitmap =
|
||||
(SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
|
||||
const SkBitmap& bitmap(*nativeBitmap);
|
||||
SkBitmap::Config config = bitmap.getConfig();
|
||||
|
||||
RsElement e = SkBitmapToPredefined(config);
|
||||
if (e) {
|
||||
bitmap.lockPixels();
|
||||
const void* ptr = bitmap.getPixels();
|
||||
rsAllocationUpdateFromBitmap(con, (RsAllocation)alloc, e, ptr);
|
||||
bitmap.unlockPixels();
|
||||
}
|
||||
bitmap.lockPixels();
|
||||
const void* ptr = bitmap.getPixels();
|
||||
rsAllocationCopyFromBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
|
||||
bitmap.unlockPixels();
|
||||
}
|
||||
|
||||
static void
|
||||
nAllocationCopyToBitmap(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jobject jbitmap)
|
||||
{
|
||||
SkBitmap const * nativeBitmap =
|
||||
(SkBitmap const *)_env->GetIntField(jbitmap, gNativeBitmapID);
|
||||
const SkBitmap& bitmap(*nativeBitmap);
|
||||
|
||||
bitmap.lockPixels();
|
||||
void* ptr = bitmap.getPixels();
|
||||
rsAllocationCopyToBitmap(con, (RsAllocation)alloc, ptr, bitmap.getSize());
|
||||
bitmap.unlockPixels();
|
||||
}
|
||||
|
||||
static void ReleaseBitmapCallback(void *bmp)
|
||||
@@ -486,44 +462,6 @@ static void ReleaseBitmapCallback(void *bmp)
|
||||
nativeBitmap->unlockPixels();
|
||||
}
|
||||
|
||||
static int
|
||||
nAllocationCreateBitmapRef(JNIEnv *_env, jobject _this, RsContext con, jint type, jobject jbitmap)
|
||||
{
|
||||
SkBitmap * nativeBitmap =
|
||||
(SkBitmap *)_env->GetIntField(jbitmap, gNativeBitmapID);
|
||||
|
||||
|
||||
nativeBitmap->lockPixels();
|
||||
void* ptr = nativeBitmap->getPixels();
|
||||
jint id = (jint)rsAllocationCreateBitmapRef(con, (RsType)type, ptr, nativeBitmap, ReleaseBitmapCallback);
|
||||
return id;
|
||||
}
|
||||
|
||||
static int
|
||||
nAllocationCreateFromAssetStream(JNIEnv *_env, jobject _this, RsContext con, jint dstFmt, jboolean genMips, jint native_asset, jint usage)
|
||||
{
|
||||
/*
|
||||
Asset* asset = reinterpret_cast<Asset*>(native_asset);
|
||||
SkBitmap bitmap;
|
||||
SkImageDecoder::DecodeMemory(asset->getBuffer(false), asset->getLength(),
|
||||
&bitmap, SkBitmap::kNo_Config, SkImageDecoder::kDecodePixels_Mode);
|
||||
|
||||
SkBitmap::Config config = bitmap.getConfig();
|
||||
|
||||
RsElement e = SkBitmapToPredefined(config);
|
||||
|
||||
if (e) {
|
||||
bitmap.lockPixels();
|
||||
const int w = bitmap.width();
|
||||
const int h = bitmap.height();
|
||||
const void* ptr = bitmap.getPixels();
|
||||
jint id = (jint)rsaAllocationCreateFromBitmap(con, w, h, (RsElement)dstFmt, e, genMips, ptr, usage);
|
||||
bitmap.unlockPixels();
|
||||
return id;
|
||||
}
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
nAllocationSubData1D_i(JNIEnv *_env, jobject _this, RsContext con, jint alloc, jint offset, jint count, jintArray data, int sizeBytes)
|
||||
@@ -1266,7 +1204,6 @@ static const char *classPathName = "android/renderscript/RenderScript";
|
||||
|
||||
static JNINativeMethod methods[] = {
|
||||
{"_nInit", "()V", (void*)_nInit },
|
||||
{"nInitElements", "(IIII)V", (void*)nInitElements },
|
||||
|
||||
{"nDeviceCreate", "()I", (void*)nDeviceCreate },
|
||||
{"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy },
|
||||
@@ -1311,10 +1248,10 @@ static JNINativeMethod methods[] = {
|
||||
{"rsnAllocationCreateTyped", "(III)I", (void*)nAllocationCreateTyped },
|
||||
{"rsnAllocationCreateFromBitmap", "(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCreateFromBitmap },
|
||||
{"rsnAllocationCubeCreateFromBitmap","(IIILandroid/graphics/Bitmap;I)I", (void*)nAllocationCubeCreateFromBitmap },
|
||||
{"rsnAllocationCreateBitmapRef", "(IILandroid/graphics/Bitmap;)I", (void*)nAllocationCreateBitmapRef },
|
||||
{"rsnAllocationCreateFromAssetStream","(IIII)I", (void*)nAllocationCreateFromAssetStream },
|
||||
|
||||
{"rsnAllocationUpdateFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationUpdateFromBitmap },
|
||||
{"rsnAllocationCopyFromBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyFromBitmap },
|
||||
{"rsnAllocationCopyToBitmap", "(IILandroid/graphics/Bitmap;)V", (void*)nAllocationCopyToBitmap },
|
||||
|
||||
{"rsnAllocationUploadToTexture", "(IIZI)V", (void*)nAllocationUploadToTexture },
|
||||
{"rsnAllocationUploadToBufferObject","(II)V", (void*)nAllocationUploadToBufferObject },
|
||||
{"rsnAllocationSyncAll", "(III)V", (void*)nAllocationSyncAll },
|
||||
|
||||
@@ -283,7 +283,7 @@ public class ImageProcessingActivity extends Activity
|
||||
long t = java.lang.System.currentTimeMillis();
|
||||
if (true) {
|
||||
mScript.invoke_filter();
|
||||
mRS.finish();
|
||||
mOutPixelsAllocation.copyTo(mBitmapOut);
|
||||
} else {
|
||||
javaFilter();
|
||||
mDisplayView.invalidate();
|
||||
@@ -352,7 +352,7 @@ public class ImageProcessingActivity extends Activity
|
||||
public void surfaceCreated(SurfaceHolder holder) {
|
||||
createScript();
|
||||
mScript.invoke_filter();
|
||||
mRS.finish();
|
||||
mOutPixelsAllocation.copyTo(mBitmapOut);
|
||||
}
|
||||
|
||||
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
||||
@@ -365,8 +365,12 @@ public class ImageProcessingActivity extends Activity
|
||||
mRS = RenderScript.create();
|
||||
mRS.setMessageHandler(new FilterCallback());
|
||||
|
||||
mInPixelsAllocation = Allocation.createBitmapRef(mRS, mBitmapIn);
|
||||
mOutPixelsAllocation = Allocation.createBitmapRef(mRS, mBitmapOut);
|
||||
mInPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapIn,
|
||||
Allocation.MipmapControl.MIPMAP_NONE,
|
||||
Allocation.USAGE_SCRIPT);
|
||||
mOutPixelsAllocation = Allocation.createFromBitmap(mRS, mBitmapOut,
|
||||
Allocation.MipmapControl.MIPMAP_NONE,
|
||||
Allocation.USAGE_SCRIPT);
|
||||
|
||||
Type.Builder tb = new Type.Builder(mRS, Element.F32_4(mRS));
|
||||
tb.setX(mBitmapIn.getWidth());
|
||||
@@ -419,7 +423,7 @@ public class ImageProcessingActivity extends Activity
|
||||
long t = java.lang.System.currentTimeMillis();
|
||||
|
||||
mScript.invoke_filter();
|
||||
mRS.finish();
|
||||
mOutPixelsAllocation.copyTo(mBitmapOut);
|
||||
|
||||
t = java.lang.System.currentTimeMillis() - t;
|
||||
android.util.Log.v("Img", "Renderscript frame time core ms " + t);
|
||||
@@ -432,6 +436,6 @@ public class ImageProcessingActivity extends Activity
|
||||
mScript.set_radius(mRadius);
|
||||
|
||||
mScript.invoke_filter();
|
||||
mRS.finish();
|
||||
mOutPixelsAllocation.copyTo(mBitmapOut);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,10 +77,16 @@ ElementCreate2 {
|
||||
ret RsElement
|
||||
}
|
||||
|
||||
AllocationUpdateFromBitmap {
|
||||
AllocationCopyFromBitmap {
|
||||
param RsAllocation alloc
|
||||
param RsElement srcFmt
|
||||
param const void * data
|
||||
param size_t dataLen
|
||||
}
|
||||
|
||||
AllocationCopyToBitmap {
|
||||
param RsAllocation alloc
|
||||
param void * data
|
||||
param size_t dataLen
|
||||
}
|
||||
|
||||
AllocationCreateBitmapRef {
|
||||
|
||||
@@ -763,30 +763,42 @@ RsAllocation rsi_AllocationCreateBitmapRef(Context *rsc, RsType vtype,
|
||||
return alloc;
|
||||
}
|
||||
|
||||
void rsi_AllocationUpdateFromBitmap(Context *rsc, RsAllocation va,
|
||||
RsElement _src, const void *data) {
|
||||
void rsi_AllocationCopyFromBitmap(Context *rsc, RsAllocation va, const void *data, size_t dataLen) {
|
||||
Allocation *texAlloc = static_cast<Allocation *>(va);
|
||||
const Element *src = static_cast<const Element *>(_src);
|
||||
const Element *dst = texAlloc->getType()->getElement();
|
||||
uint32_t w = texAlloc->getType()->getDimX();
|
||||
uint32_t h = texAlloc->getType()->getDimY();
|
||||
bool genMips = texAlloc->getType()->getDimLOD();
|
||||
const Type * t = texAlloc->getType();
|
||||
|
||||
ElementConverter_t cvt = pickConverter(dst, src);
|
||||
if (cvt) {
|
||||
cvt(texAlloc->getPtr(), data, w * h);
|
||||
if (genMips) {
|
||||
Adapter2D adapt(rsc, texAlloc);
|
||||
Adapter2D adapt2(rsc, texAlloc);
|
||||
for (uint32_t lod=0; lod < (texAlloc->getType()->getLODCount() -1); lod++) {
|
||||
adapt.setLOD(lod);
|
||||
adapt2.setLOD(lod + 1);
|
||||
mip(adapt2, adapt);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rsc->setError(RS_ERROR_BAD_VALUE, "Unsupported bitmap format");
|
||||
uint32_t w = t->getDimX();
|
||||
uint32_t h = t->getDimY();
|
||||
bool genMips = t->getDimLOD();
|
||||
size_t s = w * h * t->getElementSizeBytes();
|
||||
if (s != dataLen) {
|
||||
rsc->setError(RS_ERROR_BAD_VALUE, "Bitmap size didn't match allocation size");
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(texAlloc->getPtr(), data, s);
|
||||
if (genMips) {
|
||||
Adapter2D adapt(rsc, texAlloc);
|
||||
Adapter2D adapt2(rsc, texAlloc);
|
||||
for (uint32_t lod=0; lod < (texAlloc->getType()->getLODCount() -1); lod++) {
|
||||
adapt.setLOD(lod);
|
||||
adapt2.setLOD(lod + 1);
|
||||
mip(adapt2, adapt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void rsi_AllocationCopyToBitmap(Context *rsc, RsAllocation va, void *data, size_t dataLen) {
|
||||
Allocation *texAlloc = static_cast<Allocation *>(va);
|
||||
const Type * t = texAlloc->getType();
|
||||
|
||||
size_t s = t->getDimX() * t->getDimY() * t->getElementSizeBytes();
|
||||
if (s != dataLen) {
|
||||
rsc->setError(RS_ERROR_BAD_VALUE, "Bitmap size didn't match allocation size");
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(data, texAlloc->getPtr(), s);
|
||||
}
|
||||
|
||||
void rsi_AllocationData(Context *rsc, RsAllocation va, const void *data, uint32_t sizeBytes) {
|
||||
|
||||
Reference in New Issue
Block a user