Loading graphics/java/android/renderscript/RenderScript.java +22 −7 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.renderscript; import java.lang.reflect.Field; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; Loading @@ -28,6 +30,7 @@ import android.util.Log; import android.view.Surface; /** * RenderScript base master class. An instance of this class creates native * worker threads for processing commands from this object. This base class Loading Loading @@ -79,26 +82,26 @@ public class RenderScript { // Methods below are wrapped to protect the non-threadsafe // lockless fifo. native int rsnContextCreateGL(int dev, int ver, native int rsnContextCreateGL(int dev, int ver, int sdkVer, int colorMin, int colorPref, int alphaMin, int alphaPref, int depthMin, int depthPref, int stencilMin, int stencilPref, int samplesMin, int samplesPref, float samplesQ, int dpi); synchronized int nContextCreateGL(int dev, int ver, synchronized int nContextCreateGL(int dev, int ver, int sdkVer, int colorMin, int colorPref, int alphaMin, int alphaPref, int depthMin, int depthPref, int stencilMin, int stencilPref, int samplesMin, int samplesPref, float samplesQ, int dpi) { return rsnContextCreateGL(dev, ver, colorMin, colorPref, return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref, alphaMin, alphaPref, depthMin, depthPref, stencilMin, stencilPref, samplesMin, samplesPref, samplesQ, dpi); } native int rsnContextCreate(int dev, int ver); synchronized int nContextCreate(int dev, int ver) { return rsnContextCreate(dev, ver); native int rsnContextCreate(int dev, int ver, int sdkVer); synchronized int nContextCreate(int dev, int ver, int sdkVer) { return rsnContextCreate(dev, ver, sdkVer); } native void rsnContextDestroy(int con); synchronized void nContextDestroy() { Loading Loading @@ -864,6 +867,16 @@ public class RenderScript { return mApplicationContext; } static int getTargetSdkVersion(Context ctx) { try { PackageManager pm = ctx.getPackageManager(); ApplicationInfo app = pm.getApplicationInfo(ctx.getPackageName(), 0); return app.targetSdkVersion; } catch (Exception e) { throw new RSDriverException("Error calculating target SDK version for RS."); } } /** * Create a basic RenderScript context. * Loading @@ -873,8 +886,10 @@ public class RenderScript { public static RenderScript create(Context ctx) { RenderScript rs = new RenderScript(ctx); int sdkVersion = getTargetSdkVersion(ctx); rs.mDev = rs.nDeviceCreate(); rs.mContext = rs.nContextCreate(rs.mDev, 0); rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion); if (rs.mContext == 0) { throw new RSDriverException("Failed to create RS context."); } Loading graphics/java/android/renderscript/RenderScriptGL.java +3 −1 Original line number Diff line number Diff line Loading @@ -160,11 +160,13 @@ public class RenderScriptGL extends RenderScript { super(ctx); mSurfaceConfig = new SurfaceConfig(sc); int sdkVersion = getTargetSdkVersion(ctx); mWidth = 0; mHeight = 0; mDev = nDeviceCreate(); int dpi = ctx.getResources().getDisplayMetrics().densityDpi; mContext = nContextCreateGL(mDev, 0, mContext = nContextCreateGL(mDev, 0, sdkVersion, mSurfaceConfig.mColorMin, mSurfaceConfig.mColorPref, mSurfaceConfig.mAlphaMin, mSurfaceConfig.mAlphaPref, mSurfaceConfig.mDepthMin, mSurfaceConfig.mDepthPref, Loading graphics/jni/android_renderscript_RenderScript.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -149,14 +149,14 @@ nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value) } static jint nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver) nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer) { LOG_API("nContextCreate"); return (jint)rsContextCreate((RsDevice)dev, ver); return (jint)rsContextCreate((RsDevice)dev, ver, sdkVer); } static jint nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer, int colorMin, int colorPref, int alphaMin, int alphaPref, int depthMin, int depthPref, Loading @@ -176,7 +176,7 @@ nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, sc.samplesQ = samplesQ; LOG_API("nContextCreateGL"); return (jint)rsContextCreateGL((RsDevice)dev, ver, sc, dpi); return (jint)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); } static void Loading Loading @@ -1213,8 +1213,8 @@ static JNINativeMethod methods[] = { // All methods below are thread protected in java. {"rsnContextCreate", "(II)I", (void*)nContextCreate }, {"rsnContextCreateGL", "(IIIIIIIIIIIIFI)I", (void*)nContextCreateGL }, {"rsnContextCreate", "(III)I", (void*)nContextCreate }, {"rsnContextCreateGL", "(IIIIIIIIIIIIIFI)I", (void*)nContextCreateGL }, {"rsnContextFinish", "(I)V", (void*)nContextFinish }, {"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority }, {"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface }, Loading libs/rs/RenderScript.h +2 −2 Original line number Diff line number Diff line Loading @@ -52,8 +52,8 @@ void rsaElementGetSubElements(RsContext, RsElement, uint32_t *ids, const char ** RsDevice rsDeviceCreate(); void rsDeviceDestroy(RsDevice dev); void rsDeviceSetConfig(RsDevice dev, RsDeviceParam p, int32_t value); RsContext rsContextCreate(RsDevice dev, uint32_t version); RsContext rsContextCreateGL(RsDevice dev, uint32_t version, RsSurfaceConfig sc, uint32_t dpi); RsContext rsContextCreate(RsDevice dev, uint32_t version, uint32_t sdkVersion); RsContext rsContextCreateGL(RsDevice dev, uint32_t version, uint32_t sdkVersion, RsSurfaceConfig sc, uint32_t dpi); #include "rsgApiFuncDecl.h" Loading libs/rs/driver/rsdBcc.cpp +36 −28 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ #include "rsdBcc.h" #include "rsdRuntime.h" #include <bcinfo/bcinfo.h> #include <bcinfo/MetadataExtractor.h> #include "rsContext.h" #include "rsScriptC.h" Loading @@ -40,7 +40,7 @@ struct DrvScript { BCCScriptRef mBccScript; struct BCScriptMetadata *mScriptMetadata; bcinfo::MetadataExtractor *ME; InvokeFunc_t *mInvokeFunctions; void ** mFieldAddress; Loading Loading @@ -71,7 +71,9 @@ bool rsdScriptInit(const Context *rsc, pthread_mutex_lock(&rsdgInitMutex); char *cachePath = NULL; struct BCScriptMetadata *md = NULL; size_t exportFuncCount = 0; size_t exportVarCount = 0; size_t objectSlotCount = 0; DrvScript *drv = (DrvScript *)calloc(1, sizeof(DrvScript)); if (drv == NULL) { Loading @@ -84,13 +86,13 @@ bool rsdScriptInit(const Context *rsc, drv->mScriptText = bitcode; drv->mScriptTextLength = bitcodeSize; md = bcinfoGetScriptMetadata((const char*)drv->mScriptText, drv->mScriptTextLength, 0); if (!md) { drv->ME = new bcinfo::MetadataExtractor((const char*)drv->mScriptText, drv->mScriptTextLength); if (!drv->ME->extract()) { LOGE("bcinfo: failed to read script metadata"); goto error; } drv->mScriptMetadata = md; //LOGE("mBccScript %p", script->mBccScript); Loading Loading @@ -122,40 +124,41 @@ bool rsdScriptInit(const Context *rsc, drv->mRoot = reinterpret_cast<int (*)()>(bccGetFuncAddr(drv->mBccScript, "root")); drv->mInit = reinterpret_cast<void (*)()>(bccGetFuncAddr(drv->mBccScript, "init")); if (md->exportFuncCount > 0) { drv->mInvokeFunctions = (InvokeFunc_t*) calloc(md->exportFuncCount, exportFuncCount = drv->ME->getExportFuncCount(); if (exportFuncCount > 0) { drv->mInvokeFunctions = (InvokeFunc_t*) calloc(exportFuncCount, sizeof(InvokeFunc_t)); bccGetExportFuncList(drv->mBccScript, md->exportFuncCount, bccGetExportFuncList(drv->mBccScript, exportFuncCount, (void **) drv->mInvokeFunctions); } else { drv->mInvokeFunctions = NULL; } if (md->exportVarCount > 0) { drv->mFieldAddress = (void **) calloc(md->exportVarCount, sizeof(void*)); drv->mFieldIsObject = (bool *) calloc(md->exportVarCount, sizeof(bool)); bccGetExportVarList(drv->mBccScript, md->exportVarCount, exportVarCount = drv->ME->getExportVarCount(); if (exportVarCount > 0) { drv->mFieldAddress = (void **) calloc(exportVarCount, sizeof(void*)); drv->mFieldIsObject = (bool *) calloc(exportVarCount, sizeof(bool)); bccGetExportVarList(drv->mBccScript, exportVarCount, (void **) drv->mFieldAddress); } else { drv->mFieldAddress = NULL; drv->mFieldIsObject = NULL; } if (md->objectSlotCount) { for (uint32_t ct=0; ct < md->objectSlotCount; ct++) { drv->mFieldIsObject[md->objectSlotList[ct]] = true; objectSlotCount = drv->ME->getObjectSlotCount(); if (objectSlotCount > 0) { const uint32_t *objectSlotList = drv->ME->getObjectSlotList(); for (uint32_t ct=0; ct < objectSlotCount; ct++) { drv->mFieldIsObject[objectSlotList[ct]] = true; } } // Copy info over to runtime script->mHal.info.exportedFunctionCount = md->exportFuncCount; script->mHal.info.exportedVariableCount = md->exportVarCount; script->mHal.info.exportedPragmaCount = md->pragmaCount; script->mHal.info.exportedPragmaKeyList = md->pragmaKeyList; script->mHal.info.exportedPragmaValueList = md->pragmaValueList; script->mHal.info.exportedFunctionCount = drv->ME->getExportFuncCount(); script->mHal.info.exportedVariableCount = drv->ME->getExportVarCount(); script->mHal.info.exportedPragmaCount = drv->ME->getPragmaCount(); script->mHal.info.exportedPragmaKeyList = drv->ME->getPragmaKeyList(); script->mHal.info.exportedPragmaValueList = drv->ME->getPragmaValueList(); script->mHal.info.root = drv->mRoot; pthread_mutex_unlock(&rsdgInitMutex); Loading @@ -164,6 +167,10 @@ bool rsdScriptInit(const Context *rsc, error: pthread_mutex_unlock(&rsdgInitMutex); if (drv->ME) { delete drv->ME; drv->ME = NULL; } free(drv); return false; Loading Loading @@ -445,10 +452,10 @@ void rsdScriptSetGlobalObj(const Context *dc, const Script *script, uint32_t slo void rsdScriptDestroy(const Context *dc, Script *script) { DrvScript *drv = (DrvScript *)script->mHal.drv; struct BCScriptMetadata *md = drv->mScriptMetadata; if (drv->mFieldAddress) { for (size_t ct = 0; ct < md->exportVarCount; ct++) { size_t exportVarCount = drv->ME->getExportVarCount(); for (size_t ct = 0; ct < exportVarCount; ct++) { if (drv->mFieldIsObject[ct]) { // The field address can be NULL if the script-side has // optimized the corresponding global variable away. Loading @@ -467,7 +474,8 @@ void rsdScriptDestroy(const Context *dc, Script *script) { drv->mInvokeFunctions = NULL; } bcinfoReleaseScriptMetadata(&drv->mScriptMetadata); delete drv->ME; drv->ME = NULL; free(drv); script->mHal.drv = NULL; Loading Loading
graphics/java/android/renderscript/RenderScript.java +22 −7 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.renderscript; import java.lang.reflect.Field; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; Loading @@ -28,6 +30,7 @@ import android.util.Log; import android.view.Surface; /** * RenderScript base master class. An instance of this class creates native * worker threads for processing commands from this object. This base class Loading Loading @@ -79,26 +82,26 @@ public class RenderScript { // Methods below are wrapped to protect the non-threadsafe // lockless fifo. native int rsnContextCreateGL(int dev, int ver, native int rsnContextCreateGL(int dev, int ver, int sdkVer, int colorMin, int colorPref, int alphaMin, int alphaPref, int depthMin, int depthPref, int stencilMin, int stencilPref, int samplesMin, int samplesPref, float samplesQ, int dpi); synchronized int nContextCreateGL(int dev, int ver, synchronized int nContextCreateGL(int dev, int ver, int sdkVer, int colorMin, int colorPref, int alphaMin, int alphaPref, int depthMin, int depthPref, int stencilMin, int stencilPref, int samplesMin, int samplesPref, float samplesQ, int dpi) { return rsnContextCreateGL(dev, ver, colorMin, colorPref, return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref, alphaMin, alphaPref, depthMin, depthPref, stencilMin, stencilPref, samplesMin, samplesPref, samplesQ, dpi); } native int rsnContextCreate(int dev, int ver); synchronized int nContextCreate(int dev, int ver) { return rsnContextCreate(dev, ver); native int rsnContextCreate(int dev, int ver, int sdkVer); synchronized int nContextCreate(int dev, int ver, int sdkVer) { return rsnContextCreate(dev, ver, sdkVer); } native void rsnContextDestroy(int con); synchronized void nContextDestroy() { Loading Loading @@ -864,6 +867,16 @@ public class RenderScript { return mApplicationContext; } static int getTargetSdkVersion(Context ctx) { try { PackageManager pm = ctx.getPackageManager(); ApplicationInfo app = pm.getApplicationInfo(ctx.getPackageName(), 0); return app.targetSdkVersion; } catch (Exception e) { throw new RSDriverException("Error calculating target SDK version for RS."); } } /** * Create a basic RenderScript context. * Loading @@ -873,8 +886,10 @@ public class RenderScript { public static RenderScript create(Context ctx) { RenderScript rs = new RenderScript(ctx); int sdkVersion = getTargetSdkVersion(ctx); rs.mDev = rs.nDeviceCreate(); rs.mContext = rs.nContextCreate(rs.mDev, 0); rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion); if (rs.mContext == 0) { throw new RSDriverException("Failed to create RS context."); } Loading
graphics/java/android/renderscript/RenderScriptGL.java +3 −1 Original line number Diff line number Diff line Loading @@ -160,11 +160,13 @@ public class RenderScriptGL extends RenderScript { super(ctx); mSurfaceConfig = new SurfaceConfig(sc); int sdkVersion = getTargetSdkVersion(ctx); mWidth = 0; mHeight = 0; mDev = nDeviceCreate(); int dpi = ctx.getResources().getDisplayMetrics().densityDpi; mContext = nContextCreateGL(mDev, 0, mContext = nContextCreateGL(mDev, 0, sdkVersion, mSurfaceConfig.mColorMin, mSurfaceConfig.mColorPref, mSurfaceConfig.mAlphaMin, mSurfaceConfig.mAlphaPref, mSurfaceConfig.mDepthMin, mSurfaceConfig.mDepthPref, Loading
graphics/jni/android_renderscript_RenderScript.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -149,14 +149,14 @@ nDeviceSetConfig(JNIEnv *_env, jobject _this, jint dev, jint p, jint value) } static jint nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver) nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer) { LOG_API("nContextCreate"); return (jint)rsContextCreate((RsDevice)dev, ver); return (jint)rsContextCreate((RsDevice)dev, ver, sdkVer); } static jint nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, jint sdkVer, int colorMin, int colorPref, int alphaMin, int alphaPref, int depthMin, int depthPref, Loading @@ -176,7 +176,7 @@ nContextCreateGL(JNIEnv *_env, jobject _this, jint dev, jint ver, sc.samplesQ = samplesQ; LOG_API("nContextCreateGL"); return (jint)rsContextCreateGL((RsDevice)dev, ver, sc, dpi); return (jint)rsContextCreateGL((RsDevice)dev, ver, sdkVer, sc, dpi); } static void Loading Loading @@ -1213,8 +1213,8 @@ static JNINativeMethod methods[] = { // All methods below are thread protected in java. {"rsnContextCreate", "(II)I", (void*)nContextCreate }, {"rsnContextCreateGL", "(IIIIIIIIIIIIFI)I", (void*)nContextCreateGL }, {"rsnContextCreate", "(III)I", (void*)nContextCreate }, {"rsnContextCreateGL", "(IIIIIIIIIIIIIFI)I", (void*)nContextCreateGL }, {"rsnContextFinish", "(I)V", (void*)nContextFinish }, {"rsnContextSetPriority", "(II)V", (void*)nContextSetPriority }, {"rsnContextSetSurface", "(IIILandroid/view/Surface;)V", (void*)nContextSetSurface }, Loading
libs/rs/RenderScript.h +2 −2 Original line number Diff line number Diff line Loading @@ -52,8 +52,8 @@ void rsaElementGetSubElements(RsContext, RsElement, uint32_t *ids, const char ** RsDevice rsDeviceCreate(); void rsDeviceDestroy(RsDevice dev); void rsDeviceSetConfig(RsDevice dev, RsDeviceParam p, int32_t value); RsContext rsContextCreate(RsDevice dev, uint32_t version); RsContext rsContextCreateGL(RsDevice dev, uint32_t version, RsSurfaceConfig sc, uint32_t dpi); RsContext rsContextCreate(RsDevice dev, uint32_t version, uint32_t sdkVersion); RsContext rsContextCreateGL(RsDevice dev, uint32_t version, uint32_t sdkVersion, RsSurfaceConfig sc, uint32_t dpi); #include "rsgApiFuncDecl.h" Loading
libs/rs/driver/rsdBcc.cpp +36 −28 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ #include "rsdBcc.h" #include "rsdRuntime.h" #include <bcinfo/bcinfo.h> #include <bcinfo/MetadataExtractor.h> #include "rsContext.h" #include "rsScriptC.h" Loading @@ -40,7 +40,7 @@ struct DrvScript { BCCScriptRef mBccScript; struct BCScriptMetadata *mScriptMetadata; bcinfo::MetadataExtractor *ME; InvokeFunc_t *mInvokeFunctions; void ** mFieldAddress; Loading Loading @@ -71,7 +71,9 @@ bool rsdScriptInit(const Context *rsc, pthread_mutex_lock(&rsdgInitMutex); char *cachePath = NULL; struct BCScriptMetadata *md = NULL; size_t exportFuncCount = 0; size_t exportVarCount = 0; size_t objectSlotCount = 0; DrvScript *drv = (DrvScript *)calloc(1, sizeof(DrvScript)); if (drv == NULL) { Loading @@ -84,13 +86,13 @@ bool rsdScriptInit(const Context *rsc, drv->mScriptText = bitcode; drv->mScriptTextLength = bitcodeSize; md = bcinfoGetScriptMetadata((const char*)drv->mScriptText, drv->mScriptTextLength, 0); if (!md) { drv->ME = new bcinfo::MetadataExtractor((const char*)drv->mScriptText, drv->mScriptTextLength); if (!drv->ME->extract()) { LOGE("bcinfo: failed to read script metadata"); goto error; } drv->mScriptMetadata = md; //LOGE("mBccScript %p", script->mBccScript); Loading Loading @@ -122,40 +124,41 @@ bool rsdScriptInit(const Context *rsc, drv->mRoot = reinterpret_cast<int (*)()>(bccGetFuncAddr(drv->mBccScript, "root")); drv->mInit = reinterpret_cast<void (*)()>(bccGetFuncAddr(drv->mBccScript, "init")); if (md->exportFuncCount > 0) { drv->mInvokeFunctions = (InvokeFunc_t*) calloc(md->exportFuncCount, exportFuncCount = drv->ME->getExportFuncCount(); if (exportFuncCount > 0) { drv->mInvokeFunctions = (InvokeFunc_t*) calloc(exportFuncCount, sizeof(InvokeFunc_t)); bccGetExportFuncList(drv->mBccScript, md->exportFuncCount, bccGetExportFuncList(drv->mBccScript, exportFuncCount, (void **) drv->mInvokeFunctions); } else { drv->mInvokeFunctions = NULL; } if (md->exportVarCount > 0) { drv->mFieldAddress = (void **) calloc(md->exportVarCount, sizeof(void*)); drv->mFieldIsObject = (bool *) calloc(md->exportVarCount, sizeof(bool)); bccGetExportVarList(drv->mBccScript, md->exportVarCount, exportVarCount = drv->ME->getExportVarCount(); if (exportVarCount > 0) { drv->mFieldAddress = (void **) calloc(exportVarCount, sizeof(void*)); drv->mFieldIsObject = (bool *) calloc(exportVarCount, sizeof(bool)); bccGetExportVarList(drv->mBccScript, exportVarCount, (void **) drv->mFieldAddress); } else { drv->mFieldAddress = NULL; drv->mFieldIsObject = NULL; } if (md->objectSlotCount) { for (uint32_t ct=0; ct < md->objectSlotCount; ct++) { drv->mFieldIsObject[md->objectSlotList[ct]] = true; objectSlotCount = drv->ME->getObjectSlotCount(); if (objectSlotCount > 0) { const uint32_t *objectSlotList = drv->ME->getObjectSlotList(); for (uint32_t ct=0; ct < objectSlotCount; ct++) { drv->mFieldIsObject[objectSlotList[ct]] = true; } } // Copy info over to runtime script->mHal.info.exportedFunctionCount = md->exportFuncCount; script->mHal.info.exportedVariableCount = md->exportVarCount; script->mHal.info.exportedPragmaCount = md->pragmaCount; script->mHal.info.exportedPragmaKeyList = md->pragmaKeyList; script->mHal.info.exportedPragmaValueList = md->pragmaValueList; script->mHal.info.exportedFunctionCount = drv->ME->getExportFuncCount(); script->mHal.info.exportedVariableCount = drv->ME->getExportVarCount(); script->mHal.info.exportedPragmaCount = drv->ME->getPragmaCount(); script->mHal.info.exportedPragmaKeyList = drv->ME->getPragmaKeyList(); script->mHal.info.exportedPragmaValueList = drv->ME->getPragmaValueList(); script->mHal.info.root = drv->mRoot; pthread_mutex_unlock(&rsdgInitMutex); Loading @@ -164,6 +167,10 @@ bool rsdScriptInit(const Context *rsc, error: pthread_mutex_unlock(&rsdgInitMutex); if (drv->ME) { delete drv->ME; drv->ME = NULL; } free(drv); return false; Loading Loading @@ -445,10 +452,10 @@ void rsdScriptSetGlobalObj(const Context *dc, const Script *script, uint32_t slo void rsdScriptDestroy(const Context *dc, Script *script) { DrvScript *drv = (DrvScript *)script->mHal.drv; struct BCScriptMetadata *md = drv->mScriptMetadata; if (drv->mFieldAddress) { for (size_t ct = 0; ct < md->exportVarCount; ct++) { size_t exportVarCount = drv->ME->getExportVarCount(); for (size_t ct = 0; ct < exportVarCount; ct++) { if (drv->mFieldIsObject[ct]) { // The field address can be NULL if the script-side has // optimized the corresponding global variable away. Loading @@ -467,7 +474,8 @@ void rsdScriptDestroy(const Context *dc, Script *script) { drv->mInvokeFunctions = NULL; } bcinfoReleaseScriptMetadata(&drv->mScriptMetadata); delete drv->ME; drv->ME = NULL; free(drv); script->mHal.drv = NULL; Loading