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