1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/logging.h" 6 #include "mojo/examples/pepper_container_app/graphics_3d_resource.h" 7 #include "mojo/examples/pepper_container_app/thunk.h" 8 #include "mojo/public/c/gles2/gles2.h" 9 #include "ppapi/thunk/enter.h" 10 #include "ppapi/thunk/ppb_graphics_3d_api.h" 11 12 namespace mojo { 13 namespace examples { 14 15 namespace { 16 17 typedef ppapi::thunk::EnterResource<ppapi::thunk::PPB_Graphics3D_API> Enter3D; 18 19 bool IsBoundGraphics(Enter3D* enter) { 20 return enter->succeeded() && 21 static_cast<Graphics3DResource*>(enter->object())->IsBoundGraphics(); 22 } 23 24 void ActiveTexture(PP_Resource context_id, GLenum texture) { 25 Enter3D enter(context_id, true); 26 if (IsBoundGraphics(&enter)) { 27 glActiveTexture(texture); 28 } 29 } 30 31 void AttachShader(PP_Resource context_id, GLuint program, GLuint shader) { 32 Enter3D enter(context_id, true); 33 if (IsBoundGraphics(&enter)) { 34 glAttachShader(program, shader); 35 } 36 } 37 38 void BindAttribLocation(PP_Resource context_id, 39 GLuint program, 40 GLuint index, 41 const char* name) { 42 Enter3D enter(context_id, true); 43 if (IsBoundGraphics(&enter)) { 44 glBindAttribLocation(program, index, name); 45 } 46 } 47 48 void BindBuffer(PP_Resource context_id, GLenum target, GLuint buffer) { 49 Enter3D enter(context_id, true); 50 if (IsBoundGraphics(&enter)) { 51 glBindBuffer(target, buffer); 52 } 53 } 54 55 void BindFramebuffer(PP_Resource context_id, 56 GLenum target, 57 GLuint framebuffer) { 58 Enter3D enter(context_id, true); 59 if (IsBoundGraphics(&enter)) { 60 glBindFramebuffer(target, framebuffer); 61 } 62 } 63 64 void BindRenderbuffer(PP_Resource context_id, 65 GLenum target, 66 GLuint renderbuffer) { 67 Enter3D enter(context_id, true); 68 if (IsBoundGraphics(&enter)) { 69 glBindRenderbuffer(target, renderbuffer); 70 } 71 } 72 73 void BindTexture(PP_Resource context_id, GLenum target, GLuint texture) { 74 Enter3D enter(context_id, true); 75 if (IsBoundGraphics(&enter)) { 76 glBindTexture(target, texture); 77 } 78 } 79 80 void BlendColor(PP_Resource context_id, 81 GLclampf red, 82 GLclampf green, 83 GLclampf blue, 84 GLclampf alpha) { 85 Enter3D enter(context_id, true); 86 if (IsBoundGraphics(&enter)) { 87 glBlendColor(red, green, blue, alpha); 88 } 89 } 90 91 void BlendEquation(PP_Resource context_id, GLenum mode) { 92 Enter3D enter(context_id, true); 93 if (IsBoundGraphics(&enter)) { 94 glBlendEquation(mode); 95 } 96 } 97 98 void BlendEquationSeparate(PP_Resource context_id, 99 GLenum modeRGB, 100 GLenum modeAlpha) { 101 Enter3D enter(context_id, true); 102 if (IsBoundGraphics(&enter)) { 103 glBlendEquationSeparate(modeRGB, modeAlpha); 104 } 105 } 106 107 void BlendFunc(PP_Resource context_id, GLenum sfactor, GLenum dfactor) { 108 Enter3D enter(context_id, true); 109 if (IsBoundGraphics(&enter)) { 110 glBlendFunc(sfactor, dfactor); 111 } 112 } 113 114 void BlendFuncSeparate(PP_Resource context_id, 115 GLenum srcRGB, 116 GLenum dstRGB, 117 GLenum srcAlpha, 118 GLenum dstAlpha) { 119 Enter3D enter(context_id, true); 120 if (IsBoundGraphics(&enter)) { 121 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); 122 } 123 } 124 125 void BufferData(PP_Resource context_id, 126 GLenum target, 127 GLsizeiptr size, 128 const void* data, 129 GLenum usage) { 130 Enter3D enter(context_id, true); 131 if (IsBoundGraphics(&enter)) { 132 glBufferData(target, size, data, usage); 133 } 134 } 135 136 void BufferSubData(PP_Resource context_id, 137 GLenum target, 138 GLintptr offset, 139 GLsizeiptr size, 140 const void* data) { 141 Enter3D enter(context_id, true); 142 if (IsBoundGraphics(&enter)) { 143 glBufferSubData(target, offset, size, data); 144 } 145 } 146 147 GLenum CheckFramebufferStatus(PP_Resource context_id, GLenum target) { 148 Enter3D enter(context_id, true); 149 if (IsBoundGraphics(&enter)) { 150 return glCheckFramebufferStatus(target); 151 } else { 152 return 0; 153 } 154 } 155 156 void Clear(PP_Resource context_id, GLbitfield mask) { 157 Enter3D enter(context_id, true); 158 if (IsBoundGraphics(&enter)) { 159 glClear(mask); 160 } 161 } 162 163 void ClearColor(PP_Resource context_id, 164 GLclampf red, 165 GLclampf green, 166 GLclampf blue, 167 GLclampf alpha) { 168 Enter3D enter(context_id, true); 169 if (IsBoundGraphics(&enter)) { 170 glClearColor(red, green, blue, alpha); 171 } 172 } 173 174 void ClearDepthf(PP_Resource context_id, GLclampf depth) { 175 Enter3D enter(context_id, true); 176 if (IsBoundGraphics(&enter)) { 177 glClearDepthf(depth); 178 } 179 } 180 181 void ClearStencil(PP_Resource context_id, GLint s) { 182 Enter3D enter(context_id, true); 183 if (IsBoundGraphics(&enter)) { 184 glClearStencil(s); 185 } 186 } 187 188 void ColorMask(PP_Resource context_id, 189 GLboolean red, 190 GLboolean green, 191 GLboolean blue, 192 GLboolean alpha) { 193 Enter3D enter(context_id, true); 194 if (IsBoundGraphics(&enter)) { 195 glColorMask(red, green, blue, alpha); 196 } 197 } 198 199 void CompileShader(PP_Resource context_id, GLuint shader) { 200 Enter3D enter(context_id, true); 201 if (IsBoundGraphics(&enter)) { 202 glCompileShader(shader); 203 } 204 } 205 206 void CompressedTexImage2D(PP_Resource context_id, 207 GLenum target, 208 GLint level, 209 GLenum internalformat, 210 GLsizei width, 211 GLsizei height, 212 GLint border, 213 GLsizei imageSize, 214 const void* data) { 215 Enter3D enter(context_id, true); 216 if (IsBoundGraphics(&enter)) { 217 glCompressedTexImage2D( 218 target, level, internalformat, width, height, border, imageSize, data); 219 } 220 } 221 222 void CompressedTexSubImage2D(PP_Resource context_id, 223 GLenum target, 224 GLint level, 225 GLint xoffset, 226 GLint yoffset, 227 GLsizei width, 228 GLsizei height, 229 GLenum format, 230 GLsizei imageSize, 231 const void* data) { 232 Enter3D enter(context_id, true); 233 if (IsBoundGraphics(&enter)) { 234 glCompressedTexSubImage2D(target, 235 level, 236 xoffset, 237 yoffset, 238 width, 239 height, 240 format, 241 imageSize, 242 data); 243 } 244 } 245 246 void CopyTexImage2D(PP_Resource context_id, 247 GLenum target, 248 GLint level, 249 GLenum internalformat, 250 GLint x, 251 GLint y, 252 GLsizei width, 253 GLsizei height, 254 GLint border) { 255 Enter3D enter(context_id, true); 256 if (IsBoundGraphics(&enter)) { 257 glCopyTexImage2D( 258 target, level, internalformat, x, y, width, height, border); 259 } 260 } 261 262 void CopyTexSubImage2D(PP_Resource context_id, 263 GLenum target, 264 GLint level, 265 GLint xoffset, 266 GLint yoffset, 267 GLint x, 268 GLint y, 269 GLsizei width, 270 GLsizei height) { 271 Enter3D enter(context_id, true); 272 if (IsBoundGraphics(&enter)) { 273 glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); 274 } 275 } 276 277 GLuint CreateProgram(PP_Resource context_id) { 278 Enter3D enter(context_id, true); 279 if (IsBoundGraphics(&enter)) { 280 return glCreateProgram(); 281 } else { 282 return 0; 283 } 284 } 285 286 GLuint CreateShader(PP_Resource context_id, GLenum type) { 287 Enter3D enter(context_id, true); 288 if (IsBoundGraphics(&enter)) { 289 return glCreateShader(type); 290 } else { 291 return 0; 292 } 293 } 294 295 void CullFace(PP_Resource context_id, GLenum mode) { 296 Enter3D enter(context_id, true); 297 if (IsBoundGraphics(&enter)) { 298 glCullFace(mode); 299 } 300 } 301 302 void DeleteBuffers(PP_Resource context_id, GLsizei n, const GLuint* buffers) { 303 Enter3D enter(context_id, true); 304 if (IsBoundGraphics(&enter)) { 305 glDeleteBuffers(n, buffers); 306 } 307 } 308 309 void DeleteFramebuffers(PP_Resource context_id, 310 GLsizei n, 311 const GLuint* framebuffers) { 312 Enter3D enter(context_id, true); 313 if (IsBoundGraphics(&enter)) { 314 glDeleteFramebuffers(n, framebuffers); 315 } 316 } 317 318 void DeleteProgram(PP_Resource context_id, GLuint program) { 319 Enter3D enter(context_id, true); 320 if (IsBoundGraphics(&enter)) { 321 glDeleteProgram(program); 322 } 323 } 324 325 void DeleteRenderbuffers(PP_Resource context_id, 326 GLsizei n, 327 const GLuint* renderbuffers) { 328 Enter3D enter(context_id, true); 329 if (IsBoundGraphics(&enter)) { 330 glDeleteRenderbuffers(n, renderbuffers); 331 } 332 } 333 334 void DeleteShader(PP_Resource context_id, GLuint shader) { 335 Enter3D enter(context_id, true); 336 if (IsBoundGraphics(&enter)) { 337 glDeleteShader(shader); 338 } 339 } 340 341 void DeleteTextures(PP_Resource context_id, GLsizei n, const GLuint* textures) { 342 Enter3D enter(context_id, true); 343 if (IsBoundGraphics(&enter)) { 344 glDeleteTextures(n, textures); 345 } 346 } 347 348 void DepthFunc(PP_Resource context_id, GLenum func) { 349 Enter3D enter(context_id, true); 350 if (IsBoundGraphics(&enter)) { 351 glDepthFunc(func); 352 } 353 } 354 355 void DepthMask(PP_Resource context_id, GLboolean flag) { 356 Enter3D enter(context_id, true); 357 if (IsBoundGraphics(&enter)) { 358 glDepthMask(flag); 359 } 360 } 361 362 void DepthRangef(PP_Resource context_id, GLclampf zNear, GLclampf zFar) { 363 Enter3D enter(context_id, true); 364 if (IsBoundGraphics(&enter)) { 365 glDepthRangef(zNear, zFar); 366 } 367 } 368 369 void DetachShader(PP_Resource context_id, GLuint program, GLuint shader) { 370 Enter3D enter(context_id, true); 371 if (IsBoundGraphics(&enter)) { 372 glDetachShader(program, shader); 373 } 374 } 375 376 void Disable(PP_Resource context_id, GLenum cap) { 377 Enter3D enter(context_id, true); 378 if (IsBoundGraphics(&enter)) { 379 glDisable(cap); 380 } 381 } 382 383 void DisableVertexAttribArray(PP_Resource context_id, GLuint index) { 384 Enter3D enter(context_id, true); 385 if (IsBoundGraphics(&enter)) { 386 glDisableVertexAttribArray(index); 387 } 388 } 389 390 void DrawArrays(PP_Resource context_id, 391 GLenum mode, 392 GLint first, 393 GLsizei count) { 394 Enter3D enter(context_id, true); 395 if (IsBoundGraphics(&enter)) { 396 glDrawArrays(mode, first, count); 397 } 398 } 399 400 void DrawElements(PP_Resource context_id, 401 GLenum mode, 402 GLsizei count, 403 GLenum type, 404 const void* indices) { 405 Enter3D enter(context_id, true); 406 if (IsBoundGraphics(&enter)) { 407 glDrawElements(mode, count, type, indices); 408 } 409 } 410 411 void Enable(PP_Resource context_id, GLenum cap) { 412 Enter3D enter(context_id, true); 413 if (IsBoundGraphics(&enter)) { 414 glEnable(cap); 415 } 416 } 417 418 void EnableVertexAttribArray(PP_Resource context_id, GLuint index) { 419 Enter3D enter(context_id, true); 420 if (IsBoundGraphics(&enter)) { 421 glEnableVertexAttribArray(index); 422 } 423 } 424 425 void Finish(PP_Resource context_id) { 426 Enter3D enter(context_id, true); 427 if (IsBoundGraphics(&enter)) { 428 glFinish(); 429 } 430 } 431 432 void Flush(PP_Resource context_id) { 433 Enter3D enter(context_id, true); 434 if (IsBoundGraphics(&enter)) { 435 glFlush(); 436 } 437 } 438 439 void FramebufferRenderbuffer(PP_Resource context_id, 440 GLenum target, 441 GLenum attachment, 442 GLenum renderbuffertarget, 443 GLuint renderbuffer) { 444 Enter3D enter(context_id, true); 445 if (IsBoundGraphics(&enter)) { 446 glFramebufferRenderbuffer( 447 target, attachment, renderbuffertarget, renderbuffer); 448 } 449 } 450 451 void FramebufferTexture2D(PP_Resource context_id, 452 GLenum target, 453 GLenum attachment, 454 GLenum textarget, 455 GLuint texture, 456 GLint level) { 457 Enter3D enter(context_id, true); 458 if (IsBoundGraphics(&enter)) { 459 glFramebufferTexture2D(target, attachment, textarget, texture, level); 460 } 461 } 462 463 void FrontFace(PP_Resource context_id, GLenum mode) { 464 Enter3D enter(context_id, true); 465 if (IsBoundGraphics(&enter)) { 466 glFrontFace(mode); 467 } 468 } 469 470 void GenBuffers(PP_Resource context_id, GLsizei n, GLuint* buffers) { 471 Enter3D enter(context_id, true); 472 if (IsBoundGraphics(&enter)) { 473 glGenBuffers(n, buffers); 474 } 475 } 476 477 void GenerateMipmap(PP_Resource context_id, GLenum target) { 478 Enter3D enter(context_id, true); 479 if (IsBoundGraphics(&enter)) { 480 glGenerateMipmap(target); 481 } 482 } 483 484 void GenFramebuffers(PP_Resource context_id, GLsizei n, GLuint* framebuffers) { 485 Enter3D enter(context_id, true); 486 if (IsBoundGraphics(&enter)) { 487 glGenFramebuffers(n, framebuffers); 488 } 489 } 490 491 void GenRenderbuffers(PP_Resource context_id, 492 GLsizei n, 493 GLuint* renderbuffers) { 494 Enter3D enter(context_id, true); 495 if (IsBoundGraphics(&enter)) { 496 glGenRenderbuffers(n, renderbuffers); 497 } 498 } 499 500 void GenTextures(PP_Resource context_id, GLsizei n, GLuint* textures) { 501 Enter3D enter(context_id, true); 502 if (IsBoundGraphics(&enter)) { 503 glGenTextures(n, textures); 504 } 505 } 506 507 void GetActiveAttrib(PP_Resource context_id, 508 GLuint program, 509 GLuint index, 510 GLsizei bufsize, 511 GLsizei* length, 512 GLint* size, 513 GLenum* type, 514 char* name) { 515 Enter3D enter(context_id, true); 516 if (IsBoundGraphics(&enter)) { 517 glGetActiveAttrib(program, index, bufsize, length, size, type, name); 518 } 519 } 520 521 void GetActiveUniform(PP_Resource context_id, 522 GLuint program, 523 GLuint index, 524 GLsizei bufsize, 525 GLsizei* length, 526 GLint* size, 527 GLenum* type, 528 char* name) { 529 Enter3D enter(context_id, true); 530 if (IsBoundGraphics(&enter)) { 531 glGetActiveUniform(program, index, bufsize, length, size, type, name); 532 } 533 } 534 535 void GetAttachedShaders(PP_Resource context_id, 536 GLuint program, 537 GLsizei maxcount, 538 GLsizei* count, 539 GLuint* shaders) { 540 Enter3D enter(context_id, true); 541 if (IsBoundGraphics(&enter)) { 542 glGetAttachedShaders(program, maxcount, count, shaders); 543 } 544 } 545 546 GLint GetAttribLocation(PP_Resource context_id, 547 GLuint program, 548 const char* name) { 549 Enter3D enter(context_id, true); 550 if (IsBoundGraphics(&enter)) { 551 return glGetAttribLocation(program, name); 552 } else { 553 return -1; 554 } 555 } 556 557 void GetBooleanv(PP_Resource context_id, GLenum pname, GLboolean* params) { 558 Enter3D enter(context_id, true); 559 if (IsBoundGraphics(&enter)) { 560 glGetBooleanv(pname, params); 561 } 562 } 563 564 void GetBufferParameteriv(PP_Resource context_id, 565 GLenum target, 566 GLenum pname, 567 GLint* params) { 568 Enter3D enter(context_id, true); 569 if (IsBoundGraphics(&enter)) { 570 glGetBufferParameteriv(target, pname, params); 571 } 572 } 573 574 GLenum GetError(PP_Resource context_id) { 575 Enter3D enter(context_id, true); 576 if (IsBoundGraphics(&enter)) { 577 return glGetError(); 578 } else { 579 return 0; 580 } 581 } 582 583 void GetFloatv(PP_Resource context_id, GLenum pname, GLfloat* params) { 584 Enter3D enter(context_id, true); 585 if (IsBoundGraphics(&enter)) { 586 glGetFloatv(pname, params); 587 } 588 } 589 590 void GetFramebufferAttachmentParameteriv(PP_Resource context_id, 591 GLenum target, 592 GLenum attachment, 593 GLenum pname, 594 GLint* params) { 595 Enter3D enter(context_id, true); 596 if (IsBoundGraphics(&enter)) { 597 glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); 598 } 599 } 600 601 void GetIntegerv(PP_Resource context_id, GLenum pname, GLint* params) { 602 Enter3D enter(context_id, true); 603 if (IsBoundGraphics(&enter)) { 604 glGetIntegerv(pname, params); 605 } 606 } 607 608 void GetProgramiv(PP_Resource context_id, 609 GLuint program, 610 GLenum pname, 611 GLint* params) { 612 Enter3D enter(context_id, true); 613 if (IsBoundGraphics(&enter)) { 614 glGetProgramiv(program, pname, params); 615 } 616 } 617 618 void GetProgramInfoLog(PP_Resource context_id, 619 GLuint program, 620 GLsizei bufsize, 621 GLsizei* length, 622 char* infolog) { 623 Enter3D enter(context_id, true); 624 if (IsBoundGraphics(&enter)) { 625 glGetProgramInfoLog(program, bufsize, length, infolog); 626 } 627 } 628 629 void GetRenderbufferParameteriv(PP_Resource context_id, 630 GLenum target, 631 GLenum pname, 632 GLint* params) { 633 Enter3D enter(context_id, true); 634 if (IsBoundGraphics(&enter)) { 635 glGetRenderbufferParameteriv(target, pname, params); 636 } 637 } 638 639 void GetShaderiv(PP_Resource context_id, 640 GLuint shader, 641 GLenum pname, 642 GLint* params) { 643 Enter3D enter(context_id, true); 644 if (IsBoundGraphics(&enter)) { 645 glGetShaderiv(shader, pname, params); 646 } 647 } 648 649 void GetShaderInfoLog(PP_Resource context_id, 650 GLuint shader, 651 GLsizei bufsize, 652 GLsizei* length, 653 char* infolog) { 654 Enter3D enter(context_id, true); 655 if (IsBoundGraphics(&enter)) { 656 glGetShaderInfoLog(shader, bufsize, length, infolog); 657 } 658 } 659 660 void GetShaderPrecisionFormat(PP_Resource context_id, 661 GLenum shadertype, 662 GLenum precisiontype, 663 GLint* range, 664 GLint* precision) { 665 Enter3D enter(context_id, true); 666 if (IsBoundGraphics(&enter)) { 667 glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision); 668 } 669 } 670 671 void GetShaderSource(PP_Resource context_id, 672 GLuint shader, 673 GLsizei bufsize, 674 GLsizei* length, 675 char* source) { 676 Enter3D enter(context_id, true); 677 if (IsBoundGraphics(&enter)) { 678 glGetShaderSource(shader, bufsize, length, source); 679 } 680 } 681 682 const GLubyte* GetString(PP_Resource context_id, GLenum name) { 683 Enter3D enter(context_id, true); 684 if (IsBoundGraphics(&enter)) { 685 return glGetString(name); 686 } else { 687 return NULL; 688 } 689 } 690 691 void GetTexParameterfv(PP_Resource context_id, 692 GLenum target, 693 GLenum pname, 694 GLfloat* params) { 695 Enter3D enter(context_id, true); 696 if (IsBoundGraphics(&enter)) { 697 glGetTexParameterfv(target, pname, params); 698 } 699 } 700 701 void GetTexParameteriv(PP_Resource context_id, 702 GLenum target, 703 GLenum pname, 704 GLint* params) { 705 Enter3D enter(context_id, true); 706 if (IsBoundGraphics(&enter)) { 707 glGetTexParameteriv(target, pname, params); 708 } 709 } 710 711 void GetUniformfv(PP_Resource context_id, 712 GLuint program, 713 GLint location, 714 GLfloat* params) { 715 Enter3D enter(context_id, true); 716 if (IsBoundGraphics(&enter)) { 717 glGetUniformfv(program, location, params); 718 } 719 } 720 721 void GetUniformiv(PP_Resource context_id, 722 GLuint program, 723 GLint location, 724 GLint* params) { 725 Enter3D enter(context_id, true); 726 if (IsBoundGraphics(&enter)) { 727 glGetUniformiv(program, location, params); 728 } 729 } 730 731 GLint GetUniformLocation(PP_Resource context_id, 732 GLuint program, 733 const char* name) { 734 Enter3D enter(context_id, true); 735 if (IsBoundGraphics(&enter)) { 736 return glGetUniformLocation(program, name); 737 } else { 738 return -1; 739 } 740 } 741 742 void GetVertexAttribfv(PP_Resource context_id, 743 GLuint index, 744 GLenum pname, 745 GLfloat* params) { 746 Enter3D enter(context_id, true); 747 if (IsBoundGraphics(&enter)) { 748 glGetVertexAttribfv(index, pname, params); 749 } 750 } 751 752 void GetVertexAttribiv(PP_Resource context_id, 753 GLuint index, 754 GLenum pname, 755 GLint* params) { 756 Enter3D enter(context_id, true); 757 if (IsBoundGraphics(&enter)) { 758 glGetVertexAttribiv(index, pname, params); 759 } 760 } 761 762 void GetVertexAttribPointerv(PP_Resource context_id, 763 GLuint index, 764 GLenum pname, 765 void** pointer) { 766 Enter3D enter(context_id, true); 767 if (IsBoundGraphics(&enter)) { 768 glGetVertexAttribPointerv(index, pname, pointer); 769 } 770 } 771 772 void Hint(PP_Resource context_id, GLenum target, GLenum mode) { 773 Enter3D enter(context_id, true); 774 if (IsBoundGraphics(&enter)) { 775 glHint(target, mode); 776 } 777 } 778 779 GLboolean IsBuffer(PP_Resource context_id, GLuint buffer) { 780 Enter3D enter(context_id, true); 781 if (IsBoundGraphics(&enter)) { 782 return glIsBuffer(buffer); 783 } else { 784 return GL_FALSE; 785 } 786 } 787 788 GLboolean IsEnabled(PP_Resource context_id, GLenum cap) { 789 Enter3D enter(context_id, true); 790 if (IsBoundGraphics(&enter)) { 791 return glIsEnabled(cap); 792 } else { 793 return GL_FALSE; 794 } 795 } 796 797 GLboolean IsFramebuffer(PP_Resource context_id, GLuint framebuffer) { 798 Enter3D enter(context_id, true); 799 if (IsBoundGraphics(&enter)) { 800 return glIsFramebuffer(framebuffer); 801 } else { 802 return GL_FALSE; 803 } 804 } 805 806 GLboolean IsProgram(PP_Resource context_id, GLuint program) { 807 Enter3D enter(context_id, true); 808 if (IsBoundGraphics(&enter)) { 809 return glIsProgram(program); 810 } else { 811 return GL_FALSE; 812 } 813 } 814 815 GLboolean IsRenderbuffer(PP_Resource context_id, GLuint renderbuffer) { 816 Enter3D enter(context_id, true); 817 if (IsBoundGraphics(&enter)) { 818 return glIsRenderbuffer(renderbuffer); 819 } else { 820 return GL_FALSE; 821 } 822 } 823 824 GLboolean IsShader(PP_Resource context_id, GLuint shader) { 825 Enter3D enter(context_id, true); 826 if (IsBoundGraphics(&enter)) { 827 return glIsShader(shader); 828 } else { 829 return GL_FALSE; 830 } 831 } 832 833 GLboolean IsTexture(PP_Resource context_id, GLuint texture) { 834 Enter3D enter(context_id, true); 835 if (IsBoundGraphics(&enter)) { 836 return glIsTexture(texture); 837 } else { 838 return GL_FALSE; 839 } 840 } 841 842 void LineWidth(PP_Resource context_id, GLfloat width) { 843 Enter3D enter(context_id, true); 844 if (IsBoundGraphics(&enter)) { 845 glLineWidth(width); 846 } 847 } 848 849 void LinkProgram(PP_Resource context_id, GLuint program) { 850 Enter3D enter(context_id, true); 851 if (IsBoundGraphics(&enter)) { 852 glLinkProgram(program); 853 } 854 } 855 856 void PixelStorei(PP_Resource context_id, GLenum pname, GLint param) { 857 Enter3D enter(context_id, true); 858 if (IsBoundGraphics(&enter)) { 859 glPixelStorei(pname, param); 860 } 861 } 862 863 void PolygonOffset(PP_Resource context_id, GLfloat factor, GLfloat units) { 864 Enter3D enter(context_id, true); 865 if (IsBoundGraphics(&enter)) { 866 glPolygonOffset(factor, units); 867 } 868 } 869 870 void ReadPixels(PP_Resource context_id, 871 GLint x, 872 GLint y, 873 GLsizei width, 874 GLsizei height, 875 GLenum format, 876 GLenum type, 877 void* pixels) { 878 Enter3D enter(context_id, true); 879 if (IsBoundGraphics(&enter)) { 880 glReadPixels(x, y, width, height, format, type, pixels); 881 } 882 } 883 884 void ReleaseShaderCompiler(PP_Resource context_id) { 885 Enter3D enter(context_id, true); 886 if (IsBoundGraphics(&enter)) { 887 glReleaseShaderCompiler(); 888 } 889 } 890 891 void RenderbufferStorage(PP_Resource context_id, 892 GLenum target, 893 GLenum internalformat, 894 GLsizei width, 895 GLsizei height) { 896 Enter3D enter(context_id, true); 897 if (IsBoundGraphics(&enter)) { 898 glRenderbufferStorage(target, internalformat, width, height); 899 } 900 } 901 902 void SampleCoverage(PP_Resource context_id, GLclampf value, GLboolean invert) { 903 Enter3D enter(context_id, true); 904 if (IsBoundGraphics(&enter)) { 905 glSampleCoverage(value, invert); 906 } 907 } 908 909 void Scissor(PP_Resource context_id, 910 GLint x, 911 GLint y, 912 GLsizei width, 913 GLsizei height) { 914 Enter3D enter(context_id, true); 915 if (IsBoundGraphics(&enter)) { 916 glScissor(x, y, width, height); 917 } 918 } 919 920 void ShaderBinary(PP_Resource context_id, 921 GLsizei n, 922 const GLuint* shaders, 923 GLenum binaryformat, 924 const void* binary, 925 GLsizei length) { 926 Enter3D enter(context_id, true); 927 if (IsBoundGraphics(&enter)) { 928 glShaderBinary(n, shaders, binaryformat, binary, length); 929 } 930 } 931 932 void ShaderSource(PP_Resource context_id, 933 GLuint shader, 934 GLsizei count, 935 const char** str, 936 const GLint* length) { 937 Enter3D enter(context_id, true); 938 if (IsBoundGraphics(&enter)) { 939 glShaderSource(shader, count, str, length); 940 } 941 } 942 943 void StencilFunc(PP_Resource context_id, GLenum func, GLint ref, GLuint mask) { 944 Enter3D enter(context_id, true); 945 if (IsBoundGraphics(&enter)) { 946 glStencilFunc(func, ref, mask); 947 } 948 } 949 950 void StencilFuncSeparate(PP_Resource context_id, 951 GLenum face, 952 GLenum func, 953 GLint ref, 954 GLuint mask) { 955 Enter3D enter(context_id, true); 956 if (IsBoundGraphics(&enter)) { 957 glStencilFuncSeparate(face, func, ref, mask); 958 } 959 } 960 961 void StencilMask(PP_Resource context_id, GLuint mask) { 962 Enter3D enter(context_id, true); 963 if (IsBoundGraphics(&enter)) { 964 glStencilMask(mask); 965 } 966 } 967 968 void StencilMaskSeparate(PP_Resource context_id, GLenum face, GLuint mask) { 969 Enter3D enter(context_id, true); 970 if (IsBoundGraphics(&enter)) { 971 glStencilMaskSeparate(face, mask); 972 } 973 } 974 975 void StencilOp(PP_Resource context_id, 976 GLenum fail, 977 GLenum zfail, 978 GLenum zpass) { 979 Enter3D enter(context_id, true); 980 if (IsBoundGraphics(&enter)) { 981 glStencilOp(fail, zfail, zpass); 982 } 983 } 984 985 void StencilOpSeparate(PP_Resource context_id, 986 GLenum face, 987 GLenum fail, 988 GLenum zfail, 989 GLenum zpass) { 990 Enter3D enter(context_id, true); 991 if (IsBoundGraphics(&enter)) { 992 glStencilOpSeparate(face, fail, zfail, zpass); 993 } 994 } 995 996 void TexImage2D(PP_Resource context_id, 997 GLenum target, 998 GLint level, 999 GLint internalformat, 1000 GLsizei width, 1001 GLsizei height, 1002 GLint border, 1003 GLenum format, 1004 GLenum type, 1005 const void* pixels) { 1006 Enter3D enter(context_id, true); 1007 if (IsBoundGraphics(&enter)) { 1008 glTexImage2D(target, 1009 level, 1010 internalformat, 1011 width, 1012 height, 1013 border, 1014 format, 1015 type, 1016 pixels); 1017 } 1018 } 1019 1020 void TexParameterf(PP_Resource context_id, 1021 GLenum target, 1022 GLenum pname, 1023 GLfloat param) { 1024 Enter3D enter(context_id, true); 1025 if (IsBoundGraphics(&enter)) { 1026 glTexParameterf(target, pname, param); 1027 } 1028 } 1029 1030 void TexParameterfv(PP_Resource context_id, 1031 GLenum target, 1032 GLenum pname, 1033 const GLfloat* params) { 1034 Enter3D enter(context_id, true); 1035 if (IsBoundGraphics(&enter)) { 1036 glTexParameterfv(target, pname, params); 1037 } 1038 } 1039 1040 void TexParameteri(PP_Resource context_id, 1041 GLenum target, 1042 GLenum pname, 1043 GLint param) { 1044 Enter3D enter(context_id, true); 1045 if (IsBoundGraphics(&enter)) { 1046 glTexParameteri(target, pname, param); 1047 } 1048 } 1049 1050 void TexParameteriv(PP_Resource context_id, 1051 GLenum target, 1052 GLenum pname, 1053 const GLint* params) { 1054 Enter3D enter(context_id, true); 1055 if (IsBoundGraphics(&enter)) { 1056 glTexParameteriv(target, pname, params); 1057 } 1058 } 1059 1060 void TexSubImage2D(PP_Resource context_id, 1061 GLenum target, 1062 GLint level, 1063 GLint xoffset, 1064 GLint yoffset, 1065 GLsizei width, 1066 GLsizei height, 1067 GLenum format, 1068 GLenum type, 1069 const void* pixels) { 1070 Enter3D enter(context_id, true); 1071 if (IsBoundGraphics(&enter)) { 1072 glTexSubImage2D( 1073 target, level, xoffset, yoffset, width, height, format, type, pixels); 1074 } 1075 } 1076 1077 void Uniform1f(PP_Resource context_id, GLint location, GLfloat x) { 1078 Enter3D enter(context_id, true); 1079 if (IsBoundGraphics(&enter)) { 1080 glUniform1f(location, x); 1081 } 1082 } 1083 1084 void Uniform1fv(PP_Resource context_id, 1085 GLint location, 1086 GLsizei count, 1087 const GLfloat* v) { 1088 Enter3D enter(context_id, true); 1089 if (IsBoundGraphics(&enter)) { 1090 glUniform1fv(location, count, v); 1091 } 1092 } 1093 1094 void Uniform1i(PP_Resource context_id, GLint location, GLint x) { 1095 Enter3D enter(context_id, true); 1096 if (IsBoundGraphics(&enter)) { 1097 glUniform1i(location, x); 1098 } 1099 } 1100 1101 void Uniform1iv(PP_Resource context_id, 1102 GLint location, 1103 GLsizei count, 1104 const GLint* v) { 1105 Enter3D enter(context_id, true); 1106 if (IsBoundGraphics(&enter)) { 1107 glUniform1iv(location, count, v); 1108 } 1109 } 1110 1111 void Uniform2f(PP_Resource context_id, GLint location, GLfloat x, GLfloat y) { 1112 Enter3D enter(context_id, true); 1113 if (IsBoundGraphics(&enter)) { 1114 glUniform2f(location, x, y); 1115 } 1116 } 1117 1118 void Uniform2fv(PP_Resource context_id, 1119 GLint location, 1120 GLsizei count, 1121 const GLfloat* v) { 1122 Enter3D enter(context_id, true); 1123 if (IsBoundGraphics(&enter)) { 1124 glUniform2fv(location, count, v); 1125 } 1126 } 1127 1128 void Uniform2i(PP_Resource context_id, GLint location, GLint x, GLint y) { 1129 Enter3D enter(context_id, true); 1130 if (IsBoundGraphics(&enter)) { 1131 glUniform2i(location, x, y); 1132 } 1133 } 1134 1135 void Uniform2iv(PP_Resource context_id, 1136 GLint location, 1137 GLsizei count, 1138 const GLint* v) { 1139 Enter3D enter(context_id, true); 1140 if (IsBoundGraphics(&enter)) { 1141 glUniform2iv(location, count, v); 1142 } 1143 } 1144 1145 void Uniform3f(PP_Resource context_id, 1146 GLint location, 1147 GLfloat x, 1148 GLfloat y, 1149 GLfloat z) { 1150 Enter3D enter(context_id, true); 1151 if (IsBoundGraphics(&enter)) { 1152 glUniform3f(location, x, y, z); 1153 } 1154 } 1155 1156 void Uniform3fv(PP_Resource context_id, 1157 GLint location, 1158 GLsizei count, 1159 const GLfloat* v) { 1160 Enter3D enter(context_id, true); 1161 if (IsBoundGraphics(&enter)) { 1162 glUniform3fv(location, count, v); 1163 } 1164 } 1165 1166 void Uniform3i(PP_Resource context_id, 1167 GLint location, 1168 GLint x, 1169 GLint y, 1170 GLint z) { 1171 Enter3D enter(context_id, true); 1172 if (IsBoundGraphics(&enter)) { 1173 glUniform3i(location, x, y, z); 1174 } 1175 } 1176 1177 void Uniform3iv(PP_Resource context_id, 1178 GLint location, 1179 GLsizei count, 1180 const GLint* v) { 1181 Enter3D enter(context_id, true); 1182 if (IsBoundGraphics(&enter)) { 1183 glUniform3iv(location, count, v); 1184 } 1185 } 1186 1187 void Uniform4f(PP_Resource context_id, 1188 GLint location, 1189 GLfloat x, 1190 GLfloat y, 1191 GLfloat z, 1192 GLfloat w) { 1193 Enter3D enter(context_id, true); 1194 if (IsBoundGraphics(&enter)) { 1195 glUniform4f(location, x, y, z, w); 1196 } 1197 } 1198 1199 void Uniform4fv(PP_Resource context_id, 1200 GLint location, 1201 GLsizei count, 1202 const GLfloat* v) { 1203 Enter3D enter(context_id, true); 1204 if (IsBoundGraphics(&enter)) { 1205 glUniform4fv(location, count, v); 1206 } 1207 } 1208 1209 void Uniform4i(PP_Resource context_id, 1210 GLint location, 1211 GLint x, 1212 GLint y, 1213 GLint z, 1214 GLint w) { 1215 Enter3D enter(context_id, true); 1216 if (IsBoundGraphics(&enter)) { 1217 glUniform4i(location, x, y, z, w); 1218 } 1219 } 1220 1221 void Uniform4iv(PP_Resource context_id, 1222 GLint location, 1223 GLsizei count, 1224 const GLint* v) { 1225 Enter3D enter(context_id, true); 1226 if (IsBoundGraphics(&enter)) { 1227 glUniform4iv(location, count, v); 1228 } 1229 } 1230 1231 void UniformMatrix2fv(PP_Resource context_id, 1232 GLint location, 1233 GLsizei count, 1234 GLboolean transpose, 1235 const GLfloat* value) { 1236 Enter3D enter(context_id, true); 1237 if (IsBoundGraphics(&enter)) { 1238 glUniformMatrix2fv(location, count, transpose, value); 1239 } 1240 } 1241 1242 void UniformMatrix3fv(PP_Resource context_id, 1243 GLint location, 1244 GLsizei count, 1245 GLboolean transpose, 1246 const GLfloat* value) { 1247 Enter3D enter(context_id, true); 1248 if (IsBoundGraphics(&enter)) { 1249 glUniformMatrix3fv(location, count, transpose, value); 1250 } 1251 } 1252 1253 void UniformMatrix4fv(PP_Resource context_id, 1254 GLint location, 1255 GLsizei count, 1256 GLboolean transpose, 1257 const GLfloat* value) { 1258 Enter3D enter(context_id, true); 1259 if (IsBoundGraphics(&enter)) { 1260 glUniformMatrix4fv(location, count, transpose, value); 1261 } 1262 } 1263 1264 void UseProgram(PP_Resource context_id, GLuint program) { 1265 Enter3D enter(context_id, true); 1266 if (IsBoundGraphics(&enter)) { 1267 glUseProgram(program); 1268 } 1269 } 1270 1271 void ValidateProgram(PP_Resource context_id, GLuint program) { 1272 Enter3D enter(context_id, true); 1273 if (IsBoundGraphics(&enter)) { 1274 glValidateProgram(program); 1275 } 1276 } 1277 1278 void VertexAttrib1f(PP_Resource context_id, GLuint indx, GLfloat x) { 1279 Enter3D enter(context_id, true); 1280 if (IsBoundGraphics(&enter)) { 1281 glVertexAttrib1f(indx, x); 1282 } 1283 } 1284 1285 void VertexAttrib1fv(PP_Resource context_id, 1286 GLuint indx, 1287 const GLfloat* values) { 1288 Enter3D enter(context_id, true); 1289 if (IsBoundGraphics(&enter)) { 1290 glVertexAttrib1fv(indx, values); 1291 } 1292 } 1293 1294 void VertexAttrib2f(PP_Resource context_id, GLuint indx, GLfloat x, GLfloat y) { 1295 Enter3D enter(context_id, true); 1296 if (IsBoundGraphics(&enter)) { 1297 glVertexAttrib2f(indx, x, y); 1298 } 1299 } 1300 1301 void VertexAttrib2fv(PP_Resource context_id, 1302 GLuint indx, 1303 const GLfloat* values) { 1304 Enter3D enter(context_id, true); 1305 if (IsBoundGraphics(&enter)) { 1306 glVertexAttrib2fv(indx, values); 1307 } 1308 } 1309 1310 void VertexAttrib3f(PP_Resource context_id, 1311 GLuint indx, 1312 GLfloat x, 1313 GLfloat y, 1314 GLfloat z) { 1315 Enter3D enter(context_id, true); 1316 if (IsBoundGraphics(&enter)) { 1317 glVertexAttrib3f(indx, x, y, z); 1318 } 1319 } 1320 1321 void VertexAttrib3fv(PP_Resource context_id, 1322 GLuint indx, 1323 const GLfloat* values) { 1324 Enter3D enter(context_id, true); 1325 if (IsBoundGraphics(&enter)) { 1326 glVertexAttrib3fv(indx, values); 1327 } 1328 } 1329 1330 void VertexAttrib4f(PP_Resource context_id, 1331 GLuint indx, 1332 GLfloat x, 1333 GLfloat y, 1334 GLfloat z, 1335 GLfloat w) { 1336 Enter3D enter(context_id, true); 1337 if (IsBoundGraphics(&enter)) { 1338 glVertexAttrib4f(indx, x, y, z, w); 1339 } 1340 } 1341 1342 void VertexAttrib4fv(PP_Resource context_id, 1343 GLuint indx, 1344 const GLfloat* values) { 1345 Enter3D enter(context_id, true); 1346 if (IsBoundGraphics(&enter)) { 1347 glVertexAttrib4fv(indx, values); 1348 } 1349 } 1350 1351 void VertexAttribPointer(PP_Resource context_id, 1352 GLuint indx, 1353 GLint size, 1354 GLenum type, 1355 GLboolean normalized, 1356 GLsizei stride, 1357 const void* ptr) { 1358 Enter3D enter(context_id, true); 1359 if (IsBoundGraphics(&enter)) { 1360 glVertexAttribPointer(indx, size, type, normalized, stride, ptr); 1361 } 1362 } 1363 1364 void Viewport(PP_Resource context_id, 1365 GLint x, 1366 GLint y, 1367 GLsizei width, 1368 GLsizei height) { 1369 Enter3D enter(context_id, true); 1370 if (IsBoundGraphics(&enter)) { 1371 glViewport(x, y, width, height); 1372 } 1373 } 1374 1375 } // namespace 1376 1377 const PPB_OpenGLES2* GetPPB_OpenGLES2_Thunk() { 1378 static const struct PPB_OpenGLES2 ppb_opengles2 = { 1379 &ActiveTexture, &AttachShader, 1380 &BindAttribLocation, &BindBuffer, 1381 &BindFramebuffer, &BindRenderbuffer, 1382 &BindTexture, &BlendColor, 1383 &BlendEquation, &BlendEquationSeparate, 1384 &BlendFunc, &BlendFuncSeparate, 1385 &BufferData, &BufferSubData, 1386 &CheckFramebufferStatus, &Clear, 1387 &ClearColor, &ClearDepthf, 1388 &ClearStencil, &ColorMask, 1389 &CompileShader, &CompressedTexImage2D, 1390 &CompressedTexSubImage2D, &CopyTexImage2D, 1391 &CopyTexSubImage2D, &CreateProgram, 1392 &CreateShader, &CullFace, 1393 &DeleteBuffers, &DeleteFramebuffers, 1394 &DeleteProgram, &DeleteRenderbuffers, 1395 &DeleteShader, &DeleteTextures, 1396 &DepthFunc, &DepthMask, 1397 &DepthRangef, &DetachShader, 1398 &Disable, &DisableVertexAttribArray, 1399 &DrawArrays, &DrawElements, 1400 &Enable, &EnableVertexAttribArray, 1401 &Finish, &Flush, 1402 &FramebufferRenderbuffer, &FramebufferTexture2D, 1403 &FrontFace, &GenBuffers, 1404 &GenerateMipmap, &GenFramebuffers, 1405 &GenRenderbuffers, &GenTextures, 1406 &GetActiveAttrib, &GetActiveUniform, 1407 &GetAttachedShaders, &GetAttribLocation, 1408 &GetBooleanv, &GetBufferParameteriv, 1409 &GetError, &GetFloatv, 1410 &GetFramebufferAttachmentParameteriv, &GetIntegerv, 1411 &GetProgramiv, &GetProgramInfoLog, 1412 &GetRenderbufferParameteriv, &GetShaderiv, 1413 &GetShaderInfoLog, &GetShaderPrecisionFormat, 1414 &GetShaderSource, &GetString, 1415 &GetTexParameterfv, &GetTexParameteriv, 1416 &GetUniformfv, &GetUniformiv, 1417 &GetUniformLocation, &GetVertexAttribfv, 1418 &GetVertexAttribiv, &GetVertexAttribPointerv, 1419 &Hint, &IsBuffer, 1420 &IsEnabled, &IsFramebuffer, 1421 &IsProgram, &IsRenderbuffer, 1422 &IsShader, &IsTexture, 1423 &LineWidth, &LinkProgram, 1424 &PixelStorei, &PolygonOffset, 1425 &ReadPixels, &ReleaseShaderCompiler, 1426 &RenderbufferStorage, &SampleCoverage, 1427 &Scissor, &ShaderBinary, 1428 &ShaderSource, &StencilFunc, 1429 &StencilFuncSeparate, &StencilMask, 1430 &StencilMaskSeparate, &StencilOp, 1431 &StencilOpSeparate, &TexImage2D, 1432 &TexParameterf, &TexParameterfv, 1433 &TexParameteri, &TexParameteriv, 1434 &TexSubImage2D, &Uniform1f, 1435 &Uniform1fv, &Uniform1i, 1436 &Uniform1iv, &Uniform2f, 1437 &Uniform2fv, &Uniform2i, 1438 &Uniform2iv, &Uniform3f, 1439 &Uniform3fv, &Uniform3i, 1440 &Uniform3iv, &Uniform4f, 1441 &Uniform4fv, &Uniform4i, 1442 &Uniform4iv, &UniformMatrix2fv, 1443 &UniformMatrix3fv, &UniformMatrix4fv, 1444 &UseProgram, &ValidateProgram, 1445 &VertexAttrib1f, &VertexAttrib1fv, 1446 &VertexAttrib2f, &VertexAttrib2fv, 1447 &VertexAttrib3f, &VertexAttrib3fv, 1448 &VertexAttrib4f, &VertexAttrib4fv, 1449 &VertexAttribPointer, &Viewport}; 1450 return &ppb_opengles2; 1451 } 1452 1453 } // namespace examples 1454 } // namespace mojo 1455