// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef PPAPI_SIMPLE_PS_H_ #define PPAPI_SIMPLE_PS_H_ #include "ppapi/c/pp_instance.h" #include "sdk_util/macros.h" EXTERN_C_BEGIN /** * The ppapi_simple library simplifies the use of the Pepper interfaces by * providing a more traditional 'C' or 'C++' style framework. The library * creates an PSInstance derived object based on the ppapi_cpp library and * initializes the nacl_io library to provide a POSIX friendly I/O environment. * * In order to provide a standard blocking environment, the library will hide * the actual "Pepper Thread" which is the thread that standard events * such as window resize, mouse keyboard, or other inputs arrive. To prevent * blocking, instead we enqueue these events onto a thread safe linked list * and expect them to be processed on a new thread. In addition, the library * will automatically start a new thread on which can be used effectively * as a "main" entry point. * * For C style development, the PPAPI_SIMPLE_REGISTER_MAIN(XX) macros provide a * mechanism to register the entry an point for "main". All events are pushed * onto an event queue which can then be pulled from this new thread. * NOTE: The link will still need libstdc++ and libppapi_cpp since the library * is still creating a C++ object which does the initialization work and * forwards the events. * * For C++ style development, use the ppapi_simple_instance.h, * ppapi_simple_instance_2d.h, and ppapi_simple_instance_3d.h headers as * a base class, and overload the appropriate virtual functions such as * Main, ChangeContext, or Render. */ /** * PSGetInstanceId * * Return the PP_Instance id of this instance of the module. This is required * by most of the Pepper resource creation routines. */ PP_Instance PSGetInstanceId(); /** * PSGetInterface * * Return the Pepper instance referred to by 'name'. Will return a pointer * to the interface, or NULL if not found or not available. */ const void* PSGetInterface(const char *name); /** * PSUserCreateInstance * * Prototype for the user provided function which creates and configures * the instance object. This function is defined by one of the macros below, * or by the equivalent macro in one of the other headers. For 'C' * development, one of the basic instances which support C callback are used. * For C++, this function should instantiate the user defined instance. See * the two macros below. */ extern void* PSUserCreateInstance(PP_Instance inst); /** * PPAPI_SIMPLE_USE_MAIN * * For use with C projects, this macro calls the provided factory with * configuration information. */ #define PPAPI_SIMPLE_USE_MAIN(factory, func) \ void* PSUserCreateInstance(PP_Instance inst) { \ return factory(inst, func); \ } EXTERN_C_END #endif // PPAPI_SIMPLE_PS_H_