| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "gl/GrGLInterface.h" | 10 #include "gl/GrGLInterface.h" |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 | 249 |
| 250 // TODO: fuse the following block with DeleteRenderBuffers? | 250 // TODO: fuse the following block with DeleteRenderBuffers? |
| 251 // Open GL will remove a deleted render buffer from the active | 251 // Open GL will remove a deleted render buffer from the active |
| 252 // frame buffer but not from any other frame buffer | 252 // frame buffer but not from any other frame buffer |
| 253 if (GrDebugGL::getInstance()->getFrameBuffer()) { | 253 if (GrDebugGL::getInstance()->getFrameBuffer()) { |
| 254 | 254 |
| 255 GrFrameBufferObj *frameBuffer = GrDebugGL::getInstance()->getFrameBuffe
r(); | 255 GrFrameBufferObj *frameBuffer = GrDebugGL::getInstance()->getFrameBuffe
r(); |
| 256 | 256 |
| 257 for (int i = 0; i < n; ++i) { | 257 for (int i = 0; i < n; ++i) { |
| 258 | 258 |
| 259 if (NULL != frameBuffer->getColor() && | 259 if (frameBuffer->getColor() && |
| 260 textures[i] == frameBuffer->getColor()->getID()) { | 260 textures[i] == frameBuffer->getColor()->getID()) { |
| 261 frameBuffer->setColor(NULL); | 261 frameBuffer->setColor(NULL); |
| 262 } | 262 } |
| 263 if (NULL != frameBuffer->getDepth() && | 263 if (frameBuffer->getDepth() && |
| 264 textures[i] == frameBuffer->getDepth()->getID()) { | 264 textures[i] == frameBuffer->getDepth()->getID()) { |
| 265 frameBuffer->setDepth(NULL); | 265 frameBuffer->setDepth(NULL); |
| 266 } | 266 } |
| 267 if (NULL != frameBuffer->getStencil() && | 267 if (frameBuffer->getStencil() && |
| 268 textures[i] == frameBuffer->getStencil()->getID()) { | 268 textures[i] == frameBuffer->getStencil()->getID()) { |
| 269 frameBuffer->setStencil(NULL); | 269 frameBuffer->setStencil(NULL); |
| 270 } | 270 } |
| 271 } | 271 } |
| 272 } | 272 } |
| 273 | 273 |
| 274 // then actually "delete" the buffers | 274 // then actually "delete" the buffers |
| 275 for (int i = 0; i < n; ++i) { | 275 for (int i = 0; i < n; ++i) { |
| 276 GrTextureObj *buffer = GR_FIND(textures[i], | 276 GrTextureObj *buffer = GR_FIND(textures[i], |
| 277 GrTextureObj, | 277 GrTextureObj, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 // TODO: fuse the following block with DeleteTextures? | 334 // TODO: fuse the following block with DeleteTextures? |
| 335 // Open GL will remove a deleted render buffer from the active frame | 335 // Open GL will remove a deleted render buffer from the active frame |
| 336 // buffer but not from any other frame buffer | 336 // buffer but not from any other frame buffer |
| 337 if (GrDebugGL::getInstance()->getFrameBuffer()) { | 337 if (GrDebugGL::getInstance()->getFrameBuffer()) { |
| 338 | 338 |
| 339 GrFrameBufferObj *frameBuffer = | 339 GrFrameBufferObj *frameBuffer = |
| 340 GrDebugGL::getInstance()->getFrameBuffer(); | 340 GrDebugGL::getInstance()->getFrameBuffer(); |
| 341 | 341 |
| 342 for (int i = 0; i < n; ++i) { | 342 for (int i = 0; i < n; ++i) { |
| 343 | 343 |
| 344 if (NULL != frameBuffer->getColor() && | 344 if (frameBuffer->getColor() && |
| 345 renderBuffers[i] == frameBuffer->getColor()->getID()) { | 345 renderBuffers[i] == frameBuffer->getColor()->getID()) { |
| 346 frameBuffer->setColor(NULL); | 346 frameBuffer->setColor(NULL); |
| 347 } | 347 } |
| 348 if (NULL != frameBuffer->getDepth() && | 348 if (frameBuffer->getDepth() && |
| 349 renderBuffers[i] == frameBuffer->getDepth()->getID()) { | 349 renderBuffers[i] == frameBuffer->getDepth()->getID()) { |
| 350 frameBuffer->setDepth(NULL); | 350 frameBuffer->setDepth(NULL); |
| 351 } | 351 } |
| 352 if (NULL != frameBuffer->getStencil() && | 352 if (frameBuffer->getStencil() && |
| 353 renderBuffers[i] == frameBuffer->getStencil()->getID()) { | 353 renderBuffers[i] == frameBuffer->getStencil()->getID()) { |
| 354 frameBuffer->setStencil(NULL); | 354 frameBuffer->setStencil(NULL); |
| 355 } | 355 } |
| 356 } | 356 } |
| 357 } | 357 } |
| 358 | 358 |
| 359 // then actually "delete" the buffers | 359 // then actually "delete" the buffers |
| 360 for (int i = 0; i < n; ++i) { | 360 for (int i = 0; i < n; ++i) { |
| 361 GrRenderBufferObj *buffer = GR_FIND(renderBuffers[i], | 361 GrRenderBufferObj *buffer = GR_FIND(renderBuffers[i], |
| 362 GrRenderBufferObj, | 362 GrRenderBufferObj, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 383 GrGLuint renderBuff
erID) { | 383 GrGLuint renderBuff
erID) { |
| 384 | 384 |
| 385 GrAlwaysAssert(GR_GL_FRAMEBUFFER == target); | 385 GrAlwaysAssert(GR_GL_FRAMEBUFFER == target); |
| 386 GrAlwaysAssert(GR_GL_COLOR_ATTACHMENT0 == attachment || | 386 GrAlwaysAssert(GR_GL_COLOR_ATTACHMENT0 == attachment || |
| 387 GR_GL_DEPTH_ATTACHMENT == attachment || | 387 GR_GL_DEPTH_ATTACHMENT == attachment || |
| 388 GR_GL_STENCIL_ATTACHMENT == attachment); | 388 GR_GL_STENCIL_ATTACHMENT == attachment); |
| 389 GrAlwaysAssert(GR_GL_RENDERBUFFER == renderbuffertarget); | 389 GrAlwaysAssert(GR_GL_RENDERBUFFER == renderbuffertarget); |
| 390 | 390 |
| 391 GrFrameBufferObj *framebuffer = GrDebugGL::getInstance()->getFrameBuffer(); | 391 GrFrameBufferObj *framebuffer = GrDebugGL::getInstance()->getFrameBuffer(); |
| 392 // A render buffer cannot be attached to the default framebuffer | 392 // A render buffer cannot be attached to the default framebuffer |
| 393 GrAlwaysAssert(NULL != framebuffer); | 393 GrAlwaysAssert(framebuffer); |
| 394 | 394 |
| 395 // a renderBufferID of 0 is acceptable - it unbinds the current | 395 // a renderBufferID of 0 is acceptable - it unbinds the current |
| 396 // render buffer | 396 // render buffer |
| 397 GrRenderBufferObj *renderbuffer = GR_FIND(renderBufferID, | 397 GrRenderBufferObj *renderbuffer = GR_FIND(renderBufferID, |
| 398 GrRenderBufferObj, | 398 GrRenderBufferObj, |
| 399 GrDebugGL::kRenderBuffer_ObjTypes
); | 399 GrDebugGL::kRenderBuffer_ObjTypes
); |
| 400 | 400 |
| 401 switch (attachment) { | 401 switch (attachment) { |
| 402 case GR_GL_COLOR_ATTACHMENT0: | 402 case GR_GL_COLOR_ATTACHMENT0: |
| 403 framebuffer->setColor(renderbuffer); | 403 framebuffer->setColor(renderbuffer); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 423 GrGLint level) { | 423 GrGLint level) { |
| 424 | 424 |
| 425 GrAlwaysAssert(GR_GL_FRAMEBUFFER == target); | 425 GrAlwaysAssert(GR_GL_FRAMEBUFFER == target); |
| 426 GrAlwaysAssert(GR_GL_COLOR_ATTACHMENT0 == attachment || | 426 GrAlwaysAssert(GR_GL_COLOR_ATTACHMENT0 == attachment || |
| 427 GR_GL_DEPTH_ATTACHMENT == attachment || | 427 GR_GL_DEPTH_ATTACHMENT == attachment || |
| 428 GR_GL_STENCIL_ATTACHMENT == attachment); | 428 GR_GL_STENCIL_ATTACHMENT == attachment); |
| 429 GrAlwaysAssert(GR_GL_TEXTURE_2D == textarget); | 429 GrAlwaysAssert(GR_GL_TEXTURE_2D == textarget); |
| 430 | 430 |
| 431 GrFrameBufferObj *framebuffer = GrDebugGL::getInstance()->getFrameBuffer(); | 431 GrFrameBufferObj *framebuffer = GrDebugGL::getInstance()->getFrameBuffer(); |
| 432 // A texture cannot be attached to the default framebuffer | 432 // A texture cannot be attached to the default framebuffer |
| 433 GrAlwaysAssert(NULL != framebuffer); | 433 GrAlwaysAssert(framebuffer); |
| 434 | 434 |
| 435 // A textureID of 0 is allowed - it unbinds the currently bound texture | 435 // A textureID of 0 is allowed - it unbinds the currently bound texture |
| 436 GrTextureObj *texture = GR_FIND(textureID, GrTextureObj, | 436 GrTextureObj *texture = GR_FIND(textureID, GrTextureObj, |
| 437 GrDebugGL::kTexture_ObjTypes); | 437 GrDebugGL::kTexture_ObjTypes); |
| 438 if (texture) { | 438 if (texture) { |
| 439 // The texture shouldn't be bound to a texture unit - this | 439 // The texture shouldn't be bound to a texture unit - this |
| 440 // could lead to a feedback loop | 440 // could lead to a feedback loop |
| 441 GrAlwaysAssert(!texture->getBound()); | 441 GrAlwaysAssert(!texture->getBound()); |
| 442 } | 442 } |
| 443 | 443 |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 559 // someone is still using this vertex array so we can't delete it he
re | 559 // someone is still using this vertex array so we can't delete it he
re |
| 560 array->setMarkedForDeletion(); | 560 array->setMarkedForDeletion(); |
| 561 } else { | 561 } else { |
| 562 array->deleteAction(); | 562 array->deleteAction(); |
| 563 } | 563 } |
| 564 } | 564 } |
| 565 } | 565 } |
| 566 | 566 |
| 567 GrGLvoid GR_GL_FUNCTION_TYPE debugGLBindVertexArray(GrGLuint id) { | 567 GrGLvoid GR_GL_FUNCTION_TYPE debugGLBindVertexArray(GrGLuint id) { |
| 568 GrVertexArrayObj* array = GR_FIND(id, GrVertexArrayObj, GrDebugGL::kVertexAr
ray_ObjTypes); | 568 GrVertexArrayObj* array = GR_FIND(id, GrVertexArrayObj, GrDebugGL::kVertexAr
ray_ObjTypes); |
| 569 GrAlwaysAssert((0 == id) || NULL != array); | 569 GrAlwaysAssert((0 == id) || array); |
| 570 GrDebugGL::getInstance()->setVertexArray(array); | 570 GrDebugGL::getInstance()->setVertexArray(array); |
| 571 } | 571 } |
| 572 | 572 |
| 573 GrGLvoid GR_GL_FUNCTION_TYPE debugGLBindBuffer(GrGLenum target, GrGLuint bufferI
D) { | 573 GrGLvoid GR_GL_FUNCTION_TYPE debugGLBindBuffer(GrGLenum target, GrGLuint bufferI
D) { |
| 574 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target || GR_GL_ELEMENT_ARRAY_BUFFER ==
target); | 574 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target || GR_GL_ELEMENT_ARRAY_BUFFER ==
target); |
| 575 | 575 |
| 576 GrBufferObj *buffer = GR_FIND(bufferID, | 576 GrBufferObj *buffer = GR_FIND(bufferID, |
| 577 GrBufferObj, | 577 GrBufferObj, |
| 578 GrDebugGL::kBuffer_ObjTypes); | 578 GrDebugGL::kBuffer_ObjTypes); |
| 579 // 0 is a permissible bufferID - it unbinds the current buffer | 579 // 0 is a permissible bufferID - it unbinds the current buffer |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 buffer = GrDebugGL::getInstance()->getArrayBuffer(); | 637 buffer = GrDebugGL::getInstance()->getArrayBuffer(); |
| 638 break; | 638 break; |
| 639 case GR_GL_ELEMENT_ARRAY_BUFFER: | 639 case GR_GL_ELEMENT_ARRAY_BUFFER: |
| 640 buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); | 640 buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); |
| 641 break; | 641 break; |
| 642 default: | 642 default: |
| 643 SkFAIL("Unexpected target to glMapBufferRange"); | 643 SkFAIL("Unexpected target to glMapBufferRange"); |
| 644 break; | 644 break; |
| 645 } | 645 } |
| 646 | 646 |
| 647 if (NULL != buffer) { | 647 if (buffer) { |
| 648 GrAlwaysAssert(offset >= 0 && offset + length <= buffer->getSize()); | 648 GrAlwaysAssert(offset >= 0 && offset + length <= buffer->getSize()); |
| 649 GrAlwaysAssert(!buffer->getMapped()); | 649 GrAlwaysAssert(!buffer->getMapped()); |
| 650 buffer->setMapped(offset, length); | 650 buffer->setMapped(offset, length); |
| 651 return buffer->getDataPtr() + offset; | 651 return buffer->getDataPtr() + offset; |
| 652 } | 652 } |
| 653 | 653 |
| 654 GrAlwaysAssert(false); | 654 GrAlwaysAssert(false); |
| 655 return NULL; // no buffer bound to the target | 655 return NULL; // no buffer bound to the target |
| 656 } | 656 } |
| 657 | 657 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 688 buffer = GrDebugGL::getInstance()->getArrayBuffer(); | 688 buffer = GrDebugGL::getInstance()->getArrayBuffer(); |
| 689 break; | 689 break; |
| 690 case GR_GL_ELEMENT_ARRAY_BUFFER: | 690 case GR_GL_ELEMENT_ARRAY_BUFFER: |
| 691 buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); | 691 buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); |
| 692 break; | 692 break; |
| 693 default: | 693 default: |
| 694 SkFAIL("Unexpected target to glUnmapBuffer"); | 694 SkFAIL("Unexpected target to glUnmapBuffer"); |
| 695 break; | 695 break; |
| 696 } | 696 } |
| 697 | 697 |
| 698 if (NULL != buffer) { | 698 if (buffer) { |
| 699 GrAlwaysAssert(buffer->getMapped()); | 699 GrAlwaysAssert(buffer->getMapped()); |
| 700 buffer->resetMapped(); | 700 buffer->resetMapped(); |
| 701 return GR_GL_TRUE; | 701 return GR_GL_TRUE; |
| 702 } | 702 } |
| 703 | 703 |
| 704 GrAlwaysAssert(false); | 704 GrAlwaysAssert(false); |
| 705 return GR_GL_FALSE; // GR_GL_INVALID_OPERATION; | 705 return GR_GL_FALSE; // GR_GL_INVALID_OPERATION; |
| 706 } | 706 } |
| 707 | 707 |
| 708 GrGLvoid GR_GL_FUNCTION_TYPE debugGLFlushMappedBufferRange(GrGLenum target, | 708 GrGLvoid GR_GL_FUNCTION_TYPE debugGLFlushMappedBufferRange(GrGLenum target, |
| 709 GrGLintptr offset, | 709 GrGLintptr offset, |
| 710 GrGLsizeiptr length)
{ | 710 GrGLsizeiptr length)
{ |
| 711 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target || | 711 GrAlwaysAssert(GR_GL_ARRAY_BUFFER == target || |
| 712 GR_GL_ELEMENT_ARRAY_BUFFER == target); | 712 GR_GL_ELEMENT_ARRAY_BUFFER == target); |
| 713 | 713 |
| 714 GrBufferObj *buffer = NULL; | 714 GrBufferObj *buffer = NULL; |
| 715 switch (target) { | 715 switch (target) { |
| 716 case GR_GL_ARRAY_BUFFER: | 716 case GR_GL_ARRAY_BUFFER: |
| 717 buffer = GrDebugGL::getInstance()->getArrayBuffer(); | 717 buffer = GrDebugGL::getInstance()->getArrayBuffer(); |
| 718 break; | 718 break; |
| 719 case GR_GL_ELEMENT_ARRAY_BUFFER: | 719 case GR_GL_ELEMENT_ARRAY_BUFFER: |
| 720 buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); | 720 buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); |
| 721 break; | 721 break; |
| 722 default: | 722 default: |
| 723 SkFAIL("Unexpected target to glUnmapBuffer"); | 723 SkFAIL("Unexpected target to glUnmapBuffer"); |
| 724 break; | 724 break; |
| 725 } | 725 } |
| 726 | 726 |
| 727 if (NULL != buffer) { | 727 if (buffer) { |
| 728 GrAlwaysAssert(buffer->getMapped()); | 728 GrAlwaysAssert(buffer->getMapped()); |
| 729 GrAlwaysAssert(offset >= 0 && (offset + length) <= buffer->getMappedLeng
th()); | 729 GrAlwaysAssert(offset >= 0 && (offset + length) <= buffer->getMappedLeng
th()); |
| 730 } else { | 730 } else { |
| 731 GrAlwaysAssert(false); | 731 GrAlwaysAssert(false); |
| 732 } | 732 } |
| 733 } | 733 } |
| 734 | 734 |
| 735 | 735 |
| 736 GrGLvoid GR_GL_FUNCTION_TYPE debugGLGetBufferParameteriv(GrGLenum target, | 736 GrGLvoid GR_GL_FUNCTION_TYPE debugGLGetBufferParameteriv(GrGLenum target, |
| 737 GrGLenum value, | 737 GrGLenum value, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 750 case GR_GL_ELEMENT_ARRAY_BUFFER: | 750 case GR_GL_ELEMENT_ARRAY_BUFFER: |
| 751 buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); | 751 buffer = GrDebugGL::getInstance()->getElementArrayBuffer(); |
| 752 break; | 752 break; |
| 753 } | 753 } |
| 754 | 754 |
| 755 GrAlwaysAssert(buffer); | 755 GrAlwaysAssert(buffer); |
| 756 | 756 |
| 757 switch (value) { | 757 switch (value) { |
| 758 case GR_GL_BUFFER_MAPPED: | 758 case GR_GL_BUFFER_MAPPED: |
| 759 *params = GR_GL_FALSE; | 759 *params = GR_GL_FALSE; |
| 760 if (NULL != buffer) | 760 if (buffer) |
| 761 *params = buffer->getMapped() ? GR_GL_TRUE : GR_GL_FALSE; | 761 *params = buffer->getMapped() ? GR_GL_TRUE : GR_GL_FALSE; |
| 762 break; | 762 break; |
| 763 case GR_GL_BUFFER_SIZE: | 763 case GR_GL_BUFFER_SIZE: |
| 764 *params = 0; | 764 *params = 0; |
| 765 if (NULL != buffer) | 765 if (buffer) |
| 766 *params = SkToInt(buffer->getSize()); | 766 *params = SkToInt(buffer->getSize()); |
| 767 break; | 767 break; |
| 768 case GR_GL_BUFFER_USAGE: | 768 case GR_GL_BUFFER_USAGE: |
| 769 *params = GR_GL_STATIC_DRAW; | 769 *params = GR_GL_STATIC_DRAW; |
| 770 if (NULL != buffer) | 770 if (buffer) |
| 771 *params = buffer->getUsage(); | 771 *params = buffer->getUsage(); |
| 772 break; | 772 break; |
| 773 default: | 773 default: |
| 774 SkFAIL("Unexpected value to glGetBufferParamateriv"); | 774 SkFAIL("Unexpected value to glGetBufferParamateriv"); |
| 775 break; | 775 break; |
| 776 } | 776 } |
| 777 }; | 777 }; |
| 778 } // end of namespace | 778 } // end of namespace |
| 779 | 779 |
| 780 //////////////////////////////////////////////////////////////////////////////// | 780 //////////////////////////////////////////////////////////////////////////////// |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 973 functions->fMatrixLoadIdentity = noOpGLMatrixLoadIdentity; | 973 functions->fMatrixLoadIdentity = noOpGLMatrixLoadIdentity; |
| 974 | 974 |
| 975 functions->fBindFragDataLocationIndexed = | 975 functions->fBindFragDataLocationIndexed = |
| 976 noOpGLBindFragDataLocationIndexed; | 976 noOpGLBindFragDataLocationIndexed; |
| 977 | 977 |
| 978 interface->fExtensions.init(kGL_GrGLStandard, functions->fGetString, functio
ns->fGetStringi, | 978 interface->fExtensions.init(kGL_GrGLStandard, functions->fGetString, functio
ns->fGetStringi, |
| 979 functions->fGetIntegerv); | 979 functions->fGetIntegerv); |
| 980 | 980 |
| 981 return interface; | 981 return interface; |
| 982 } | 982 } |
| OLD | NEW |