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