blob: a6bb3d3fc7cece9f5a9806773a293f419a01bb01 [file] [log] [blame]
// 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_