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