Example #1
0
static void *print(void *arg) {
  int val;
  inline_as3("var abc:int = this[\"abc\"];");
  AS3_GetScalarFromVar(val, abc); 
  printf("Val: %d\n",val);
  return 0;
}
Example #2
0
static void *threadProc(void *arg) {
  inline_as3("this[\"abc\"]=3333;");
  avm2_self_msleep((void*)&main_tid, 10);
  avm2_thr_impersonate(main_tid,print,NULL);
  avm2_wake((void*)&main_tid);
  // printf("thread. main id is %d\n",main_tid);
  // avm2_ui_thunk(print, NULL);
  return NULL;
}
Example #3
0
int main() {
  long mid;
  thr_self(&mid);
  printf("main_tid: %d\n",mid);
  main_tid = mid;

  inline_as3("this[\"abc\"]=8888;");
  inline_as3("var af:Function = function(){};");

  avm2_ui_thunk(assign, NULL);
  avm2_ui_thunk(print, NULL);

  for(int i = 0; i < sNumThreads; i++)
    pthread_create(sThreads + i, NULL, threadProc, (void *)i);
  for(int i = 0; i < sNumThreads; i++)
    pthread_join(sThreads[i], NULL);

  AS3_GoAsync();

  return 0;
}
Example #4
0
extern "C" void compileShader()
{
   // Copy the AS3 string to the C heap (must be free'd later)
   char *src = NULL;
   AS3_MallocString(src, src);

   bool gles = false;
   AS3_CopyScalarToVar(gles, gles);

   glslopt_ctx* gContext = glslopt_initialize(gles);

   int mode;
   AS3_GetScalarFromVar(mode, mode);
   const glslopt_shader_type type = mode == 0 ? kGlslOptShaderVertex : kGlslOptShaderFragment;

   glslopt_shader* shader = glslopt_optimize(gContext, type, src, 0);

   const char* optimizedShader = glslopt_get_output(shader);
   AS3_DeclareVar(outputstr, String);
   AS3_CopyCStringToVar(outputstr, optimizedShader, strlen(optimizedShader));

   glslopt_cleanup(gContext);

   //optimize shader and/or turn sampler instructions into easily
   //replaceable aliases (for generating sampler variations at runtime)
   inline_as3(
      "import com.adobe.AGALOptimiser.translator.transformations.Utils;\n"
      "var shader:Object = null;\n"
      "try { shader = JSON.parse(outputstr) } catch(e:*) { }\n"
      "if(shader != null && shader[\"agalasm\"] != null) {\n"
      "    if(optimize)\n"
      "        shader = Utils.optimizeShader(shader, mode == 0)\n"
      "    shader[\"agalasm\"] = Utils.processSamplers(shader[\"agalasm\"]);\n"
      "    outputstr = JSON.stringify(shader, null, 1)\n"
      "}\n"
   );

   AS3_ReturnAS3Var(outputstr);
}
Example #5
0
extern "C" void compileShader()
{
   // Copy the AS3 string to the C heap (must be free'd later)
   char *src = NULL;
   AS3_MallocString(src, src);

   bool gles = false;
   AS3_CopyScalarToVar(gles, gles);


   glslopt_ctx* gContext = glslopt_initialize(gles);

   int mode;
   AS3_GetScalarFromVar(mode, mode);
   const glslopt_shader_type type = mode == 0 ? kGlslOptShaderVertex : kGlslOptShaderFragment;

   glslopt_shader* shader = glslopt_optimize(gContext, type, src, 0);

   const char* optimizedShader = glslopt_get_output(shader);
   AS3_DeclareVar(outputstr, String);
   AS3_CopyCStringToVar(outputstr, optimizedShader, strlen(optimizedShader));

   glslopt_cleanup(gContext);

   inline_as3(
      "import com.adobe.AGALOptimiser.translator.transformations.Utils;\n"
      "if(optimize) {\n"
      "    var shader:Object = JSON.parse(outputstr)\n"
      "    if(shader[\"agalasm\"] != null) {\n"
      "        shader = Utils.optimizeShader(shader, mode == 0)\n"
      "        outputstr = JSON.stringify(shader)\n"
      "    }\n"
      "}\n"
   );

   AS3_ReturnAS3Var(outputstr);
}
Example #6
0
// this function returns a strdup-ed string instead of printing directly
// because it will be called by avm2_ui_thunk where C I/O is unsafe
static void *assign(void *arg) {
  inline_as3("this[\"abc\"]=2222;");
  return 0;
}