OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010, Google Inc. All rights reserved. | 2 * Copyright (c) 2010, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
880 void DrawingBuffer::setPackAlignment(GLint param) | 880 void DrawingBuffer::setPackAlignment(GLint param) |
881 { | 881 { |
882 m_packAlignment = param; | 882 m_packAlignment = param; |
883 } | 883 } |
884 | 884 |
885 void DrawingBuffer::paintRenderingResultsToCanvas(ImageBuffer* imageBuffer) | 885 void DrawingBuffer::paintRenderingResultsToCanvas(ImageBuffer* imageBuffer) |
886 { | 886 { |
887 paintFramebufferToCanvas(framebuffer(), size().width(), size().height(), !m_
actualAttributes.premultipliedAlpha, imageBuffer); | 887 paintFramebufferToCanvas(framebuffer(), size().width(), size().height(), !m_
actualAttributes.premultipliedAlpha, imageBuffer); |
888 } | 888 } |
889 | 889 |
890 PassRefPtr<Uint8ClampedArray> DrawingBuffer::paintRenderingResultsToImageData(in
t& width, int& height) | |
891 { | |
892 if (m_actualAttributes.premultipliedAlpha) | |
893 return nullptr; | |
894 | |
895 width = size().width(); | |
896 height = size().height(); | |
897 | |
898 Checked<int, RecordOverflow> dataSize = 4; | |
899 dataSize *= width; | |
900 dataSize *= height; | |
901 if (dataSize.hasOverflowed()) | |
902 return nullptr; | |
903 | |
904 RefPtr<Uint8ClampedArray> pixels = Uint8ClampedArray::createUninitialized(wi
dth * height * 4); | |
905 | |
906 m_context->bindFramebuffer(GL_FRAMEBUFFER, framebuffer()); | |
907 readBackFramebuffer(pixels->data(), width, height, ReadbackRGBA, WebGLImageC
onversion::AlphaDoNothing); | |
908 flipVertically(pixels->data(), width, height); | |
909 | |
910 return pixels.release(); | |
911 } | |
912 | |
913 void DrawingBuffer::paintFramebufferToCanvas(int framebuffer, int width, int hei
ght, bool premultiplyAlpha, ImageBuffer* imageBuffer) | 890 void DrawingBuffer::paintFramebufferToCanvas(int framebuffer, int width, int hei
ght, bool premultiplyAlpha, ImageBuffer* imageBuffer) |
914 { | 891 { |
915 unsigned char* pixels = 0; | 892 unsigned char* pixels = 0; |
916 | 893 |
917 const SkBitmap& canvasBitmap = imageBuffer->bitmap(); | 894 const SkBitmap& canvasBitmap = imageBuffer->bitmap(); |
918 const SkBitmap* readbackBitmap = 0; | 895 const SkBitmap* readbackBitmap = 0; |
919 ASSERT(canvasBitmap.colorType() == kN32_SkColorType); | 896 ASSERT(canvasBitmap.colorType() == kN32_SkColorType); |
920 if (canvasBitmap.width() == width && canvasBitmap.height() == height) { | 897 if (canvasBitmap.width() == width && canvasBitmap.height() == height) { |
921 // This is the fastest and most common case. We read back | 898 // This is the fastest and most common case. We read back |
922 // directly into the canvas's backing store. | 899 // directly into the canvas's backing store. |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1021 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info) | 998 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info) |
1022 { | 999 { |
1023 if (info->imageId) { | 1000 if (info->imageId) { |
1024 m_context->releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, info->imageId); | 1001 m_context->releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, info->imageId); |
1025 m_context->destroyImageCHROMIUM(info->imageId); | 1002 m_context->destroyImageCHROMIUM(info->imageId); |
1026 info->imageId = 0; | 1003 info->imageId = 0; |
1027 } | 1004 } |
1028 } | 1005 } |
1029 | 1006 |
1030 } // namespace blink | 1007 } // namespace blink |
OLD | NEW |