Add named objects and implement support for ProgramFragmentStore and ProgramFragment to be used by name in scripts.
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index 49d7872..ae58e5f 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -390,6 +390,14 @@
bool ScriptC::run(Context *rsc, uint32_t launchID)
{
Env e = {rsc, this};
+
+ if (mEnviroment.mFragmentStore.get()) {
+ rsc->setFragmentStore(mEnviroment.mFragmentStore.get());
+ }
+ if (mEnviroment.mFragment.get()) {
+ rsc->setFragment(mEnviroment.mFragment.get());
+ }
+
return mProgram.mScript(&e, &scriptCPtrTable, launchID) != 0;
}
@@ -425,7 +433,7 @@
}
-void ScriptCState::runCompiler()
+void ScriptCState::runCompiler(Context *rsc)
{
mAccScript = accCreateScript();
@@ -442,16 +450,6 @@
ACCchar * str[pragmaMax];
accGetPragmas(mAccScript, &pragmaCount, pragmaMax, &str[0]);
- // Start with defaults
- mEnviroment.mStateVertex =
- Script::Enviroment_t::VTX_ORTHO_WINDOW;
- mEnviroment.mStateRaster =
- Script::Enviroment_t::RASTER_FLAT;
- mEnviroment.mStateFragment =
- Script::Enviroment_t::FRAGMENT_COLOR;
- mEnviroment.mStateFragmentStore =
- Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_REPLACE;
-
for (int ct=0; ct < pragmaCount; ct+=2) {
LOGE("pragma %i %s %s", ct, str[ct], str[ct+1]);
@@ -462,96 +460,34 @@
if (!strcmp(str[ct], "stateVertex")) {
- if (!strcmp(str[ct+1], "orthoWindow")) {
- mEnviroment.mStateVertex =
- Script::Enviroment_t::VTX_ORTHO_WINDOW;
- continue;
- }
- if (!strcmp(str[ct+1], "orthoNormalized")) {
- mEnviroment.mStateVertex =
- Script::Enviroment_t::VTX_ORTHO_NORMALIZED;
- continue;
- }
- if (!strcmp(str[ct+1], "projection")) {
- mEnviroment.mStateVertex =
- Script::Enviroment_t::VTX_PROJECTION;
- continue;
- }
- if (!strcmp(str[ct+1], "parent")) {
- mEnviroment.mStateVertex =
- Script::Enviroment_t::VTX_PARENT;
- continue;
- }
LOGE("Unreconized value %s passed to stateVertex", str[ct+1]);
}
if (!strcmp(str[ct], "stateRaster")) {
- if (!strcmp(str[ct+1], "flat")) {
- mEnviroment.mStateRaster =
- Script::Enviroment_t::RASTER_FLAT;
- continue;
- }
- if (!strcmp(str[ct+1], "smooth")) {
- mEnviroment.mStateRaster =
- Script::Enviroment_t::RASTER_SMOOTH;
- continue;
- }
- if (!strcmp(str[ct+1], "parent")) {
- mEnviroment.mStateRaster =
- Script::Enviroment_t::RASTER_PARENT;
- continue;
- }
LOGE("Unreconized value %s passed to stateRaster", str[ct+1]);
}
if (!strcmp(str[ct], "stateFragment")) {
- if (!strcmp(str[ct+1], "color")) {
- mEnviroment.mStateFragment =
- Script::Enviroment_t::FRAGMENT_COLOR;
- continue;
- }
- if (!strcmp(str[ct+1], "texReplace")) {
- mEnviroment.mStateFragment =
- Script::Enviroment_t::FRAGMENT_TEX_REPLACE;
- continue;
- }
- if (!strcmp(str[ct+1], "texModulate")) {
- mEnviroment.mStateFragment =
- Script::Enviroment_t::FRAGMENT_TEX_MODULATE;
- continue;
- }
- if (!strcmp(str[ct+1], "parent")) {
- mEnviroment.mStateFragment =
- Script::Enviroment_t::FRAGMENT_PARENT;
+ ProgramFragment * pf =
+ (ProgramFragment *)rsc->lookupName(str[ct+1]);
+ if (pf != NULL) {
+ mEnviroment.mFragment.set(pf);
continue;
}
LOGE("Unreconized value %s passed to stateFragment", str[ct+1]);
}
if (!strcmp(str[ct], "stateFragmentStore")) {
- if (!strcmp(str[ct+1], "alwaysReplace")) {
- mEnviroment.mStateFragmentStore =
- Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_REPLACE;
+ ProgramFragmentStore * pfs =
+ (ProgramFragmentStore *)rsc->lookupName(str[ct+1]);
+ if (pfs != NULL) {
+ mEnviroment.mFragmentStore.set(pfs);
continue;
}
- if (!strcmp(str[ct+1], "alwaysBlend")) {
- mEnviroment.mStateFragmentStore =
- Script::Enviroment_t::FRAGMENT_STORE_ALWAYS_BLEND;
- continue;
- }
- if (!strcmp(str[ct+1], "depthLessReplace")) {
- mEnviroment.mStateFragmentStore =
- Script::Enviroment_t::FRAGMENT_STORE_DEPTH_LESS_REPLACE;
- continue;
- }
- if (!strcmp(str[ct+1], "depthLessBlend")) {
- mEnviroment.mStateFragmentStore =
- Script::Enviroment_t::FRAGMENT_STORE_DEPTH_LESS_BLEND;
- continue;
- }
+
if (!strcmp(str[ct+1], "parent")) {
- mEnviroment.mStateFragmentStore =
- Script::Enviroment_t::FRAGMENT_STORE_PARENT;
+ //mEnviroment.mStateFragmentStore =
+ //Script::Enviroment_t::FRAGMENT_STORE_PARENT;
continue;
}
LOGE("Unreconized value %s passed to stateFragmentStore", str[ct+1]);
@@ -632,7 +568,7 @@
{
ScriptCState *ss = &rsc->mScriptC;
- ss->runCompiler();
+ ss->runCompiler(rsc);
ScriptC *s = new ScriptC();
s->incRef();