summaryrefslogtreecommitdiffstats
path: root/libs/rs/rsScript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/rs/rsScript.cpp')
-rw-r--r--libs/rs/rsScript.cpp85
1 files changed, 41 insertions, 44 deletions
diff --git a/libs/rs/rsScript.cpp b/libs/rs/rsScript.cpp
index a33933b..fc22fc3 100644
--- a/libs/rs/rsScript.cpp
+++ b/libs/rs/rsScript.cpp
@@ -24,19 +24,25 @@ Script::Script(Context *rsc) : ObjectBase(rsc)
mAllocFile = __FILE__;
mAllocLine = __LINE__;
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;
}
Script::~Script()
{
}
+void Script::setVar(uint32_t slot, const void *val, uint32_t len)
+{
+ int32_t *destPtr = ((int32_t **)mEnviroment.mFieldAddress)[slot];
+ if (destPtr) {
+ //LOGE("setVar f1 %f", ((const float *)destPtr)[0]);
+ //LOGE("setVar %p %i", destPtr, len);
+ memcpy(destPtr, val, len);
+ //LOGE("setVar f2 %f", ((const float *)destPtr)[0]);
+ } else {
+ LOGE("Calling setVar on slot = %i which is null", slot);
+ }
+}
+
namespace android {
namespace renderscript {
@@ -44,71 +50,62 @@ namespace renderscript {
void rsi_ScriptBindAllocation(Context * rsc, RsScript vs, RsAllocation va, uint32_t slot)
{
Script *s = static_cast<Script *>(vs);
- s->mSlots[slot].set(static_cast<Allocation *>(va));
+ Allocation *a = static_cast<Allocation *>(va);
+ s->mSlots[slot].set(a);
+ //LOGE("rsi_ScriptBindAllocation %i %p %p", slot, a, a->getPtr());
}
-void rsi_ScriptSetClearColor(Context * rsc, RsScript vs, float r, float g, float b, float a)
+void rsi_ScriptSetTimeZone(Context * rsc, RsScript vs, const char * timeZone, uint32_t length)
{
Script *s = static_cast<Script *>(vs);
- s->mEnviroment.mClearColor[0] = r;
- s->mEnviroment.mClearColor[1] = g;
- s->mEnviroment.mClearColor[2] = b;
- s->mEnviroment.mClearColor[3] = a;
+ s->mEnviroment.mTimeZone = timeZone;
}
-void rsi_ScriptSetTimeZone(Context * rsc, RsScript vs, const char * timeZone, uint32_t length)
+void rsi_ScriptSetType(Context * rsc, RsType vt, uint32_t slot, bool writable, const char *name)
{
- Script *s = static_cast<Script *>(vs);
- s->mEnviroment.mTimeZone = timeZone;
+ ScriptCState *ss = &rsc->mScriptC;
+ const Type *t = static_cast<const Type *>(vt);
+ ss->mConstantBufferTypes[slot].set(t);
+ ss->mSlotWritable[slot] = writable;
+ LOGE("rsi_ScriptSetType");
}
-void rsi_ScriptSetClearDepth(Context * rsc, RsScript vs, float v)
+void rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot)
{
Script *s = static_cast<Script *>(vs);
- s->mEnviroment.mClearDepth = v;
+ s->Invoke(rsc, slot, NULL, 0);
}
-void rsi_ScriptSetClearStencil(Context * rsc, RsScript vs, uint32_t v)
+
+void rsi_ScriptInvokeData(Context *rsc, RsScript vs, uint32_t slot, void *data)
{
Script *s = static_cast<Script *>(vs);
- s->mEnviroment.mClearStencil = v;
+ s->Invoke(rsc, slot, NULL, 0);
}
-void rsi_ScriptSetType(Context * rsc, RsType vt, uint32_t slot, bool writable, const char *name)
+void rsi_ScriptInvokeV(Context *rsc, RsScript vs, uint32_t slot, const void *data, uint32_t len)
{
- ScriptCState *ss = &rsc->mScriptC;
- const Type *t = static_cast<const Type *>(vt);
- ss->mConstantBufferTypes[slot].set(t);
- ss->mSlotWritable[slot] = writable;
- if (name) {
- ss->mSlotNames[slot].setTo(name);
- } else {
- ss->mSlotNames[slot].setTo("");
- }
+ Script *s = static_cast<Script *>(vs);
+ s->Invoke(rsc, slot, data, len);
}
-void rsi_ScriptSetInvoke(Context *rsc, const char *name, uint32_t slot)
+void rsi_ScriptSetVarI(Context *rsc, RsScript vs, uint32_t slot, int value)
{
- ScriptCState *ss = &rsc->mScriptC;
- ss->mInvokableNames[slot] = name;
+ Script *s = static_cast<Script *>(vs);
+ s->setVar(slot, &value, sizeof(value));
}
-void rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot)
+void rsi_ScriptSetVarF(Context *rsc, RsScript vs, uint32_t slot, float value)
{
Script *s = static_cast<Script *>(vs);
- if (s->mEnviroment.mInvokables[slot] == NULL) {
- rsc->setError(RS_ERROR_BAD_SCRIPT, "Calling invoke on bad script");
- return;
- }
- s->setupScript();
- s->mEnviroment.mInvokables[slot]();
+ s->setVar(slot, &value, sizeof(value));
}
-
-void rsi_ScriptSetRoot(Context * rsc, bool isRoot)
+void rsi_ScriptSetVarV(Context *rsc, RsScript vs, uint32_t slot, const void *data, uint32_t len)
{
- ScriptCState *ss = &rsc->mScriptC;
- ss->mScript->mEnviroment.mIsRoot = isRoot;
+ const float *fp = (const float *)data;
+ Script *s = static_cast<Script *>(vs);
+ s->setVar(slot, data, len);
}