blob: db7b8e3ca0a55887c93f4f2bdc3fe8a89eb4e243 [file] [log] [blame]
bsalomon@google.com9c58f462013-02-26 14:45:41 +00001/*
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"
bsalomon@google.com1744f972013-02-26 21:46:32 +00009#include "SkString.h"
10#include "SkThread.h"
bsalomon@google.com9c58f462013-02-26 14:45:41 +000011
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
bsalomon@google.com1744f972013-02-26 21:46:32 +000024static 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 < GR_ARRAY_COUNT(kExtensions) - 1; ++i) {
41 gExtString.append(kExtensions[i]);
42 gExtString.append(" ");
43 }
44 gExtString.append(kExtensions[GR_ARRAY_COUNT(kExtensions) - 1]);
45 }
46 gMutex.release();
47 return (const GrGLubyte*) gExtString.c_str();
48}
49}
50
bsalomon@google.com9c58f462013-02-26 14:45:41 +000051GrGLvoid 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,
bsalomon@google.com1744f972013-02-26 21:46:32 +000085 GrGLboolean green,
86 GrGLboolean blue,
87 GrGLboolean alpha) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +000088}
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
commit-bot@chromium.org98168bb2013-04-11 22:00:34 +0000103GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCopyTexSubImage2D(GrGLenum target,
104 GrGLint level,
105 GrGLint xoffset,
106 GrGLint yoffset,
107 GrGLint x,
108 GrGLint y,
109 GrGLsizei width,
110 GrGLsizei height) {
111}
112
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000113GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCullFace(GrGLenum mode) {
114}
115
116GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDepthMask(GrGLboolean flag) {
117}
118
119GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDisable(GrGLenum cap) {
120}
121
122GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDisableVertexAttribArray(GrGLuint index) {
123}
124
125GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawArrays(GrGLenum mode,
126 GrGLint first,
127 GrGLsizei count) {
128}
129
130GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawBuffer(GrGLenum mode) {
131}
132
133GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawBuffers(GrGLsizei n,
134 const GrGLenum* bufs) {
135}
136
137GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawElements(GrGLenum mode,
138 GrGLsizei count,
139 GrGLenum type,
140 const GrGLvoid* indices) {
141}
142
143GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEnable(GrGLenum cap) {
144}
145
146GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEnableVertexAttribArray(GrGLuint index) {
147}
148
149GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEndQuery(GrGLenum target) {
150}
151
152GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFinish() {
153}
154
155GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFlush() {
156}
157
158GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFrontFace(GrGLenum mode) {
159}
160
161GrGLvoid GR_GL_FUNCTION_TYPE noOpGLLineWidth(GrGLfloat width) {
162}
163
164GrGLvoid GR_GL_FUNCTION_TYPE noOpGLLinkProgram(GrGLuint program) {
165}
166
167GrGLvoid GR_GL_FUNCTION_TYPE noOpGLQueryCounter(GrGLuint id, GrGLenum target) {
168}
169
170GrGLvoid GR_GL_FUNCTION_TYPE noOpGLReadBuffer(GrGLenum src) {
171}
172
173GrGLvoid GR_GL_FUNCTION_TYPE noOpGLScissor(GrGLint x,
bsalomon@google.com1744f972013-02-26 21:46:32 +0000174 GrGLint y,
175 GrGLsizei width,
176 GrGLsizei height) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000177}
178
179GrGLvoid GR_GL_FUNCTION_TYPE noOpGLShaderSource(GrGLuint shader,
180 GrGLsizei count,
bsalomon@google.com26fb61a2013-02-28 19:26:04 +0000181#if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000182 const char* const * str,
183#else
184 const char** str,
185#endif
186 const GrGLint* length) {
187}
188
189GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilFunc(GrGLenum func, GrGLint ref, GrGLuint mask) {
190}
191
192GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilFuncSeparate(GrGLenum face,
193 GrGLenum func,
194 GrGLint ref,
195 GrGLuint mask) {
196}
197
198GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilMask(GrGLuint mask) {
199}
200
201GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilMaskSeparate(GrGLenum face, GrGLuint mask) {
202}
203
204GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilOp(GrGLenum fail, GrGLenum zfail, GrGLenum zpass) {
205}
206
207GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilOpSeparate(GrGLenum face,
208 GrGLenum fail,
209 GrGLenum zfail,
210 GrGLenum zpass) {
211}
212
213GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexImage2D(GrGLenum target,
214 GrGLint level,
215 GrGLint internalformat,
216 GrGLsizei width,
217 GrGLsizei height,
218 GrGLint border,
219 GrGLenum format,
220 GrGLenum type,
221 const GrGLvoid* pixels) {
222}
223
224GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexParameteri(GrGLenum target,
225 GrGLenum pname,
226 GrGLint param) {
227}
228
229GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexParameteriv(GrGLenum target,
230 GrGLenum pname,
231 const GrGLint* params) {
232}
233
234GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexStorage2D(GrGLenum target,
235 GrGLsizei levels,
236 GrGLenum internalformat,
237 GrGLsizei width,
238 GrGLsizei height) {
239}
240
skia.committer@gmail.com81521132013-04-30 07:01:03 +0000241GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDiscardFramebuffer(GrGLenum target,
242 GrGLsizei numAttachments,
robertphillips@google.coma6ffb582013-04-29 16:50:17 +0000243 const GrGLenum* attachments) {
244}
245
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000246GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexSubImage2D(GrGLenum target,
247 GrGLint level,
248 GrGLint xoffset,
249 GrGLint yoffset,
250 GrGLsizei width,
251 GrGLsizei height,
252 GrGLenum format,
253 GrGLenum type,
254 const GrGLvoid* pixels) {
255}
256
257GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1f(GrGLint location, GrGLfloat v0) {
258}
259
260GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1i(GrGLint location, GrGLint v0) {
261}
262
263GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1fv(GrGLint location,
264 GrGLsizei count,
265 const GrGLfloat* v) {
266}
267
268GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1iv(GrGLint location,
269 GrGLsizei count,
270 const GrGLint* v) {
271}
272
273GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2f(GrGLint location, GrGLfloat v0, GrGLfloat v1) {
274}
275
276GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2i(GrGLint location, GrGLint v0, GrGLint v1) {
277}
278
279GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2fv(GrGLint location,
280 GrGLsizei count,
281 const GrGLfloat* v) {
282}
283
284GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2iv(GrGLint location,
285 GrGLsizei count,
286 const GrGLint* v) {
287}
288
289GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3f(GrGLint location,
290 GrGLfloat v0,
291 GrGLfloat v1,
292 GrGLfloat v2) {
293}
294
295GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3i(GrGLint location,
296 GrGLint v0,
297 GrGLint v1,
298 GrGLint v2) {
299}
300
301GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3fv(GrGLint location,
302 GrGLsizei count,
303 const GrGLfloat* v) {
304}
305
306GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3iv(GrGLint location,
307 GrGLsizei count,
308 const GrGLint* v) {
309}
310
311GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4f(GrGLint location,
312 GrGLfloat v0,
313 GrGLfloat v1,
314 GrGLfloat v2,
315 GrGLfloat v3) {
316}
317
318GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4i(GrGLint location,
319 GrGLint v0,
320 GrGLint v1,
321 GrGLint v2,
322 GrGLint v3) {
323}
324
325GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4fv(GrGLint location,
326 GrGLsizei count,
327 const GrGLfloat* v) {
328}
329
330GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4iv(GrGLint location,
331 GrGLsizei count,
332 const GrGLint* v) {
333}
334
335GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix2fv(GrGLint location,
336 GrGLsizei count,
337 GrGLboolean transpose,
338 const GrGLfloat* value) {
339}
340
341GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix3fv(GrGLint location,
342 GrGLsizei count,
343 GrGLboolean transpose,
344 const GrGLfloat* value) {
345}
346
347GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix4fv(GrGLint location,
348 GrGLsizei count,
349 GrGLboolean transpose,
350 const GrGLfloat* value) {
351}
352
353 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib4fv(GrGLuint indx, const GrGLfloat* values) {
354}
355
356GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribPointer(GrGLuint indx,
357 GrGLint size,
358 GrGLenum type,
359 GrGLboolean normalized,
360 GrGLsizei stride,
361 const GrGLvoid* ptr) {
362}
363
364GrGLvoid GR_GL_FUNCTION_TYPE noOpGLViewport(GrGLint x,
bsalomon@google.com1744f972013-02-26 21:46:32 +0000365 GrGLint y,
366 GrGLsizei width,
367 GrGLsizei height) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000368}
369
370 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetFramebufferAttachmentParameteriv(GrGLenum target,
bsalomon@google.com1744f972013-02-26 21:46:32 +0000371 GrGLenum attachment,
372 GrGLenum pname,
373 GrGLint* params) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000374}
375
376GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetRenderbufferParameteriv(GrGLenum target,
377 GrGLenum pname,
378 GrGLint* params) {
379}
380
381GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorage(GrGLenum target,
382 GrGLenum internalformat,
383 GrGLsizei width,
384 GrGLsizei height) {
385}
386
387GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorageMultisample(GrGLenum target,
388 GrGLsizei samples,
389 GrGLenum internalformat,
390 GrGLsizei width,
391 GrGLsizei height) {
392}
393
394GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlitFramebuffer(GrGLint srcX0,
395 GrGLint srcY0,
396 GrGLint srcX1,
397 GrGLint srcY1,
398 GrGLint dstX0,
399 GrGLint dstY0,
400 GrGLint dstX1,
401 GrGLint dstY1,
402 GrGLbitfield mask,
403 GrGLenum filter) {
404}
405
406GrGLvoid GR_GL_FUNCTION_TYPE noOpGLResolveMultisampleFramebuffer() {
407}
408
409GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBindFragDataLocationIndexed(GrGLuint program,
410 GrGLuint colorNumber,
411 GrGLuint index,
412 const GrGLchar * name) {
413}
414
415GrGLenum GR_GL_FUNCTION_TYPE noOpGLCheckFramebufferStatus(GrGLenum target) {
416
417 GrAlwaysAssert(GR_GL_FRAMEBUFFER == target);
418
419 return GR_GL_FRAMEBUFFER_COMPLETE;
420}
421
422GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGenIds(GrGLsizei n, GrGLuint* ids) {
423 static int gCurrID = 1;
424 for (int i = 0; i < n; ++i) {
425 ids[i] = ++gCurrID;
426 }
427}
428
429GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDeleteIds(GrGLsizei n, const GrGLuint* ids) {
430}
431
432GrGLenum GR_GL_FUNCTION_TYPE noOpGLGetError() {
433 return GR_GL_NO_ERROR;
434}
435
436GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetIntegerv(GrGLenum pname, GrGLint* params) {
437 // TODO: remove from Ganesh the #defines for gets we don't use.
438 // We would like to minimize gets overall due to performance issues
439 switch (pname) {
bsalomon@google.com1744f972013-02-26 21:46:32 +0000440 case GR_GL_CONTEXT_PROFILE_MASK:
441 *params = GR_GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
442 break;
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000443 case GR_GL_STENCIL_BITS:
444 *params = 8;
445 break;
446 case GR_GL_SAMPLES:
447 *params = 1;
448 break;
449 case GR_GL_FRAMEBUFFER_BINDING:
450 *params = 0;
451 break;
452 case GR_GL_VIEWPORT:
453 params[0] = 0;
454 params[1] = 0;
455 params[2] = 800;
456 params[3] = 600;
457 break;
458 case GR_GL_MAX_TEXTURE_IMAGE_UNITS:
459 *params = 8;
460 break;
461 case GR_GL_MAX_VERTEX_UNIFORM_VECTORS:
462 *params = kDefaultMaxVertexUniformVectors;
463 break;
464 case GR_GL_MAX_FRAGMENT_UNIFORM_VECTORS:
465 *params = kDefaultMaxFragmentUniformVectors;
466 break;
467 case GR_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
468 *params = 16 * 4;
469 break;
470 case GR_GL_NUM_COMPRESSED_TEXTURE_FORMATS:
471 *params = 0;
472 break;
473 case GR_GL_COMPRESSED_TEXTURE_FORMATS:
474 break;
475 case GR_GL_MAX_TEXTURE_SIZE:
476 *params = 8192;
477 break;
478 case GR_GL_MAX_RENDERBUFFER_SIZE:
479 *params = 8192;
480 break;
481 case GR_GL_MAX_SAMPLES:
482 *params = 32;
483 break;
484 case GR_GL_MAX_VERTEX_ATTRIBS:
485 *params = kDefaultMaxVertexAttribs;
486 break;
487 case GR_GL_MAX_VARYING_VECTORS:
488 *params = kDefaultMaxVaryingVectors;
489 break;
bsalomon@google.com1744f972013-02-26 21:46:32 +0000490 case GR_GL_NUM_EXTENSIONS:
491 *params = GR_ARRAY_COUNT(kExtensions);
492 break;
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000493 default:
494 GrCrash("Unexpected pname to GetIntegerv");
495 }
496}
497
498GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetInfoLog(GrGLuint program,
499 GrGLsizei bufsize,
500 GrGLsizei* length,
bsalomon@google.com1744f972013-02-26 21:46:32 +0000501 char* infolog) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000502 if (length) {
503 *length = 0;
504 }
505 if (bufsize > 0) {
506 *infolog = 0;
507 }
508}
509
510GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetShaderOrProgramiv(GrGLuint program,
511 GrGLenum pname,
512 GrGLint* params) {
513 switch (pname) {
514 case GR_GL_LINK_STATUS: // fallthru
515 case GR_GL_COMPILE_STATUS:
516 *params = GR_GL_TRUE;
517 break;
518 case GR_GL_INFO_LOG_LENGTH:
519 *params = 0;
520 break;
521 // we don't expect any other pnames
522 default:
523 GrCrash("Unexpected pname to GetProgramiv");
524 break;
525 }
526}
527
528namespace {
529template <typename T>
530void query_result(GrGLenum GLtarget, GrGLenum pname, T *params) {
531 switch (pname) {
532 case GR_GL_QUERY_RESULT_AVAILABLE:
533 *params = GR_GL_TRUE;
534 break;
535 case GR_GL_QUERY_RESULT:
536 *params = 0;
537 break;
538 default:
539 GrCrash("Unexpected pname passed to GetQueryObject.");
540 break;
541 }
542}
543}
544
545GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryiv(GrGLenum GLtarget,
546 GrGLenum pname,
547 GrGLint *params) {
548 switch (pname) {
549 case GR_GL_CURRENT_QUERY:
550 *params = 0;
551 break;
552 case GR_GL_QUERY_COUNTER_BITS:
553 *params = 32;
554 break;
555 default:
556 GrCrash("Unexpected pname passed GetQueryiv.");
557 }
558}
559
560GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjecti64v(GrGLuint id,
561 GrGLenum pname,
562 GrGLint64 *params) {
563 query_result(id, pname, params);
564}
565
566GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectiv(GrGLuint id,
567 GrGLenum pname,
568 GrGLint *params) {
569 query_result(id, pname, params);
570}
571
572GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectui64v(GrGLuint id,
573 GrGLenum pname,
574 GrGLuint64 *params) {
575 query_result(id, pname, params);
576}
577
578GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectuiv(GrGLuint id,
579 GrGLenum pname,
580 GrGLuint *params) {
581 query_result(id, pname, params);
582}
583
584const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetString(GrGLenum name) {
585 switch (name) {
586 case GR_GL_EXTENSIONS:
bsalomon@google.com1744f972013-02-26 21:46:32 +0000587 return combined_extensions_string();
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000588 case GR_GL_VERSION:
589 return (const GrGLubyte*)"4.0 Debug GL";
590 case GR_GL_SHADING_LANGUAGE_VERSION:
591 return (const GrGLubyte*)"4.20.8 Debug GLSL";
592 case GR_GL_VENDOR:
593 return (const GrGLubyte*)"Debug Vendor";
594 case GR_GL_RENDERER:
595 return (const GrGLubyte*)"The Debug (Non-)Renderer";
596 default:
bsalomon@google.com1744f972013-02-26 21:46:32 +0000597 GrCrash("Unexpected name passed to GetString");
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000598 return NULL;
599 }
600}
601
bsalomon@google.com1744f972013-02-26 21:46:32 +0000602const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetStringi(GrGLenum name, GrGLuint i) {
603 switch (name) {
604 case GR_GL_EXTENSIONS:
605 if (static_cast<size_t>(i) <= GR_ARRAY_COUNT(kExtensions)) {
606 return (const GrGLubyte*) kExtensions[i];
607 } else {
608 return NULL;
609 }
610 default:
611 GrCrash("Unexpected name passed to GetStringi");
612 return NULL;
613 }
614}
615
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000616GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetTexLevelParameteriv(GrGLenum target,
617 GrGLint level,
618 GrGLenum pname,
619 GrGLint* params) {
620 // we used to use this to query stuff about externally created textures,
621 // now we just require clients to tell us everything about the texture.
622 GrCrash("Should never query texture parameters.");
623}
624
bsalomon@google.com1744f972013-02-26 21:46:32 +0000625GrGLint GR_GL_FUNCTION_TYPE noOpGLGetUniformLocation(GrGLuint program, const char* name) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000626 static int gUniLocation = 0;
627 return ++gUniLocation;
628}