blob: 82e7a1b842bf62947a086b0d66d9adf6b5923df4 [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
241GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexSubImage2D(GrGLenum target,
242 GrGLint level,
243 GrGLint xoffset,
244 GrGLint yoffset,
245 GrGLsizei width,
246 GrGLsizei height,
247 GrGLenum format,
248 GrGLenum type,
249 const GrGLvoid* pixels) {
250}
251
252GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1f(GrGLint location, GrGLfloat v0) {
253}
254
255GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1i(GrGLint location, GrGLint v0) {
256}
257
258GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1fv(GrGLint location,
259 GrGLsizei count,
260 const GrGLfloat* v) {
261}
262
263GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1iv(GrGLint location,
264 GrGLsizei count,
265 const GrGLint* v) {
266}
267
268GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2f(GrGLint location, GrGLfloat v0, GrGLfloat v1) {
269}
270
271GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2i(GrGLint location, GrGLint v0, GrGLint v1) {
272}
273
274GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2fv(GrGLint location,
275 GrGLsizei count,
276 const GrGLfloat* v) {
277}
278
279GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2iv(GrGLint location,
280 GrGLsizei count,
281 const GrGLint* v) {
282}
283
284GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3f(GrGLint location,
285 GrGLfloat v0,
286 GrGLfloat v1,
287 GrGLfloat v2) {
288}
289
290GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3i(GrGLint location,
291 GrGLint v0,
292 GrGLint v1,
293 GrGLint v2) {
294}
295
296GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3fv(GrGLint location,
297 GrGLsizei count,
298 const GrGLfloat* v) {
299}
300
301GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3iv(GrGLint location,
302 GrGLsizei count,
303 const GrGLint* v) {
304}
305
306GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4f(GrGLint location,
307 GrGLfloat v0,
308 GrGLfloat v1,
309 GrGLfloat v2,
310 GrGLfloat v3) {
311}
312
313GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4i(GrGLint location,
314 GrGLint v0,
315 GrGLint v1,
316 GrGLint v2,
317 GrGLint v3) {
318}
319
320GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4fv(GrGLint location,
321 GrGLsizei count,
322 const GrGLfloat* v) {
323}
324
325GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4iv(GrGLint location,
326 GrGLsizei count,
327 const GrGLint* v) {
328}
329
330GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix2fv(GrGLint location,
331 GrGLsizei count,
332 GrGLboolean transpose,
333 const GrGLfloat* value) {
334}
335
336GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix3fv(GrGLint location,
337 GrGLsizei count,
338 GrGLboolean transpose,
339 const GrGLfloat* value) {
340}
341
342GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix4fv(GrGLint location,
343 GrGLsizei count,
344 GrGLboolean transpose,
345 const GrGLfloat* value) {
346}
347
348 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib4fv(GrGLuint indx, const GrGLfloat* values) {
349}
350
351GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribPointer(GrGLuint indx,
352 GrGLint size,
353 GrGLenum type,
354 GrGLboolean normalized,
355 GrGLsizei stride,
356 const GrGLvoid* ptr) {
357}
358
359GrGLvoid GR_GL_FUNCTION_TYPE noOpGLViewport(GrGLint x,
bsalomon@google.com1744f972013-02-26 21:46:32 +0000360 GrGLint y,
361 GrGLsizei width,
362 GrGLsizei height) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000363}
364
365 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetFramebufferAttachmentParameteriv(GrGLenum target,
bsalomon@google.com1744f972013-02-26 21:46:32 +0000366 GrGLenum attachment,
367 GrGLenum pname,
368 GrGLint* params) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000369}
370
371GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetRenderbufferParameteriv(GrGLenum target,
372 GrGLenum pname,
373 GrGLint* params) {
374}
375
376GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorage(GrGLenum target,
377 GrGLenum internalformat,
378 GrGLsizei width,
379 GrGLsizei height) {
380}
381
382GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorageMultisample(GrGLenum target,
383 GrGLsizei samples,
384 GrGLenum internalformat,
385 GrGLsizei width,
386 GrGLsizei height) {
387}
388
389GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlitFramebuffer(GrGLint srcX0,
390 GrGLint srcY0,
391 GrGLint srcX1,
392 GrGLint srcY1,
393 GrGLint dstX0,
394 GrGLint dstY0,
395 GrGLint dstX1,
396 GrGLint dstY1,
397 GrGLbitfield mask,
398 GrGLenum filter) {
399}
400
401GrGLvoid GR_GL_FUNCTION_TYPE noOpGLResolveMultisampleFramebuffer() {
402}
403
404GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBindFragDataLocationIndexed(GrGLuint program,
405 GrGLuint colorNumber,
406 GrGLuint index,
407 const GrGLchar * name) {
408}
409
410GrGLenum GR_GL_FUNCTION_TYPE noOpGLCheckFramebufferStatus(GrGLenum target) {
411
412 GrAlwaysAssert(GR_GL_FRAMEBUFFER == target);
413
414 return GR_GL_FRAMEBUFFER_COMPLETE;
415}
416
417GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGenIds(GrGLsizei n, GrGLuint* ids) {
418 static int gCurrID = 1;
419 for (int i = 0; i < n; ++i) {
420 ids[i] = ++gCurrID;
421 }
422}
423
424GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDeleteIds(GrGLsizei n, const GrGLuint* ids) {
425}
426
427GrGLenum GR_GL_FUNCTION_TYPE noOpGLGetError() {
428 return GR_GL_NO_ERROR;
429}
430
431GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetIntegerv(GrGLenum pname, GrGLint* params) {
432 // TODO: remove from Ganesh the #defines for gets we don't use.
433 // We would like to minimize gets overall due to performance issues
434 switch (pname) {
bsalomon@google.com1744f972013-02-26 21:46:32 +0000435 case GR_GL_CONTEXT_PROFILE_MASK:
436 *params = GR_GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
437 break;
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000438 case GR_GL_STENCIL_BITS:
439 *params = 8;
440 break;
441 case GR_GL_SAMPLES:
442 *params = 1;
443 break;
444 case GR_GL_FRAMEBUFFER_BINDING:
445 *params = 0;
446 break;
447 case GR_GL_VIEWPORT:
448 params[0] = 0;
449 params[1] = 0;
450 params[2] = 800;
451 params[3] = 600;
452 break;
453 case GR_GL_MAX_TEXTURE_IMAGE_UNITS:
454 *params = 8;
455 break;
456 case GR_GL_MAX_VERTEX_UNIFORM_VECTORS:
457 *params = kDefaultMaxVertexUniformVectors;
458 break;
459 case GR_GL_MAX_FRAGMENT_UNIFORM_VECTORS:
460 *params = kDefaultMaxFragmentUniformVectors;
461 break;
462 case GR_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
463 *params = 16 * 4;
464 break;
465 case GR_GL_NUM_COMPRESSED_TEXTURE_FORMATS:
466 *params = 0;
467 break;
468 case GR_GL_COMPRESSED_TEXTURE_FORMATS:
469 break;
470 case GR_GL_MAX_TEXTURE_SIZE:
471 *params = 8192;
472 break;
473 case GR_GL_MAX_RENDERBUFFER_SIZE:
474 *params = 8192;
475 break;
476 case GR_GL_MAX_SAMPLES:
477 *params = 32;
478 break;
479 case GR_GL_MAX_VERTEX_ATTRIBS:
480 *params = kDefaultMaxVertexAttribs;
481 break;
482 case GR_GL_MAX_VARYING_VECTORS:
483 *params = kDefaultMaxVaryingVectors;
484 break;
bsalomon@google.com1744f972013-02-26 21:46:32 +0000485 case GR_GL_NUM_EXTENSIONS:
486 *params = GR_ARRAY_COUNT(kExtensions);
487 break;
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000488 default:
489 GrCrash("Unexpected pname to GetIntegerv");
490 }
491}
492
493GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetInfoLog(GrGLuint program,
494 GrGLsizei bufsize,
495 GrGLsizei* length,
bsalomon@google.com1744f972013-02-26 21:46:32 +0000496 char* infolog) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000497 if (length) {
498 *length = 0;
499 }
500 if (bufsize > 0) {
501 *infolog = 0;
502 }
503}
504
505GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetShaderOrProgramiv(GrGLuint program,
506 GrGLenum pname,
507 GrGLint* params) {
508 switch (pname) {
509 case GR_GL_LINK_STATUS: // fallthru
510 case GR_GL_COMPILE_STATUS:
511 *params = GR_GL_TRUE;
512 break;
513 case GR_GL_INFO_LOG_LENGTH:
514 *params = 0;
515 break;
516 // we don't expect any other pnames
517 default:
518 GrCrash("Unexpected pname to GetProgramiv");
519 break;
520 }
521}
522
523namespace {
524template <typename T>
525void query_result(GrGLenum GLtarget, GrGLenum pname, T *params) {
526 switch (pname) {
527 case GR_GL_QUERY_RESULT_AVAILABLE:
528 *params = GR_GL_TRUE;
529 break;
530 case GR_GL_QUERY_RESULT:
531 *params = 0;
532 break;
533 default:
534 GrCrash("Unexpected pname passed to GetQueryObject.");
535 break;
536 }
537}
538}
539
540GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryiv(GrGLenum GLtarget,
541 GrGLenum pname,
542 GrGLint *params) {
543 switch (pname) {
544 case GR_GL_CURRENT_QUERY:
545 *params = 0;
546 break;
547 case GR_GL_QUERY_COUNTER_BITS:
548 *params = 32;
549 break;
550 default:
551 GrCrash("Unexpected pname passed GetQueryiv.");
552 }
553}
554
555GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjecti64v(GrGLuint id,
556 GrGLenum pname,
557 GrGLint64 *params) {
558 query_result(id, pname, params);
559}
560
561GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectiv(GrGLuint id,
562 GrGLenum pname,
563 GrGLint *params) {
564 query_result(id, pname, params);
565}
566
567GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectui64v(GrGLuint id,
568 GrGLenum pname,
569 GrGLuint64 *params) {
570 query_result(id, pname, params);
571}
572
573GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectuiv(GrGLuint id,
574 GrGLenum pname,
575 GrGLuint *params) {
576 query_result(id, pname, params);
577}
578
579const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetString(GrGLenum name) {
580 switch (name) {
581 case GR_GL_EXTENSIONS:
bsalomon@google.com1744f972013-02-26 21:46:32 +0000582 return combined_extensions_string();
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000583 case GR_GL_VERSION:
584 return (const GrGLubyte*)"4.0 Debug GL";
585 case GR_GL_SHADING_LANGUAGE_VERSION:
586 return (const GrGLubyte*)"4.20.8 Debug GLSL";
587 case GR_GL_VENDOR:
588 return (const GrGLubyte*)"Debug Vendor";
589 case GR_GL_RENDERER:
590 return (const GrGLubyte*)"The Debug (Non-)Renderer";
591 default:
bsalomon@google.com1744f972013-02-26 21:46:32 +0000592 GrCrash("Unexpected name passed to GetString");
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000593 return NULL;
594 }
595}
596
bsalomon@google.com1744f972013-02-26 21:46:32 +0000597const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetStringi(GrGLenum name, GrGLuint i) {
598 switch (name) {
599 case GR_GL_EXTENSIONS:
600 if (static_cast<size_t>(i) <= GR_ARRAY_COUNT(kExtensions)) {
601 return (const GrGLubyte*) kExtensions[i];
602 } else {
603 return NULL;
604 }
605 default:
606 GrCrash("Unexpected name passed to GetStringi");
607 return NULL;
608 }
609}
610
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000611GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetTexLevelParameteriv(GrGLenum target,
612 GrGLint level,
613 GrGLenum pname,
614 GrGLint* params) {
615 // we used to use this to query stuff about externally created textures,
616 // now we just require clients to tell us everything about the texture.
617 GrCrash("Should never query texture parameters.");
618}
619
bsalomon@google.com1744f972013-02-26 21:46:32 +0000620GrGLint GR_GL_FUNCTION_TYPE noOpGLGetUniformLocation(GrGLuint program, const char* name) {
bsalomon@google.com9c58f462013-02-26 14:45:41 +0000621 static int gUniLocation = 0;
622 return ++gUniLocation;
623}