Home | History | Annotate | Download | only in gl
      1 
      2 /*
      3  * Copyright 2011 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 
     11 #ifndef GrGLConfig_DEFINED
     12 #define GrGLConfig_DEFINED
     13 
     14 #include "GrTypes.h"
     15 
     16 /**
     17  * Optional GL config file.
     18  */
     19 #ifdef GR_GL_CUSTOM_SETUP_HEADER
     20     #include GR_GL_CUSTOM_SETUP_HEADER
     21 #endif
     22 
     23 #if !defined(GR_GL_FUNCTION_TYPE)
     24     #define GR_GL_FUNCTION_TYPE
     25 #endif
     26 
     27 /**
     28  * The following are optional defines that can be enabled at the compiler
     29  * command line, in a IDE project, in a GrUserConfig.h file, or in a GL custom
     30  * file (if one is in use). If a GR_GL_CUSTOM_SETUP_HEADER is used they can
     31  * also be placed there.
     32  *
     33  * GR_GL_LOG_CALLS: if 1 Gr can print every GL call using SkDebugf. Defaults to
     34  * 0. Logging can be enabled and disabled at runtime using a debugger via to
     35  * global gLogCallsGL. The initial value of gLogCallsGL is controlled by
     36  * GR_GL_LOG_CALLS_START.
     37  *
     38  * GR_GL_LOG_CALLS_START: controls the initial value of gLogCallsGL when
     39  * GR_GL_LOG_CALLS is 1. Defaults to 0.
     40  *
     41  * GR_GL_CHECK_ERROR: if enabled Gr can do a glGetError() after every GL call.
     42  * Defaults to 1 if SK_DEBUG is set, otherwise 0. When GR_GL_CHECK_ERROR is 1
     43  * this can be toggled in a debugger using the gCheckErrorGL global. The initial
     44  * value of gCheckErrorGL is controlled by by GR_GL_CHECK_ERROR_START.
     45  *
     46  * GR_GL_CHECK_ERROR_START: controls the initial value of gCheckErrorGL
     47  * when GR_GL_CHECK_ERROR is 1.  Defaults to 1.
     48  *
     49  * GR_GL_USE_BUFFER_DATA_NULL_HINT: When specifing new data for a vertex/index
     50  * buffer that replaces old data Ganesh can give a hint to the driver that the
     51  * previous data will not be used in future draws like this:
     52  *  glBufferData(GL_..._BUFFER, size, NULL, usage);       //<--hint, NULL means
     53  *  glBufferSubData(GL_..._BUFFER, 0, lessThanSize, data) //   old data can't be
     54  *                                                        //   used again.
     55  * However, this can be an unoptimization on some platforms, esp. Chrome.
     56  * Chrome's cmd buffer will create a new allocation and memset the whole thing
     57  * to zero (for security reasons). Defaults to 1 (enabled).
     58  *
     59  * GR_GL_PER_GL_FUNC_CALLBACK: When set to 1 the GrGLInterface object provides
     60  * a function pointer that is called just before every gl function. The ptr must
     61  * be valid (i.e. there is no NULL check). However, by default the callback will
     62  * be set to a function that does nothing. The signature of the function is:
     63  *    void function(const GrGLInterface*)
     64  * It is not extern "C".
     65  * The GrGLInterface field fCallback specifies the function ptr and there is an
     66  * additional field fCallbackData of type intptr_t for client data.
     67  *
     68  * GR_GL_CHECK_ALLOC_WITH_GET_ERROR: If set to 1 this will then glTexImage,
     69  * glBufferData, glRenderbufferStorage, etc will be checked for errors. This
     70  * amounts to ensuring the error is GL_NO_ERROR, calling the allocating
     71  * function, and then checking that the error is still GL_NO_ERROR. When the
     72  * value is 0 we will assume no error was generated without checking.
     73  *
     74  * GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT: We will normally check the FBO status
     75  * every time we bind a texture or renderbuffer to an FBO. However, in some
     76  * environments CheckFrameBufferStatus is very expensive. If this is set we will
     77  * check the first time we use a color format or a combination of color /
     78  * stencil formats as attachments. If the FBO is complete we will assume
     79  * subsequent attachments with the same formats are complete as well.
     80  *
     81  * GR_GL_MUST_USE_VBO: Indicates that all vertices and indices must be rendered
     82  * from VBOs. Chromium's command buffer doesn't allow glVertexAttribArray with
     83  * ARARY_BUFFER 0 bound or glDrawElements with ELEMENT_ARRAY_BUFFER 0 bound.
     84  *
     85  * GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE is for compatibility with the new version
     86  * of the OpenGLES2.0 headers from Khronos.  glShaderSource now takes a const char * const *,
     87  * instead of a const char
     88  */
     89 
     90 #if !defined(GR_GL_LOG_CALLS)
     91     #ifdef SK_DEBUG
     92         #define GR_GL_LOG_CALLS 1
     93     #else
     94         #define GR_GL_LOG_CALLS 0
     95     #endif
     96 #endif
     97 
     98 #if !defined(GR_GL_LOG_CALLS_START)
     99     #define GR_GL_LOG_CALLS_START                       0
    100 #endif
    101 
    102 #if !defined(GR_GL_CHECK_ERROR)
    103     #ifdef SK_DEBUG
    104         #define GR_GL_CHECK_ERROR 1
    105     #else
    106         #define GR_GL_CHECK_ERROR 0
    107     #endif
    108 #endif
    109 
    110 #if !defined(GR_GL_CHECK_ERROR_START)
    111     #define GR_GL_CHECK_ERROR_START                     1
    112 #endif
    113 
    114 #if !defined(GR_GL_USE_BUFFER_DATA_NULL_HINT)
    115     #define GR_GL_USE_BUFFER_DATA_NULL_HINT             1
    116 #endif
    117 
    118 #if !defined(GR_GL_PER_GL_FUNC_CALLBACK)
    119     #define GR_GL_PER_GL_FUNC_CALLBACK                  0
    120 #endif
    121 
    122 #if !defined(GR_GL_CHECK_ALLOC_WITH_GET_ERROR)
    123     #define GR_GL_CHECK_ALLOC_WITH_GET_ERROR            1
    124 #endif
    125 
    126 #if !defined(GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT)
    127     #define GR_GL_CHECK_FBO_STATUS_ONCE_PER_FORMAT      0
    128 #endif
    129 
    130 #if !defined(GR_GL_MUST_USE_VBO)
    131     #define GR_GL_MUST_USE_VBO                          0
    132 #endif
    133 
    134 #if !defined(GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE)
    135     #define GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE       0
    136 #endif
    137 
    138 #endif
    139