| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2010 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2010 Google Inc. All rights reserved. | 3 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 4 * Copyright (C) 2010 Mozilla Corporation. All rights reserved. | 4 * Copyright (C) 2010 Mozilla Corporation. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 DELEGATE_TO_WEBCONTEXT_1R(isFramebuffer, Platform3DObject, GC3Dboolean) | 422 DELEGATE_TO_WEBCONTEXT_1R(isFramebuffer, Platform3DObject, GC3Dboolean) |
| 423 DELEGATE_TO_WEBCONTEXT_1R(isProgram, Platform3DObject, GC3Dboolean) | 423 DELEGATE_TO_WEBCONTEXT_1R(isProgram, Platform3DObject, GC3Dboolean) |
| 424 DELEGATE_TO_WEBCONTEXT_1R(isRenderbuffer, Platform3DObject, GC3Dboolean) | 424 DELEGATE_TO_WEBCONTEXT_1R(isRenderbuffer, Platform3DObject, GC3Dboolean) |
| 425 DELEGATE_TO_WEBCONTEXT_1R(isShader, Platform3DObject, GC3Dboolean) | 425 DELEGATE_TO_WEBCONTEXT_1R(isShader, Platform3DObject, GC3Dboolean) |
| 426 DELEGATE_TO_WEBCONTEXT_1R(isTexture, Platform3DObject, GC3Dboolean) | 426 DELEGATE_TO_WEBCONTEXT_1R(isTexture, Platform3DObject, GC3Dboolean) |
| 427 DELEGATE_TO_WEBCONTEXT_1(lineWidth, GC3Dfloat) | 427 DELEGATE_TO_WEBCONTEXT_1(lineWidth, GC3Dfloat) |
| 428 DELEGATE_TO_WEBCONTEXT_1(linkProgram, Platform3DObject) | 428 DELEGATE_TO_WEBCONTEXT_1(linkProgram, Platform3DObject) |
| 429 | 429 |
| 430 void GraphicsContext3D::pixelStorei(GC3Denum pname, GC3Dint param) | 430 void GraphicsContext3D::pixelStorei(GC3Denum pname, GC3Dint param) |
| 431 { | 431 { |
| 432 if (pname == PACK_ALIGNMENT) | 432 if (pname == GL_PACK_ALIGNMENT) |
| 433 m_packAlignment = param; | 433 m_packAlignment = param; |
| 434 m_impl->pixelStorei(pname, param); | 434 m_impl->pixelStorei(pname, param); |
| 435 } | 435 } |
| 436 | 436 |
| 437 DELEGATE_TO_WEBCONTEXT_2(polygonOffset, GC3Dfloat, GC3Dfloat) | 437 DELEGATE_TO_WEBCONTEXT_2(polygonOffset, GC3Dfloat, GC3Dfloat) |
| 438 | 438 |
| 439 DELEGATE_TO_WEBCONTEXT_7(readPixels, GC3Dint, GC3Dint, GC3Dsizei, GC3Dsizei, GC3
Denum, GC3Denum, void*) | 439 DELEGATE_TO_WEBCONTEXT_7(readPixels, GC3Dint, GC3Dint, GC3Dsizei, GC3Dsizei, GC3
Denum, GC3Denum, void*) |
| 440 | 440 |
| 441 DELEGATE_TO_WEBCONTEXT(releaseShaderCompiler) | 441 DELEGATE_TO_WEBCONTEXT(releaseShaderCompiler) |
| 442 DELEGATE_TO_WEBCONTEXT_4(renderbufferStorage, GC3Denum, GC3Denum, GC3Dsizei, GC3
Dsizei) | 442 DELEGATE_TO_WEBCONTEXT_4(renderbufferStorage, GC3Denum, GC3Denum, GC3Dsizei, GC3
Dsizei) |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 getDrawingParameters(drawingBuffer, m_impl, &framebufferId, &width, &height)
; | 527 getDrawingParameters(drawingBuffer, m_impl, &framebufferId, &width, &height)
; |
| 528 | 528 |
| 529 Checked<int, RecordOverflow> dataSize = 4; | 529 Checked<int, RecordOverflow> dataSize = 4; |
| 530 dataSize *= width; | 530 dataSize *= width; |
| 531 dataSize *= height; | 531 dataSize *= height; |
| 532 if (dataSize.hasOverflowed()) | 532 if (dataSize.hasOverflowed()) |
| 533 return 0; | 533 return 0; |
| 534 | 534 |
| 535 RefPtr<Uint8ClampedArray> pixels = Uint8ClampedArray::createUninitialized(wi
dth * height * 4); | 535 RefPtr<Uint8ClampedArray> pixels = Uint8ClampedArray::createUninitialized(wi
dth * height * 4); |
| 536 | 536 |
| 537 m_impl->bindFramebuffer(FRAMEBUFFER, framebufferId); | 537 m_impl->bindFramebuffer(GL_FRAMEBUFFER, framebufferId); |
| 538 readBackFramebuffer(pixels->data(), width, height, ReadbackRGBA, AlphaDoNoth
ing); | 538 readBackFramebuffer(pixels->data(), width, height, ReadbackRGBA, AlphaDoNoth
ing); |
| 539 flipVertically(pixels->data(), width, height); | 539 flipVertically(pixels->data(), width, height); |
| 540 | 540 |
| 541 return pixels.release(); | 541 return pixels.release(); |
| 542 } | 542 } |
| 543 | 543 |
| 544 void GraphicsContext3D::readBackFramebuffer(unsigned char* pixels, int width, in
t height, ReadbackOrder readbackOrder, AlphaOp op) | 544 void GraphicsContext3D::readBackFramebuffer(unsigned char* pixels, int width, in
t height, ReadbackOrder readbackOrder, AlphaOp op) |
| 545 { | 545 { |
| 546 if (m_packAlignment > 4) | 546 if (m_packAlignment > 4) |
| 547 m_impl->pixelStorei(PACK_ALIGNMENT, 1); | 547 m_impl->pixelStorei(GL_PACK_ALIGNMENT, 1); |
| 548 m_impl->readPixels(0, 0, width, height, RGBA, UNSIGNED_BYTE, pixels); | 548 m_impl->readPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); |
| 549 if (m_packAlignment > 4) | 549 if (m_packAlignment > 4) |
| 550 m_impl->pixelStorei(PACK_ALIGNMENT, m_packAlignment); | 550 m_impl->pixelStorei(GL_PACK_ALIGNMENT, m_packAlignment); |
| 551 | 551 |
| 552 size_t bufferSize = 4 * width * height; | 552 size_t bufferSize = 4 * width * height; |
| 553 | 553 |
| 554 if (readbackOrder == ReadbackSkia) { | 554 if (readbackOrder == ReadbackSkia) { |
| 555 #if (SK_R32_SHIFT == 16) && !SK_B32_SHIFT | 555 #if (SK_R32_SHIFT == 16) && !SK_B32_SHIFT |
| 556 // Swizzle red and blue channels to match SkBitmap's byte ordering. | 556 // Swizzle red and blue channels to match SkBitmap's byte ordering. |
| 557 // TODO(kbr): expose GL_BGRA as extension. | 557 // TODO(kbr): expose GL_BGRA as extension. |
| 558 for (size_t i = 0; i < bufferSize; i += 4) { | 558 for (size_t i = 0; i < bufferSize; i += 4) { |
| 559 std::swap(pixels[i], pixels[i + 2]); | 559 std::swap(pixels[i], pixels[i + 2]); |
| 560 } | 560 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 601 texImage2D(target, level, internalformat, width, height, border, format, typ
e, 0); | 601 texImage2D(target, level, internalformat, width, height, border, format, typ
e, 0); |
| 602 return true; | 602 return true; |
| 603 } | 603 } |
| 604 | 604 |
| 605 bool GraphicsContext3D::computeFormatAndTypeParameters(GC3Denum format, | 605 bool GraphicsContext3D::computeFormatAndTypeParameters(GC3Denum format, |
| 606 GC3Denum type, | 606 GC3Denum type, |
| 607 unsigned int* componentsP
erPixel, | 607 unsigned int* componentsP
erPixel, |
| 608 unsigned int* bytesPerCom
ponent) | 608 unsigned int* bytesPerCom
ponent) |
| 609 { | 609 { |
| 610 switch (format) { | 610 switch (format) { |
| 611 case GraphicsContext3D::ALPHA: | 611 case GL_ALPHA: |
| 612 case GraphicsContext3D::LUMINANCE: | 612 case GL_LUMINANCE: |
| 613 case GraphicsContext3D::DEPTH_COMPONENT: | 613 case GL_DEPTH_COMPONENT: |
| 614 case GraphicsContext3D::DEPTH_STENCIL: | 614 case GL_DEPTH_STENCIL_OES: |
| 615 *componentsPerPixel = 1; | 615 *componentsPerPixel = 1; |
| 616 break; | 616 break; |
| 617 case GraphicsContext3D::LUMINANCE_ALPHA: | 617 case GL_LUMINANCE_ALPHA: |
| 618 *componentsPerPixel = 2; | 618 *componentsPerPixel = 2; |
| 619 break; | 619 break; |
| 620 case GraphicsContext3D::RGB: | 620 case GL_RGB: |
| 621 *componentsPerPixel = 3; | 621 *componentsPerPixel = 3; |
| 622 break; | 622 break; |
| 623 case GraphicsContext3D::RGBA: | 623 case GL_RGBA: |
| 624 case Extensions3D::BGRA_EXT: // GL_EXT_texture_format_BGRA8888 | 624 case Extensions3D::BGRA_EXT: // GL_EXT_texture_format_BGRA8888 |
| 625 *componentsPerPixel = 4; | 625 *componentsPerPixel = 4; |
| 626 break; | 626 break; |
| 627 default: | 627 default: |
| 628 return false; | 628 return false; |
| 629 } | 629 } |
| 630 switch (type) { | 630 switch (type) { |
| 631 case GraphicsContext3D::UNSIGNED_BYTE: | 631 case GL_UNSIGNED_BYTE: |
| 632 *bytesPerComponent = sizeof(GC3Dubyte); | 632 *bytesPerComponent = sizeof(GC3Dubyte); |
| 633 break; | 633 break; |
| 634 case GraphicsContext3D::UNSIGNED_SHORT: | 634 case GL_UNSIGNED_SHORT: |
| 635 *bytesPerComponent = sizeof(GC3Dushort); | 635 *bytesPerComponent = sizeof(GC3Dushort); |
| 636 break; | 636 break; |
| 637 case GraphicsContext3D::UNSIGNED_SHORT_5_6_5: | 637 case GL_UNSIGNED_SHORT_5_6_5: |
| 638 case GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4: | 638 case GL_UNSIGNED_SHORT_4_4_4_4: |
| 639 case GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1: | 639 case GL_UNSIGNED_SHORT_5_5_5_1: |
| 640 *componentsPerPixel = 1; | 640 *componentsPerPixel = 1; |
| 641 *bytesPerComponent = sizeof(GC3Dushort); | 641 *bytesPerComponent = sizeof(GC3Dushort); |
| 642 break; | 642 break; |
| 643 case GraphicsContext3D::UNSIGNED_INT_24_8: | 643 case GL_UNSIGNED_INT_24_8_OES: |
| 644 case GraphicsContext3D::UNSIGNED_INT: | 644 case GL_UNSIGNED_INT: |
| 645 *bytesPerComponent = sizeof(GC3Duint); | 645 *bytesPerComponent = sizeof(GC3Duint); |
| 646 break; | 646 break; |
| 647 case GraphicsContext3D::FLOAT: // OES_texture_float | 647 case GL_FLOAT: // OES_texture_float |
| 648 *bytesPerComponent = sizeof(GC3Dfloat); | 648 *bytesPerComponent = sizeof(GC3Dfloat); |
| 649 break; | 649 break; |
| 650 case GraphicsContext3D::HALF_FLOAT_OES: // OES_texture_half_float | 650 case GL_HALF_FLOAT_OES: // OES_texture_half_float |
| 651 *bytesPerComponent = sizeof(GC3Dhalffloat); | 651 *bytesPerComponent = sizeof(GC3Dhalffloat); |
| 652 break; | 652 break; |
| 653 default: | 653 default: |
| 654 return false; | 654 return false; |
| 655 } | 655 } |
| 656 return true; | 656 return true; |
| 657 } | 657 } |
| 658 | 658 |
| 659 GC3Denum GraphicsContext3D::computeImageSizeInBytes(GC3Denum format, GC3Denum ty
pe, GC3Dsizei width, GC3Dsizei height, GC3Dint alignment, | 659 GC3Denum GraphicsContext3D::computeImageSizeInBytes(GC3Denum format, GC3Denum ty
pe, GC3Dsizei width, GC3Dsizei height, GC3Dint alignment, |
| 660 unsigned int* imageSizeInByt
es, unsigned int* paddingInBytes) | 660 unsigned int* imageSizeInByt
es, unsigned int* paddingInBytes) |
| 661 { | 661 { |
| 662 ASSERT(imageSizeInBytes); | 662 ASSERT(imageSizeInBytes); |
| 663 ASSERT(alignment == 1 || alignment == 2 || alignment == 4 || alignment == 8)
; | 663 ASSERT(alignment == 1 || alignment == 2 || alignment == 4 || alignment == 8)
; |
| 664 if (width < 0 || height < 0) | 664 if (width < 0 || height < 0) |
| 665 return GraphicsContext3D::INVALID_VALUE; | 665 return GL_INVALID_VALUE; |
| 666 unsigned int bytesPerComponent, componentsPerPixel; | 666 unsigned int bytesPerComponent, componentsPerPixel; |
| 667 if (!computeFormatAndTypeParameters(format, type, &bytesPerComponent, &compo
nentsPerPixel)) | 667 if (!computeFormatAndTypeParameters(format, type, &bytesPerComponent, &compo
nentsPerPixel)) |
| 668 return GraphicsContext3D::INVALID_ENUM; | 668 return GL_INVALID_ENUM; |
| 669 if (!width || !height) { | 669 if (!width || !height) { |
| 670 *imageSizeInBytes = 0; | 670 *imageSizeInBytes = 0; |
| 671 if (paddingInBytes) | 671 if (paddingInBytes) |
| 672 *paddingInBytes = 0; | 672 *paddingInBytes = 0; |
| 673 return GraphicsContext3D::NO_ERROR; | 673 return GL_NO_ERROR; |
| 674 } | 674 } |
| 675 CheckedInt<uint32_t> checkedValue(bytesPerComponent * componentsPerPixel); | 675 CheckedInt<uint32_t> checkedValue(bytesPerComponent * componentsPerPixel); |
| 676 checkedValue *= width; | 676 checkedValue *= width; |
| 677 if (!checkedValue.isValid()) | 677 if (!checkedValue.isValid()) |
| 678 return GraphicsContext3D::INVALID_VALUE; | 678 return GL_INVALID_VALUE; |
| 679 unsigned int validRowSize = checkedValue.value(); | 679 unsigned int validRowSize = checkedValue.value(); |
| 680 unsigned int padding = 0; | 680 unsigned int padding = 0; |
| 681 unsigned int residual = validRowSize % alignment; | 681 unsigned int residual = validRowSize % alignment; |
| 682 if (residual) { | 682 if (residual) { |
| 683 padding = alignment - residual; | 683 padding = alignment - residual; |
| 684 checkedValue += padding; | 684 checkedValue += padding; |
| 685 } | 685 } |
| 686 // Last row needs no padding. | 686 // Last row needs no padding. |
| 687 checkedValue *= (height - 1); | 687 checkedValue *= (height - 1); |
| 688 checkedValue += validRowSize; | 688 checkedValue += validRowSize; |
| 689 if (!checkedValue.isValid()) | 689 if (!checkedValue.isValid()) |
| 690 return GraphicsContext3D::INVALID_VALUE; | 690 return GL_INVALID_VALUE; |
| 691 *imageSizeInBytes = checkedValue.value(); | 691 *imageSizeInBytes = checkedValue.value(); |
| 692 if (paddingInBytes) | 692 if (paddingInBytes) |
| 693 *paddingInBytes = padding; | 693 *paddingInBytes = padding; |
| 694 return GraphicsContext3D::NO_ERROR; | 694 return GL_NO_ERROR; |
| 695 } | 695 } |
| 696 | 696 |
| 697 GraphicsContext3D::ImageExtractor::ImageExtractor(Image* image, ImageHtmlDomSour
ce imageHtmlDomSource, bool premultiplyAlpha, bool ignoreGammaAndColorProfile) | 697 GraphicsContext3D::ImageExtractor::ImageExtractor(Image* image, ImageHtmlDomSour
ce imageHtmlDomSource, bool premultiplyAlpha, bool ignoreGammaAndColorProfile) |
| 698 { | 698 { |
| 699 m_image = image; | 699 m_image = image; |
| 700 m_imageHtmlDomSource = imageHtmlDomSource; | 700 m_imageHtmlDomSource = imageHtmlDomSource; |
| 701 m_extractSucceeded = extractImage(premultiplyAlpha, ignoreGammaAndColorProfi
le); | 701 m_extractSucceeded = extractImage(premultiplyAlpha, ignoreGammaAndColorProfi
le); |
| 702 } | 702 } |
| 703 | 703 |
| 704 GraphicsContext3D::ImageExtractor::~ImageExtractor() | 704 GraphicsContext3D::ImageExtractor::~ImageExtractor() |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 755 return false; | 755 return false; |
| 756 m_imageSourceUnpackAlignment = 0; | 756 m_imageSourceUnpackAlignment = 0; |
| 757 m_skiaImage->bitmap().lockPixels(); | 757 m_skiaImage->bitmap().lockPixels(); |
| 758 m_imagePixelData = m_skiaImage->bitmap().getPixels(); | 758 m_imagePixelData = m_skiaImage->bitmap().getPixels(); |
| 759 return true; | 759 return true; |
| 760 } | 760 } |
| 761 | 761 |
| 762 unsigned GraphicsContext3D::getClearBitsByFormat(GC3Denum format) | 762 unsigned GraphicsContext3D::getClearBitsByFormat(GC3Denum format) |
| 763 { | 763 { |
| 764 switch (format) { | 764 switch (format) { |
| 765 case GraphicsContext3D::ALPHA: | 765 case GL_ALPHA: |
| 766 case GraphicsContext3D::LUMINANCE: | 766 case GL_LUMINANCE: |
| 767 case GraphicsContext3D::LUMINANCE_ALPHA: | 767 case GL_LUMINANCE_ALPHA: |
| 768 case GraphicsContext3D::RGB: | 768 case GL_RGB: |
| 769 case GraphicsContext3D::RGB565: | 769 case GL_RGB565: |
| 770 case GraphicsContext3D::RGBA: | 770 case GL_RGBA: |
| 771 case GraphicsContext3D::RGBA4: | 771 case GL_RGBA4: |
| 772 case GraphicsContext3D::RGB5_A1: | 772 case GL_RGB5_A1: |
| 773 return GraphicsContext3D::COLOR_BUFFER_BIT; | 773 return GL_COLOR_BUFFER_BIT; |
| 774 case GraphicsContext3D::DEPTH_COMPONENT16: | 774 case GL_DEPTH_COMPONENT16: |
| 775 case GraphicsContext3D::DEPTH_COMPONENT: | 775 case GL_DEPTH_COMPONENT: |
| 776 return GraphicsContext3D::DEPTH_BUFFER_BIT; | 776 return GL_DEPTH_BUFFER_BIT; |
| 777 case GraphicsContext3D::STENCIL_INDEX8: | 777 case GL_STENCIL_INDEX8: |
| 778 return GraphicsContext3D::STENCIL_BUFFER_BIT; | 778 return GL_STENCIL_BUFFER_BIT; |
| 779 case GraphicsContext3D::DEPTH_STENCIL: | 779 case GL_DEPTH_STENCIL_OES: |
| 780 return GraphicsContext3D::DEPTH_BUFFER_BIT | GraphicsContext3D::STENCIL_
BUFFER_BIT; | 780 return GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT; |
| 781 default: | 781 default: |
| 782 return 0; | 782 return 0; |
| 783 } | 783 } |
| 784 } | 784 } |
| 785 | 785 |
| 786 unsigned GraphicsContext3D::getChannelBitsByFormat(GC3Denum format) | 786 unsigned GraphicsContext3D::getChannelBitsByFormat(GC3Denum format) |
| 787 { | 787 { |
| 788 switch (format) { | 788 switch (format) { |
| 789 case GraphicsContext3D::ALPHA: | 789 case GL_ALPHA: |
| 790 return ChannelAlpha; | 790 return ChannelAlpha; |
| 791 case GraphicsContext3D::LUMINANCE: | 791 case GL_LUMINANCE: |
| 792 return ChannelRGB; | 792 return ChannelRGB; |
| 793 case GraphicsContext3D::LUMINANCE_ALPHA: | 793 case GL_LUMINANCE_ALPHA: |
| 794 return ChannelRGBA; | 794 return ChannelRGBA; |
| 795 case GraphicsContext3D::RGB: | 795 case GL_RGB: |
| 796 case GraphicsContext3D::RGB565: | 796 case GL_RGB565: |
| 797 return ChannelRGB; | 797 return ChannelRGB; |
| 798 case GraphicsContext3D::RGBA: | 798 case GL_RGBA: |
| 799 case GraphicsContext3D::RGBA4: | 799 case GL_RGBA4: |
| 800 case GraphicsContext3D::RGB5_A1: | 800 case GL_RGB5_A1: |
| 801 return ChannelRGBA; | 801 return ChannelRGBA; |
| 802 case GraphicsContext3D::DEPTH_COMPONENT16: | 802 case GL_DEPTH_COMPONENT16: |
| 803 case GraphicsContext3D::DEPTH_COMPONENT: | 803 case GL_DEPTH_COMPONENT: |
| 804 return ChannelDepth; | 804 return ChannelDepth; |
| 805 case GraphicsContext3D::STENCIL_INDEX8: | 805 case GL_STENCIL_INDEX8: |
| 806 return ChannelStencil; | 806 return ChannelStencil; |
| 807 case GraphicsContext3D::DEPTH_STENCIL: | 807 case GL_DEPTH_STENCIL_OES: |
| 808 return ChannelDepth | ChannelStencil; | 808 return ChannelDepth | ChannelStencil; |
| 809 default: | 809 default: |
| 810 return 0; | 810 return 0; |
| 811 } | 811 } |
| 812 } | 812 } |
| 813 | 813 |
| 814 void GraphicsContext3D::paintFramebufferToCanvas(int framebuffer, int width, int
height, bool premultiplyAlpha, ImageBuffer* imageBuffer) | 814 void GraphicsContext3D::paintFramebufferToCanvas(int framebuffer, int width, int
height, bool premultiplyAlpha, ImageBuffer* imageBuffer) |
| 815 { | 815 { |
| 816 unsigned char* pixels = 0; | 816 unsigned char* pixels = 0; |
| 817 | 817 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 832 if (!m_resizingBitmap.allocPixels()) | 832 if (!m_resizingBitmap.allocPixels()) |
| 833 return; | 833 return; |
| 834 } | 834 } |
| 835 readbackBitmap = &m_resizingBitmap; | 835 readbackBitmap = &m_resizingBitmap; |
| 836 } | 836 } |
| 837 | 837 |
| 838 // Read back the frame buffer. | 838 // Read back the frame buffer. |
| 839 SkAutoLockPixels bitmapLock(*readbackBitmap); | 839 SkAutoLockPixels bitmapLock(*readbackBitmap); |
| 840 pixels = static_cast<unsigned char*>(readbackBitmap->getPixels()); | 840 pixels = static_cast<unsigned char*>(readbackBitmap->getPixels()); |
| 841 | 841 |
| 842 m_impl->bindFramebuffer(FRAMEBUFFER, framebuffer); | 842 m_impl->bindFramebuffer(GL_FRAMEBUFFER, framebuffer); |
| 843 readBackFramebuffer(pixels, width, height, ReadbackSkia, premultiplyAlpha ?
AlphaDoPremultiply : AlphaDoNothing); | 843 readBackFramebuffer(pixels, width, height, ReadbackSkia, premultiplyAlpha ?
AlphaDoPremultiply : AlphaDoNothing); |
| 844 flipVertically(pixels, width, height); | 844 flipVertically(pixels, width, height); |
| 845 | 845 |
| 846 readbackBitmap->notifyPixelsChanged(); | 846 readbackBitmap->notifyPixelsChanged(); |
| 847 if (m_resizingBitmap.readyToDraw()) { | 847 if (m_resizingBitmap.readyToDraw()) { |
| 848 // We need to draw the resizing bitmap into the canvas's backing store. | 848 // We need to draw the resizing bitmap into the canvas's backing store. |
| 849 SkCanvas canvas(*canvasBitmap); | 849 SkCanvas canvas(*canvasBitmap); |
| 850 SkRect dst; | 850 SkRect dst; |
| 851 dst.set(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(canvasBitmap->
width()), SkIntToScalar(canvasBitmap->height())); | 851 dst.set(SkIntToScalar(0), SkIntToScalar(0), SkIntToScalar(canvasBitmap->
width()), SkIntToScalar(canvasBitmap->height())); |
| 852 canvas.drawBitmapRect(m_resizingBitmap, 0, dst); | 852 canvas.drawBitmapRect(m_resizingBitmap, 0, dst); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 877 { | 877 { |
| 878 if (m_initializedAvailableExtensions) | 878 if (m_initializedAvailableExtensions) |
| 879 return; | 879 return; |
| 880 | 880 |
| 881 m_initializedAvailableExtensions = true; | 881 m_initializedAvailableExtensions = true; |
| 882 bool success = m_impl->makeContextCurrent(); | 882 bool success = m_impl->makeContextCurrent(); |
| 883 ASSERT(success); | 883 ASSERT(success); |
| 884 if (!success) | 884 if (!success) |
| 885 return; | 885 return; |
| 886 | 886 |
| 887 String extensionsString = m_impl->getString(GraphicsContext3D::EXTENSIONS); | 887 String extensionsString = m_impl->getString(GL_EXTENSIONS); |
| 888 splitStringHelper(extensionsString, m_enabledExtensions); | 888 splitStringHelper(extensionsString, m_enabledExtensions); |
| 889 | 889 |
| 890 String requestableExtensionsString = m_impl->getRequestableExtensionsCHROMIU
M(); | 890 String requestableExtensionsString = m_impl->getRequestableExtensionsCHROMIU
M(); |
| 891 splitStringHelper(requestableExtensionsString, m_requestableExtensions); | 891 splitStringHelper(requestableExtensionsString, m_requestableExtensions); |
| 892 } | 892 } |
| 893 | 893 |
| 894 | 894 |
| 895 bool GraphicsContext3D::supportsExtension(const String& name) | 895 bool GraphicsContext3D::supportsExtension(const String& name) |
| 896 { | 896 { |
| 897 initializeExtensions(); | 897 initializeExtensions(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 935 for (unsigned i = 0; i < count; i++) { | 935 for (unsigned i = 0; i < count; i++) { |
| 936 uint8* rowA = framebuffer + i * rowBytes; | 936 uint8* rowA = framebuffer + i * rowBytes; |
| 937 uint8* rowB = framebuffer + (height - i - 1) * rowBytes; | 937 uint8* rowB = framebuffer + (height - i - 1) * rowBytes; |
| 938 memcpy(scanline, rowB, rowBytes); | 938 memcpy(scanline, rowB, rowBytes); |
| 939 memcpy(rowB, rowA, rowBytes); | 939 memcpy(rowB, rowA, rowBytes); |
| 940 memcpy(rowA, scanline, rowBytes); | 940 memcpy(rowA, scanline, rowBytes); |
| 941 } | 941 } |
| 942 } | 942 } |
| 943 | 943 |
| 944 } // namespace WebCore | 944 } // namespace WebCore |
| OLD | NEW |