Fix build issue and ref count bug with scripts.
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index be0191b..91b743c 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -27,9 +27,7 @@
ScriptC::ScriptC()
{
mAccScript = NULL;
- mScript = NULL;
- mScriptText = NULL;
- mScriptTextLength = 0;
+ memset(&mProgram, 0, sizeof(mProgram));
}
ScriptC::~ScriptC()
@@ -392,7 +390,7 @@
bool ScriptC::run(Context *rsc, uint32_t launchID)
{
Env e = {rsc, this};
- return mScript(&e, &scriptCPtrTable, launchID) != 0;
+ return mProgram.mScript(&e, &scriptCPtrTable, launchID) != 0;
}
ScriptCState::ScriptCState()
@@ -409,32 +407,33 @@
void ScriptCState::clear()
{
+ memset(&mProgram, 0, sizeof(mProgram));
+
mConstantBufferTypes.clear();
- mClearColor[0] = 0;
- mClearColor[1] = 0;
- mClearColor[2] = 0;
- mClearColor[3] = 1;
- mClearDepth = 1;
- mClearStencil = 0;
+
+ memset(&mEnviroment, 0, sizeof(mEnviroment));
+ mEnviroment.mClearColor[0] = 0;
+ mEnviroment.mClearColor[1] = 0;
+ mEnviroment.mClearColor[2] = 0;
+ mEnviroment.mClearColor[3] = 1;
+ mEnviroment.mClearDepth = 1;
+ mEnviroment.mClearStencil = 0;
+ mEnviroment.mIsRoot = false;
+ mEnviroment.mIsOrtho = true;
+
mAccScript = NULL;
- mScript = NULL;
- mIsRoot = false;
- mIsOrtho = true;
- mScriptText = NULL;
- mScriptTextLength = 0;
+
}
void ScriptCState::runCompiler()
{
mAccScript = accCreateScript();
- LOGE("Compiler 1");
- const char* scriptSource[] = {mScriptText};
- int scriptLength[] = {mScriptTextLength} ;
+ const char* scriptSource[] = {mProgram.mScriptText};
+ int scriptLength[] = {mProgram.mScriptTextLength} ;
accScriptSource(mAccScript, 1, scriptSource, scriptLength);
accCompileScript(mAccScript);
- accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mScript);
- LOGE("Compiler 1");
+ accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mProgram.mScript);
}
namespace android {
@@ -449,22 +448,22 @@
void rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a)
{
ScriptCState *ss = &rsc->mScriptC;
- ss->mClearColor[0] = r;
- ss->mClearColor[1] = g;
- ss->mClearColor[2] = b;
- ss->mClearColor[3] = a;
+ ss->mEnviroment.mClearColor[0] = r;
+ ss->mEnviroment.mClearColor[1] = g;
+ ss->mEnviroment.mClearColor[2] = b;
+ ss->mEnviroment.mClearColor[3] = a;
}
void rsi_ScriptCSetClearDepth(Context * rsc, float v)
{
ScriptCState *ss = &rsc->mScriptC;
- ss->mClearDepth = v;
+ ss->mEnviroment.mClearDepth = v;
}
void rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v)
{
ScriptCState *ss = &rsc->mScriptC;
- ss->mClearStencil = v;
+ ss->mEnviroment.mClearStencil = v;
}
void rsi_ScriptCAddType(Context * rsc, RsType vt)
@@ -473,30 +472,29 @@
ss->mConstantBufferTypes.add(static_cast<const Type *>(vt));
}
-void rsi_ScriptCSetScript(Context * rsc, void* accScript, void *vp)
+void rsi_ScriptCSetScript(Context * rsc, void *vp)
{
ScriptCState *ss = &rsc->mScriptC;
- ss->mAccScript = reinterpret_cast<ACCscript*>(accScript);
- ss->mScript = reinterpret_cast<rsc_RunScript>(vp);
+ ss->mProgram.mScript = reinterpret_cast<rsc_RunScript>(vp);
}
void rsi_ScriptCSetRoot(Context * rsc, bool isRoot)
{
ScriptCState *ss = &rsc->mScriptC;
- ss->mIsRoot = isRoot;
+ ss->mEnviroment.mIsRoot = isRoot;
}
void rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho)
{
ScriptCState *ss = &rsc->mScriptC;
- ss->mIsOrtho = isOrtho;
+ ss->mEnviroment.mIsOrtho = isOrtho;
}
void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
{
ScriptCState *ss = &rsc->mScriptC;
- ss->mScriptText = text;
- ss->mScriptTextLength = len;
+ ss->mProgram.mScriptText = text;
+ ss->mProgram.mScriptTextLength = len;
}
@@ -507,19 +505,12 @@
ss->runCompiler();
ScriptC *s = new ScriptC();
+ s->incRef();
s->mAccScript = ss->mAccScript;
ss->mAccScript = NULL;
- s->mScript = ss->mScript;
- s->mClearColor[0] = ss->mClearColor[0];
- s->mClearColor[1] = ss->mClearColor[1];
- s->mClearColor[2] = ss->mClearColor[2];
- s->mClearColor[3] = ss->mClearColor[3];
- s->mClearDepth = ss->mClearDepth;
- s->mClearStencil = ss->mClearStencil;
- s->mIsRoot = ss->mIsRoot;
- s->mIsOrtho = ss->mIsOrtho;
- s->mScriptText = ss->mScriptText;
- s->mScriptTextLength = ss->mScriptTextLength;
+ s->mEnviroment = ss->mEnviroment;
+ s->mProgram = ss->mProgram;
+ ss->clear();
return s;
}