Home | History | Annotate | Download | only in gl
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "GrGLNoOpInterface.h"
      9 #include "SkString.h"
     10 #include "SkThread.h"
     11 
     12 // the OpenGLES 2.0 spec says this must be >= 128
     13 static const GrGLint kDefaultMaxVertexUniformVectors = 128;
     14 
     15 // the OpenGLES 2.0 spec says this must be >=16
     16 static const GrGLint kDefaultMaxFragmentUniformVectors = 16;
     17 
     18 // the OpenGLES 2.0 spec says this must be >= 8
     19 static const GrGLint kDefaultMaxVertexAttribs = 8;
     20 
     21 // the OpenGLES 2.0 spec says this must be >= 8
     22 static const GrGLint kDefaultMaxVaryingVectors = 8;
     23 
     24 static const char* kExtensions[] = {
     25     "GL_ARB_framebuffer_object",
     26     "GL_ARB_blend_func_extended",
     27     "GL_ARB_timer_query",
     28     "GL_ARB_draw_buffers",
     29     "GL_ARB_occlusion_query",
     30     "GL_EXT_blend_color",
     31     "GL_EXT_stencil_wrap"
     32 };
     33 
     34 namespace {
     35 const GrGLubyte* combined_extensions_string() {
     36     static SkString gExtString;
     37     static SkMutex gMutex;
     38     gMutex.acquire();
     39     if (0 == gExtString.size()) {
     40         for (size_t i = 0; i < SK_ARRAY_COUNT(kExtensions) - 1; ++i) {
     41             gExtString.append(kExtensions[i]);
     42             gExtString.append(" ");
     43         }
     44         gExtString.append(kExtensions[SK_ARRAY_COUNT(kExtensions) - 1]);
     45     }
     46     gMutex.release();
     47     return (const GrGLubyte*) gExtString.c_str();
     48 }
     49 }
     50 
     51 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlendColor(GrGLclampf red,
     52                                               GrGLclampf green,
     53                                               GrGLclampf blue,
     54                                               GrGLclampf alpha) {
     55 }
     56 
     57 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBindFragDataLocation(GrGLuint program,
     58                                                         GrGLuint colorNumber,
     59                                                         const GrGLchar* name) {
     60 }
     61 
     62 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlendFunc(GrGLenum sfactor,
     63                                               GrGLenum dfactor) {
     64 }
     65 
     66 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBufferSubData(GrGLenum target,
     67                                                  GrGLintptr offset,
     68                                                  GrGLsizeiptr size,
     69                                                  const GrGLvoid* data) {
     70 }
     71 
     72 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClear(GrGLbitfield mask) {
     73 }
     74 
     75 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClearColor(GrGLclampf red,
     76                                               GrGLclampf green,
     77                                               GrGLclampf blue,
     78                                               GrGLclampf alpha) {
     79 }
     80 
     81 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClearStencil(GrGLint s) {
     82 }
     83 
     84 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLColorMask(GrGLboolean red,
     85                                              GrGLboolean green,
     86                                              GrGLboolean blue,
     87                                              GrGLboolean alpha) {
     88 }
     89 
     90 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompileShader(GrGLuint shader) {
     91 }
     92 
     93 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompressedTexImage2D(GrGLenum target,
     94                                                         GrGLint level,
     95                                                         GrGLenum internalformat,
     96                                                         GrGLsizei width,
     97                                                         GrGLsizei height,
     98                                                         GrGLint border,
     99                                                         GrGLsizei imageSize,
    100                                                         const GrGLvoid* data) {
    101 }
    102 
    103 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompressedTexSubImage2D(GrGLenum target,
    104                                                            GrGLint level,
    105                                                            GrGLint xoffset,
    106                                                            GrGLint yoffset,
    107                                                            GrGLsizei width,
    108                                                            GrGLsizei height,
    109                                                            GrGLenum format,
    110                                                            GrGLsizei imageSize,
    111                                                            const GrGLvoid* data) {
    112 }
    113 
    114 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCopyTexSubImage2D(GrGLenum target,
    115                                                      GrGLint level,
    116                                                      GrGLint xoffset,
    117                                                      GrGLint yoffset,
    118                                                      GrGLint x,
    119                                                      GrGLint y,
    120                                                      GrGLsizei width,
    121                                                      GrGLsizei height) {
    122 }
    123 
    124 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCullFace(GrGLenum mode) {
    125 }
    126 
    127 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDepthMask(GrGLboolean flag) {
    128 }
    129 
    130 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDisable(GrGLenum cap) {
    131 }
    132 
    133 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDisableVertexAttribArray(GrGLuint index) {
    134 }
    135 
    136 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawArrays(GrGLenum mode,
    137                                               GrGLint first,
    138                                               GrGLsizei count) {
    139 }
    140 
    141 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawBuffer(GrGLenum mode) {
    142 }
    143 
    144 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawBuffers(GrGLsizei n,
    145                                                const GrGLenum* bufs) {
    146 }
    147 
    148 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawElements(GrGLenum mode,
    149                                                 GrGLsizei count,
    150                                                 GrGLenum type,
    151                                                 const GrGLvoid* indices) {
    152 }
    153 
    154 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEnable(GrGLenum cap) {
    155 }
    156 
    157 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEnableVertexAttribArray(GrGLuint index) {
    158 }
    159 
    160 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEndQuery(GrGLenum target) {
    161 }
    162 
    163 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFinish() {
    164 }
    165 
    166 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFlush() {
    167 }
    168 
    169 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFrontFace(GrGLenum mode) {
    170 }
    171 
    172 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLLineWidth(GrGLfloat width) {
    173 }
    174 
    175 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLLinkProgram(GrGLuint program) {
    176 }
    177 
    178 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLMatrixLoadf(GrGLenum, const GrGLfloat*) {
    179 }
    180 
    181 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLMatrixLoadIdentity(GrGLenum) {
    182 }
    183 
    184 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLQueryCounter(GrGLuint id, GrGLenum target) {
    185 }
    186 
    187 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLReadBuffer(GrGLenum src) {
    188 }
    189 
    190 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLScissor(GrGLint x,
    191                                            GrGLint y,
    192                                            GrGLsizei width,
    193                                            GrGLsizei height) {
    194 }
    195 
    196 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLShaderSource(GrGLuint shader,
    197                                                 GrGLsizei count,
    198 #if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE
    199                                                 const char* const * str,
    200 #else
    201                                                 const char** str,
    202 #endif
    203                                                 const GrGLint* length) {
    204 }
    205 
    206 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilFunc(GrGLenum func, GrGLint ref, GrGLuint mask) {
    207 }
    208 
    209 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilFuncSeparate(GrGLenum face,
    210                                                        GrGLenum func,
    211                                                        GrGLint ref,
    212                                                        GrGLuint mask) {
    213 }
    214 
    215 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilMask(GrGLuint mask) {
    216 }
    217 
    218 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilMaskSeparate(GrGLenum face, GrGLuint mask) {
    219 }
    220 
    221 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilOp(GrGLenum fail, GrGLenum zfail, GrGLenum zpass) {
    222 }
    223 
    224 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilOpSeparate(GrGLenum face,
    225                                                      GrGLenum fail,
    226                                                      GrGLenum zfail,
    227                                                      GrGLenum zpass) {
    228 }
    229 
    230 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexImage2D(GrGLenum target,
    231                                               GrGLint level,
    232                                               GrGLint internalformat,
    233                                               GrGLsizei width,
    234                                               GrGLsizei height,
    235                                               GrGLint border,
    236                                               GrGLenum format,
    237                                               GrGLenum type,
    238                                               const GrGLvoid* pixels) {
    239 }
    240 
    241 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexParameteri(GrGLenum target,
    242                                                  GrGLenum pname,
    243                                                  GrGLint param) {
    244 }
    245 
    246 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexParameteriv(GrGLenum target,
    247                                                   GrGLenum pname,
    248                                                   const GrGLint* params) {
    249 }
    250 
    251 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexStorage2D(GrGLenum target,
    252                                                 GrGLsizei levels,
    253                                                 GrGLenum internalformat,
    254                                                 GrGLsizei width,
    255                                                 GrGLsizei height) {
    256 }
    257 
    258 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDiscardFramebuffer(GrGLenum target,
    259                                                       GrGLsizei numAttachments,
    260                                                       const GrGLenum* attachments) {
    261 }
    262 
    263 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexSubImage2D(GrGLenum target,
    264                                                  GrGLint level,
    265                                                  GrGLint xoffset,
    266                                                  GrGLint yoffset,
    267                                                  GrGLsizei width,
    268                                                  GrGLsizei height,
    269                                                  GrGLenum format,
    270                                                  GrGLenum type,
    271                                                  const GrGLvoid* pixels) {
    272 }
    273 
    274 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1f(GrGLint location, GrGLfloat v0) {
    275 }
    276 
    277 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1i(GrGLint location, GrGLint v0) {
    278 }
    279 
    280 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1fv(GrGLint location,
    281                                               GrGLsizei count,
    282                                               const GrGLfloat* v) {
    283 }
    284 
    285 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1iv(GrGLint location,
    286                                               GrGLsizei count,
    287                                               const GrGLint* v) {
    288 }
    289 
    290 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2f(GrGLint location, GrGLfloat v0, GrGLfloat v1) {
    291 }
    292 
    293 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2i(GrGLint location, GrGLint v0, GrGLint v1) {
    294 }
    295 
    296 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2fv(GrGLint location,
    297                                               GrGLsizei count,
    298                                               const GrGLfloat* v) {
    299 }
    300 
    301 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2iv(GrGLint location,
    302                                               GrGLsizei count,
    303                                               const GrGLint* v) {
    304 }
    305 
    306 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3f(GrGLint location,
    307                                               GrGLfloat v0,
    308                                               GrGLfloat v1,
    309                                               GrGLfloat v2) {
    310 }
    311 
    312 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3i(GrGLint location,
    313                                               GrGLint v0,
    314                                               GrGLint v1,
    315                                               GrGLint v2) {
    316 }
    317 
    318 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3fv(GrGLint location,
    319                                               GrGLsizei count,
    320                                               const GrGLfloat* v) {
    321 }
    322 
    323 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3iv(GrGLint location,
    324                                               GrGLsizei count,
    325                                               const GrGLint* v) {
    326 }
    327 
    328 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4f(GrGLint location,
    329                                               GrGLfloat v0,
    330                                               GrGLfloat v1,
    331                                               GrGLfloat v2,
    332                                               GrGLfloat v3) {
    333 }
    334 
    335 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4i(GrGLint location,
    336                                               GrGLint v0,
    337                                               GrGLint v1,
    338                                               GrGLint v2,
    339                                               GrGLint v3) {
    340 }
    341 
    342 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4fv(GrGLint location,
    343                                               GrGLsizei count,
    344                                               const GrGLfloat* v) {
    345 }
    346 
    347 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4iv(GrGLint location,
    348                                               GrGLsizei count,
    349                                               const GrGLint* v) {
    350 }
    351 
    352 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix2fv(GrGLint location,
    353                                                     GrGLsizei count,
    354                                                     GrGLboolean transpose,
    355                                                     const GrGLfloat* value) {
    356 }
    357 
    358 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix3fv(GrGLint location,
    359                                                     GrGLsizei count,
    360                                                     GrGLboolean transpose,
    361                                                     const GrGLfloat* value) {
    362 }
    363 
    364 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix4fv(GrGLint location,
    365                                                     GrGLsizei count,
    366                                                     GrGLboolean transpose,
    367                                                     const GrGLfloat* value) {
    368 }
    369 
    370  GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib4fv(GrGLuint indx, const GrGLfloat* values) {
    371 }
    372 
    373 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribPointer(GrGLuint indx,
    374                                                        GrGLint size,
    375                                                        GrGLenum type,
    376                                                        GrGLboolean normalized,
    377                                                        GrGLsizei stride,
    378                                                        const GrGLvoid* ptr) {
    379 }
    380 
    381 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLViewport(GrGLint x,
    382                                             GrGLint y,
    383                                             GrGLsizei width,
    384                                             GrGLsizei height) {
    385 }
    386 
    387   GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetFramebufferAttachmentParameteriv(GrGLenum target,
    388                                                                          GrGLenum attachment,
    389                                                                          GrGLenum pname,
    390                                                                          GrGLint* params) {
    391 }
    392 
    393 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetRenderbufferParameteriv(GrGLenum target,
    394                                                               GrGLenum pname,
    395                                                               GrGLint* params) {
    396 }
    397 
    398 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorage(GrGLenum target,
    399                                                        GrGLenum internalformat,
    400                                                        GrGLsizei width,
    401                                                        GrGLsizei height) {
    402 }
    403 
    404 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorageMultisample(GrGLenum target,
    405                                                                   GrGLsizei samples,
    406                                                                   GrGLenum internalformat,
    407                                                                   GrGLsizei width,
    408                                                                   GrGLsizei height) {
    409 }
    410 
    411 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlitFramebuffer(GrGLint srcX0,
    412                                                    GrGLint srcY0,
    413                                                    GrGLint srcX1,
    414                                                    GrGLint srcY1,
    415                                                    GrGLint dstX0,
    416                                                    GrGLint dstY0,
    417                                                    GrGLint dstX1,
    418                                                    GrGLint dstY1,
    419                                                    GrGLbitfield mask,
    420                                                    GrGLenum filter) {
    421 }
    422 
    423 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLResolveMultisampleFramebuffer() {
    424 }
    425 
    426 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBindFragDataLocationIndexed(GrGLuint program,
    427                                                                GrGLuint colorNumber,
    428                                                                GrGLuint index,
    429                                                                const GrGLchar * name) {
    430 }
    431 
    432 GrGLenum GR_GL_FUNCTION_TYPE noOpGLCheckFramebufferStatus(GrGLenum target) {
    433 
    434     GrAlwaysAssert(GR_GL_FRAMEBUFFER == target);
    435 
    436     return GR_GL_FRAMEBUFFER_COMPLETE;
    437 }
    438 
    439 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGenIds(GrGLsizei n, GrGLuint* ids) {
    440     static int gCurrID = 1;
    441     for (int i = 0; i < n; ++i) {
    442         ids[i] = ++gCurrID;
    443    }
    444 }
    445 
    446 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDeleteIds(GrGLsizei n, const GrGLuint* ids) {
    447 }
    448 
    449 GrGLenum GR_GL_FUNCTION_TYPE noOpGLGetError() {
    450     return GR_GL_NO_ERROR;
    451 }
    452 
    453 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetIntegerv(GrGLenum pname, GrGLint* params) {
    454     // TODO: remove from Ganesh the #defines for gets we don't use.
    455     // We would like to minimize gets overall due to performance issues
    456     switch (pname) {
    457         case GR_GL_CONTEXT_PROFILE_MASK:
    458             *params = GR_GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
    459             break;
    460         case GR_GL_STENCIL_BITS:
    461             *params = 8;
    462             break;
    463         case GR_GL_SAMPLES:
    464             *params = 1;
    465             break;
    466         case GR_GL_FRAMEBUFFER_BINDING:
    467             *params = 0;
    468             break;
    469         case GR_GL_VIEWPORT:
    470             params[0] = 0;
    471             params[1] = 0;
    472             params[2] = 800;
    473             params[3] = 600;
    474             break;
    475         case GR_GL_MAX_TEXTURE_IMAGE_UNITS:
    476             *params = 8;
    477             break;
    478         case GR_GL_MAX_TEXTURE_COORDS:
    479             *params = 8;
    480             break;
    481         case GR_GL_MAX_VERTEX_UNIFORM_VECTORS:
    482             *params = kDefaultMaxVertexUniformVectors;
    483             break;
    484         case GR_GL_MAX_FRAGMENT_UNIFORM_VECTORS:
    485             *params = kDefaultMaxFragmentUniformVectors;
    486             break;
    487         case GR_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
    488             *params = 16 * 4;
    489             break;
    490         case GR_GL_NUM_COMPRESSED_TEXTURE_FORMATS:
    491             *params = 0;
    492             break;
    493         case GR_GL_COMPRESSED_TEXTURE_FORMATS:
    494             break;
    495         case GR_GL_MAX_TEXTURE_SIZE:
    496             *params = 8192;
    497             break;
    498         case GR_GL_MAX_RENDERBUFFER_SIZE:
    499             *params = 8192;
    500             break;
    501         case GR_GL_MAX_SAMPLES:
    502             *params = 32;
    503             break;
    504         case GR_GL_MAX_VERTEX_ATTRIBS:
    505             *params = kDefaultMaxVertexAttribs;
    506             break;
    507         case GR_GL_MAX_VARYING_VECTORS:
    508             *params = kDefaultMaxVaryingVectors;
    509             break;
    510         case GR_GL_NUM_EXTENSIONS:
    511             *params = SK_ARRAY_COUNT(kExtensions);
    512             break;
    513         default:
    514             SkFAIL("Unexpected pname to GetIntegerv");
    515    }
    516 }
    517 
    518 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetInfoLog(GrGLuint program,
    519                                               GrGLsizei bufsize,
    520                                               GrGLsizei* length,
    521                                               char* infolog) {
    522     if (length) {
    523         *length = 0;
    524    }
    525     if (bufsize > 0) {
    526         *infolog = 0;
    527    }
    528 }
    529 
    530 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetShaderOrProgramiv(GrGLuint program,
    531                                                         GrGLenum pname,
    532                                                         GrGLint* params) {
    533     switch (pname) {
    534         case GR_GL_LINK_STATUS:  // fallthru
    535         case GR_GL_COMPILE_STATUS:
    536             *params = GR_GL_TRUE;
    537             break;
    538         case GR_GL_INFO_LOG_LENGTH:
    539             *params = 0;
    540             break;
    541         // we don't expect any other pnames
    542         default:
    543             SkFAIL("Unexpected pname to GetProgramiv");
    544             break;
    545    }
    546 }
    547 
    548 namespace {
    549 template <typename T>
    550 void query_result(GrGLenum GLtarget, GrGLenum pname, T *params) {
    551     switch (pname) {
    552         case GR_GL_QUERY_RESULT_AVAILABLE:
    553             *params = GR_GL_TRUE;
    554             break;
    555         case GR_GL_QUERY_RESULT:
    556             *params = 0;
    557             break;
    558         default:
    559             SkFAIL("Unexpected pname passed to GetQueryObject.");
    560             break;
    561    }
    562 }
    563 }
    564 
    565 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryiv(GrGLenum GLtarget,
    566                                               GrGLenum pname,
    567                                               GrGLint *params) {
    568     switch (pname) {
    569         case GR_GL_CURRENT_QUERY:
    570             *params = 0;
    571             break;
    572         case GR_GL_QUERY_COUNTER_BITS:
    573             *params = 32;
    574             break;
    575         default:
    576             SkFAIL("Unexpected pname passed GetQueryiv.");
    577    }
    578 }
    579 
    580 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjecti64v(GrGLuint id,
    581                                                       GrGLenum pname,
    582                                                       GrGLint64 *params) {
    583     query_result(id, pname, params);
    584 }
    585 
    586 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectiv(GrGLuint id,
    587                                                     GrGLenum pname,
    588                                                     GrGLint *params) {
    589     query_result(id, pname, params);
    590 }
    591 
    592 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectui64v(GrGLuint id,
    593                                                        GrGLenum pname,
    594                                                        GrGLuint64 *params) {
    595     query_result(id, pname, params);
    596 }
    597 
    598 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectuiv(GrGLuint id,
    599                                                      GrGLenum pname,
    600                                                      GrGLuint *params) {
    601     query_result(id, pname, params);
    602 }
    603 
    604 const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetString(GrGLenum name) {
    605     switch (name) {
    606         case GR_GL_EXTENSIONS:
    607             return combined_extensions_string();
    608         case GR_GL_VERSION:
    609             return (const GrGLubyte*)"4.0 Debug GL";
    610         case GR_GL_SHADING_LANGUAGE_VERSION:
    611             return (const GrGLubyte*)"4.20.8 Debug GLSL";
    612         case GR_GL_VENDOR:
    613             return (const GrGLubyte*)"Debug Vendor";
    614         case GR_GL_RENDERER:
    615             return (const GrGLubyte*)"The Debug (Non-)Renderer";
    616         default:
    617             SkFAIL("Unexpected name passed to GetString");
    618             return NULL;
    619    }
    620 }
    621 
    622 const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetStringi(GrGLenum name, GrGLuint i) {
    623     switch (name) {
    624         case GR_GL_EXTENSIONS:
    625             if (static_cast<size_t>(i) <= SK_ARRAY_COUNT(kExtensions)) {
    626                 return (const GrGLubyte*) kExtensions[i];
    627             } else {
    628                 return NULL;
    629             }
    630         default:
    631             SkFAIL("Unexpected name passed to GetStringi");
    632             return NULL;
    633     }
    634 }
    635 
    636 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetTexLevelParameteriv(GrGLenum target,
    637                                                           GrGLint level,
    638                                                           GrGLenum pname,
    639                                                           GrGLint* params) {
    640     // we used to use this to query stuff about externally created textures,
    641     // now we just require clients to tell us everything about the texture.
    642     SkFAIL("Should never query texture parameters.");
    643 }
    644 
    645 GrGLint GR_GL_FUNCTION_TYPE noOpGLGetUniformLocation(GrGLuint program, const char* name) {
    646     static int gUniLocation = 0;
    647     return ++gUniLocation;
    648 }
    649 
    650 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLInsertEventMarker(GrGLsizei length, const char* marker) {
    651 }
    652 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLPushGroupMarker(GrGLsizei length  , const char* marker) {
    653 }
    654 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLPopGroupMarker() {
    655 }
    656