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; }
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; }