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