From bd2197fb0038acd2dc4b17ad3ed3c69cc29dcce2 Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Wed, 7 Oct 2009 18:14:01 -0700 Subject: Add script to script call support. Add exception to catch out of bound index data when added to TriangleMeshBuilder. --- graphics/java/android/renderscript/SimpleMesh.java | 5 +++++ libs/rs/rsContext.h | 2 +- libs/rs/rsScriptC_Lib.cpp | 10 ++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/graphics/java/android/renderscript/SimpleMesh.java b/graphics/java/android/renderscript/SimpleMesh.java index b422702bbc43..0ad093e57978 100644 --- a/graphics/java/android/renderscript/SimpleMesh.java +++ b/graphics/java/android/renderscript/SimpleMesh.java @@ -290,6 +290,11 @@ public class SimpleMesh extends BaseObj { } public void addTriangle(int idx1, int idx2, int idx3) { + if((idx1 >= mVtxCount) || (idx1 < 0) || + (idx2 >= mVtxCount) || (idx2 < 0) || + (idx3 >= mVtxCount) || (idx3 < 0)) { + throw new IllegalStateException("Index provided greater than vertex count."); + } if ((mIndexCount + 3) >= mIndexData.length) { short t[] = new short[mIndexData.length * 2]; System.arraycopy(mIndexData, 0, t, 0, mIndexData.length); diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h index b56e7d7f8476..3570e102d96e 100644 --- a/libs/rs/rsContext.h +++ b/libs/rs/rsContext.h @@ -99,6 +99,7 @@ public: uint32_t getMessageToClient(void *data, size_t *receiveLen, size_t bufferLen, bool wait); bool sendMessageToClient(void *data, uint32_t cmdID, size_t len, bool waitForSpace); + bool runScript(Script *s, uint32_t launchID); void initToClient(); void deinitToClient(); @@ -212,7 +213,6 @@ private: void initEGL(); - bool runScript(Script *s, uint32_t launchID); bool runRootScript(); static void * threadProc(void *); diff --git a/libs/rs/rsScriptC_Lib.cpp b/libs/rs/rsScriptC_Lib.cpp index 9a962907a100..436f48b319ef 100644 --- a/libs/rs/rsScriptC_Lib.cpp +++ b/libs/rs/rsScriptC_Lib.cpp @@ -1008,6 +1008,13 @@ static uint32_t SC_toClient(void *data, int cmdID, int len, int waitForSpace) return rsc->sendMessageToClient(data, cmdID, len, waitForSpace != 0); } +static void SC_scriptCall(int scriptID) +{ + GET_TLS(); + rsc->runScript((Script *)scriptID, 0); +} + + ////////////////////////////////////////////////////////////////////////////// // Class implementation ////////////////////////////////////////////////////////////////////////////// @@ -1289,6 +1296,9 @@ ScriptCState::SymbolTable_t ScriptCState::gSyms[] = { { "debugHexI32", (void *)&SC_debugHexI32, "void", "(void *, int)" }, + { "scriptCall", (void *)&SC_scriptCall, + "void", "(int)" }, + { NULL, NULL, NULL, NULL } }; -- cgit v1.2.3-59-g8ed1b