Пример #1
0
void* MainThread(void* info) {
  int ret;
  uint32_t i;
  PSInstanceTrace("Running MainThread.\n");
  struct StartInfo* si = (struct StartInfo*)info;

  PP_Resource message_loop = PSInterfaceMessageLoop()->Create(g_ps_instance);
  if (PSInterfaceMessageLoop()->AttachToCurrentThread(message_loop) != PP_OK) {
    PSInstanceError("Unable to attach message loop to thread.\n");
    return NULL;
  }

  if (!g_ps_main_cb) {
    PSInstanceError("No main defined.\n");
    return 0;
  }

  PSInstanceTrace("Starting MAIN.\n");
  ret = g_ps_main_cb(si->argc_, si->argv_);
  PSInstanceLog("Main thread returned with %d.\n", ret);

  /* Clean up StartInfo. */
  for (i = 0; i < si->argc_; i++) {
    free(si->argv_[i]);
  }
  free(si->argv_);
  free(si);

  /* Exit the entire process once the 'main' thread returns. The error code
   * will be available to javascript via the exitcode parameter of the crash
   * event. */
#ifdef __native_client__
  exit(ret);
#else
  ExitHandshake(ret, NULL);
#endif
  return NULL;
}
Пример #2
0
int NACL_VideoInit(_THIS) {
    SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
    SDL_DisplayMode mode;

    SDL_zero(mode);
    mode.format = driverdata->format;
    mode.w = driverdata->w;
    mode.h = driverdata->h;
    mode.refresh_rate = 0;
    mode.driverdata = NULL;
    if (SDL_AddBasicVideoDisplay(&mode) < 0) {
        return -1;
    }

    SDL_AddDisplayMode(&_this->displays[0], &mode);
    
    PSInterfaceInit();
    driverdata->instance = PSGetInstanceId();
    driverdata->ppb_graphics = PSInterfaceGraphics3D();
    driverdata->ppb_message_loop = PSInterfaceMessageLoop();
    driverdata->ppb_core = PSInterfaceCore();
    driverdata->ppb_fullscreen = PSInterfaceFullscreen();
    driverdata->ppb_instance = PSInterfaceInstance();
    driverdata->ppb_image_data = PSInterfaceImageData();
    driverdata->ppb_view = PSInterfaceView();
    driverdata->ppb_var = PSInterfaceVar();
    driverdata->ppb_input_event = (PPB_InputEvent*) PSGetInterface(PPB_INPUT_EVENT_INTERFACE);
    driverdata->ppb_keyboard_input_event = (PPB_KeyboardInputEvent*) PSGetInterface(PPB_KEYBOARD_INPUT_EVENT_INTERFACE);
    driverdata->ppb_mouse_input_event = (PPB_MouseInputEvent*) PSGetInterface(PPB_MOUSE_INPUT_EVENT_INTERFACE);
    driverdata->ppb_wheel_input_event = (PPB_WheelInputEvent*) PSGetInterface(PPB_WHEEL_INPUT_EVENT_INTERFACE);
    driverdata->ppb_touch_input_event = (PPB_TouchInputEvent*) PSGetInterface(PPB_TOUCH_INPUT_EVENT_INTERFACE);
    
    
    driverdata->message_loop = driverdata->ppb_message_loop->Create(driverdata->instance);
    
    PSEventSetFilter(PSE_ALL);
    
    /* We're done! */
    return 0;
}