Home | History | Annotate | Download | only in api
      1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 /**
      7  * Defines the <code>PPB_Graphics3D</code> struct representing a 3D graphics
      8  * context within the browser.
      9  */
     10 
     11 [generate_thunk]
     12 
     13 label Chrome {
     14   M15 = 1.0
     15 };
     16 
     17 #inline c
     18 /* Add 3D graphics enums */
     19 #include "ppapi/c/pp_graphics_3d.h"
     20 #endinl
     21 
     22 /**
     23  * <code>PPB_Graphics3D</code> defines the interface for a 3D graphics context.
     24  * <strong>Example usage from plugin code:</strong>
     25  *
     26  * <strong>Setup:</strong>
     27  * @code
     28  * PP_Resource context;
     29  * int32_t attribs[] = {PP_GRAPHICS3DATTRIB_WIDTH, 800,
     30  *                      PP_GRAPHICS3DATTRIB_HEIGHT, 800,
     31  *                      PP_GRAPHICS3DATTRIB_NONE};
     32  * context = g3d->Create(instance, attribs, &context);
     33  * inst->BindGraphics(instance, context);
     34  * @endcode
     35  *
     36  * <strong>Present one frame:</strong>
     37  * @code
     38  * gles2->Clear(context, GL_COLOR_BUFFER);
     39  * g3d->SwapBuffers(context);
     40  * @endcode
     41  *
     42  * <strong>Shutdown:</strong>
     43  * @code
     44  * core->ReleaseResource(context);
     45  * @endcode
     46  */
     47 [macro="PPB_GRAPHICS_3D_INTERFACE"]
     48 interface PPB_Graphics3D {
     49   /**
     50    * GetAttribMaxValue() retrieves the maximum supported value for the
     51    * given attribute. This function may be used to check if a particular
     52    * attribute value is supported before attempting to create a context.
     53    *
     54    * @param[in] instance The module instance.
     55    * @param[in] attribute The attribute for which maximum value is queried.
     56    * Attributes that can be queried for include:
     57    * - <code>PP_GRAPHICS3DATTRIB_ALPHA_SIZE</code>
     58    * - <code>PP_GRAPHICS3DATTRIB_BLUE_SIZE</code>
     59    * - <code>PP_GRAPHICS3DATTRIB_GREEN_SIZE</code>
     60    * - <code>PP_GRAPHICS3DATTRIB_RED_SIZE</code>
     61    * - <code>PP_GRAPHICS3DATTRIB_DEPTH_SIZE</code>
     62    * - <code>PP_GRAPHICS3DATTRIB_STENCIL_SIZE</code>
     63    * - <code>PP_GRAPHICS3DATTRIB_SAMPLES</code>
     64    * - <code>PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS</code>
     65    * - <code>PP_GRAPHICS3DATTRIB_WIDTH</code>
     66    * - <code>PP_GRAPHICS3DATTRIB_HEIGHT</code>
     67    * @param[out] value The maximum supported value for <code>attribute</code>
     68    *
     69    * @return Returns <code>PP_TRUE</code> on success or the following on error:
     70    * - <code>PP_ERROR_BADRESOURCE</code> if <code>instance</code> is invalid
     71    * - <code>PP_ERROR_BADARGUMENT</code> if <code>attribute</code> is invalid
     72    *   or <code>value</code> is 0
     73    */
     74   int32_t GetAttribMaxValue(
     75       [in] PP_Resource instance,
     76       [in] int32_t attribute,
     77       [out] int32_t value);
     78 
     79   /**
     80    * Create() creates and initializes a 3D rendering context.
     81    * The returned context is off-screen to start with. It must be attached to
     82    * a plugin instance using <code>PPB_Instance::BindGraphics</code> to draw
     83    * on the web page.
     84    *
     85    * @param[in] instance The module instance.
     86    *
     87    * @param[in] share_context The 3D context with which the created context
     88    * would share resources. If <code>share_context</code> is not 0, then all
     89    * shareable data, as defined by the client API (note that for OpenGL and
     90    * OpenGL ES, shareable data excludes texture objects named 0) will be shared
     91    * by <code>share_context<code>, all other contexts <code>share_context</code>
     92    * already shares with, and the newly created context. An arbitrary number of
     93    * <code>PPB_Graphics3D</code> can share data in this fashion.
     94    *
     95    * @param[out] attrib_list specifies a list of attributes for the context.
     96    * It is a list of attribute name-value pairs in which each attribute is
     97    * immediately followed by the corresponding desired value. The list is
     98    * terminated with <code>PP_GRAPHICS3DATTRIB_NONE</code>.
     99    * The <code>attrib_list<code> may be 0 or empty (first attribute is
    100    * <code>PP_GRAPHICS3DATTRIB_NONE</code>). If an attribute is not
    101    * specified in <code>attrib_list</code>, then the default value is used
    102    * (it is said to be specified implicitly).
    103    * Attributes for the context are chosen according to an attribute-specific
    104    * criteria. Attributes can be classified into two categories:
    105    * - AtLeast: The attribute value in the returned context meets or exceeds
    106    *            the value specified in <code>attrib_list</code>.
    107    * - Exact: The attribute value in the returned context is equal to
    108    *          the value specified in <code>attrib_list</code>.
    109    *
    110    * Attributes that can be specified in <code>attrib_list</code> include:
    111    * - <code>PP_GRAPHICS3DATTRIB_ALPHA_SIZE</code>:
    112    *   Category: AtLeast Default: 0.
    113    * - <code>PP_GRAPHICS3DATTRIB_BLUE_SIZE</code>:
    114    *   Category: AtLeast Default: 0.
    115    * - <code>PP_GRAPHICS3DATTRIB_GREEN_SIZE</code>:
    116    *   Category: AtLeast Default: 0.
    117    * - <code>PP_GRAPHICS3DATTRIB_RED_SIZE</code>:
    118    *   Category: AtLeast Default: 0.
    119    * - <code>PP_GRAPHICS3DATTRIB_DEPTH_SIZE</code>:
    120    *   Category: AtLeast Default: 0.
    121    * - <code>PP_GRAPHICS3DATTRIB_STENCIL_SIZE</code>:
    122    *   Category: AtLeast Default: 0.
    123    * - <code>PP_GRAPHICS3DATTRIB_SAMPLES</code>:
    124    *   Category: AtLeast Default: 0.
    125    * - <code>PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS</code>:
    126    *   Category: AtLeast Default: 0.
    127    * - <code>PP_GRAPHICS3DATTRIB_WIDTH</code>:
    128    *   Category: Exact Default: 0.
    129    * - <code>PP_GRAPHICS3DATTRIB_HEIGHT</code>:
    130    *   Category: Exact Default: 0.
    131    * - <code>PP_GRAPHICS3DATTRIB_SWAP_BEHAVIOR</code>:
    132    *   Category: Exact Default: Implementation defined.
    133    *
    134    * @return A <code>PP_Resource</code> containing the 3D graphics context if
    135    * successful or 0 if unsuccessful.
    136    */
    137   PP_Resource Create(
    138       [in] PP_Instance instance,
    139       [in] PP_Resource share_context,
    140       [in] int32_t[] attrib_list);
    141 
    142   /**
    143    * IsGraphics3D() determines if the given resource is a valid
    144    * <code>Graphics3D</code> context.
    145    *
    146    * @param[in] resource A <code>Graphics3D</code> context resource.
    147    *
    148    * @return PP_TRUE if the given resource is a valid <code>Graphics3D</code>,
    149    * <code>PP_FALSE</code> if it is an invalid resource or is a resource of
    150    * another type.
    151    */
    152   PP_Bool IsGraphics3D(
    153       [in] PP_Resource resource);
    154 
    155   /**
    156    * GetAttribs() retrieves the value for each attribute in
    157    * <code>attrib_list</code>.
    158    *
    159    * @param[in] context The 3D graphics context.
    160    * @param[in,out] attrib_list The list of attributes that are queried.
    161    * <code>attrib_list</code> has the same structure as described for
    162    * <code>PPB_Graphics3D::Create</code>. It is both input and output
    163    * structure for this function. All attributes specified in
    164    * <code>PPB_Graphics3D::Create</code> can be queried for.
    165    *
    166    * @return Returns <code>PP_OK</code> on success or:
    167    * - <code>PP_ERROR_BADRESOURCE</code> if context is invalid
    168    * - <code>PP_ERROR_BADARGUMENT</code> if attrib_list is 0 or any attribute
    169    *   in the <code>attrib_list</code> is not a valid attribute.
    170    *
    171    * <strong>Example usage:</strong> To get the values for rgb bits in the
    172    * color buffer, this function must be called as following:
    173    * @code
    174    * int attrib_list[] = {PP_GRAPHICS3DATTRIB_RED_SIZE, 0,
    175    *                      PP_GRAPHICS3DATTRIB_GREEN_SIZE, 0,
    176    *                      PP_GRAPHICS3DATTRIB_BLUE_SIZE, 0,
    177    *                      PP_GRAPHICS3DATTRIB_NONE};
    178    * GetAttribs(context, attrib_list);
    179    * int red_bits = attrib_list[1];
    180    * int green_bits = attrib_list[3];
    181    * int blue_bits = attrib_list[5];
    182    * @endcode
    183    */
    184   int32_t GetAttribs(
    185       [in] PP_Resource context,
    186       [inout] int32_t[] attrib_list);
    187 
    188   /**
    189    * SetAttribs() sets the values for each attribute in
    190    * <code>attrib_list</code>.
    191    *
    192    * @param[in] context The 3D graphics context.
    193    * @param[in] attrib_list The list of attributes whose values need to be set.
    194    * <code>attrib_list</code> has the same structure as described for
    195    * <code>PPB_Graphics3D::Create</code>.
    196    * Attributes that can be specified are:
    197    * - <code>PP_GRAPHICS3DATTRIB_SWAP_BEHAVIOR</code>
    198    *
    199    * @return Returns <code>PP_OK</code> on success or:
    200    * - <code>PP_ERROR_BADRESOURCE</code> if <code>context</code> is invalid.
    201    * - <code>PP_ERROR_BADARGUMENT</code> if <code>attrib_list</code> is 0 or
    202    *   any attribute in the <code>attrib_list</code> is not a valid attribute.
    203    */
    204   int32_t SetAttribs(
    205       [in] PP_Resource context,
    206       [in] int32_t[] attrib_list);
    207 
    208   /**
    209    * GetError() returns the current state of the given 3D context.
    210    *
    211    * The recoverable error conditions that have no side effect are
    212    * detected and returned immediately by all functions in this interface.
    213    * In addition the implementation may get into a fatal state while
    214    * processing a command. In this case the application must destroy the
    215    * context and reinitialize client API state and objects to continue
    216    * rendering.
    217    *
    218    * Note that the same error code is also returned in the SwapBuffers callback.
    219    * It is recommended to handle error in the SwapBuffers callback because
    220    * GetError is synchronous. This function may be useful in rare cases where
    221    * drawing a frame is expensive and you want to verify the result of
    222    * ResizeBuffers before attempting to draw a frame.
    223    *
    224    * @param[in] The 3D graphics context.
    225    * @return Returns:
    226    * - <code>PP_OK</code> if no error
    227    * - <code>PP_ERROR_NOMEMORY</code>
    228    * - <code>PP_ERROR_CONTEXT_LOST</code>
    229    */
    230   int32_t GetError(
    231       [in] PP_Resource context);
    232 
    233   /**
    234    * ResizeBuffers() resizes the backing surface for context.
    235    *
    236    * If the surface could not be resized due to insufficient resources,
    237    * <code>PP_ERROR_NOMEMORY</code> error is returned on the next
    238    * <code>SwapBuffers</code> callback.
    239    *
    240    * @param[in] context The 3D graphics context.
    241    * @param[in] width The width of the backing surface.
    242    * @param[in] height The height of the backing surface.
    243    * @return Returns <code>PP_OK</code> on success or:
    244    * - <code>PP_ERROR_BADRESOURCE</code> if context is invalid.
    245    * - <code>PP_ERROR_BADARGUMENT</code> if the value specified for
    246    *   <code>width</code> or <code>height</code> is less than zero.
    247    */
    248   int32_t ResizeBuffers(
    249       [in] PP_Resource context,
    250       [in] int32_t width,
    251       [in] int32_t height);
    252 
    253   /**
    254    * SwapBuffers() makes the contents of the color buffer available for
    255    * compositing. This function has no effect on off-screen surfaces - ones not
    256    * bound to any plugin instance. The contents of ancillary buffers are always
    257    * undefined after calling <code>SwapBuffers</code>. The contents of the color
    258    * buffer are undefined if the value of the
    259    * <code>PP_GRAPHICS3DATTRIB_SWAP_BEHAVIOR</code> attribute of context is not
    260    * <code>PP_GRAPHICS3DATTRIB_BUFFER_PRESERVED</code>.
    261    *
    262    * <code>SwapBuffers</code> runs in asynchronous mode. Specify a callback
    263    * function and the argument for that callback function. The callback function
    264    * will be executed on the calling thread after the color buffer has been
    265    * composited with rest of the html page. While you are waiting for a
    266    * SwapBuffers callback, additional calls to SwapBuffers will fail.
    267    *
    268    * Because the callback is executed (or thread unblocked) only when the
    269    * plugin's current state is actually on the screen, this function provides a
    270    * way to rate limit animations. By waiting until the image is on the screen
    271    * before painting the next frame, you can ensure you're not generating
    272    * updates faster than the screen can be updated.
    273    *
    274    * SwapBuffers performs an implicit flush operation on context.
    275    * If the context gets into an unrecoverable error condition while
    276    * processing a command, the error code will be returned as the argument
    277    * for the callback. The callback may return the following error codes:
    278    * - <code>PP_ERROR_NOMEMORY</code>
    279    * - <code>PP_ERROR_CONTEXT_LOST</code>
    280    * Note that the same error code may also be obtained by calling GetError.
    281    *
    282    * @param[in] context The 3D graphics context.
    283    * @param[in] callback The callback that will executed when
    284    * <code>SwapBuffers</code> completes.
    285    *
    286    * @return Returns PP_OK on success or:
    287    * - <code>PP_ERROR_BADRESOURCE</code> if context is invalid.
    288    * - <code>PP_ERROR_BADARGUMENT</code> if callback is invalid.
    289    *
    290    */
    291   int32_t SwapBuffers(
    292       [in] PP_Resource context,
    293       [in] PP_CompletionCallback callback);
    294 };
    295 
    296