| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2008, Google Inc. All rights reserved. | 2 * Copyright (c) 2008, Google Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
| 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. 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 are | 7 * modification, are permitted provided that the following conditions are |
| 8 * met: | 8 * met: |
| 9 * | 9 * |
| 10 * * Redistributions of source code must retain the above copyright | 10 * * Redistributions of source code must retain the above copyright |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 #include "third_party/skia/include/gpu/GrContext.h" | 54 #include "third_party/skia/include/gpu/GrContext.h" |
| 55 #include "third_party/skia/include/gpu/SkGpuDevice.h" | 55 #include "third_party/skia/include/gpu/SkGpuDevice.h" |
| 56 #include "wtf/MathExtras.h" | 56 #include "wtf/MathExtras.h" |
| 57 #include "wtf/text/Base64.h" | 57 #include "wtf/text/Base64.h" |
| 58 #include "wtf/text/WTFString.h" | 58 #include "wtf/text/WTFString.h" |
| 59 | 59 |
| 60 using namespace std; | 60 using namespace std; |
| 61 | 61 |
| 62 namespace WebCore { | 62 namespace WebCore { |
| 63 | 63 |
| 64 static SkCanvas* createAcceleratedCanvas(const IntSize& size, OwnPtr<Canvas2DLay
erBridge>* outLayerBridge, OpacityMode opacityMode) | 64 static SkCanvas* createAcceleratedCanvas(const IntSize& size, Canvas2DLayerBridg
ePtr* outLayerBridge, OpacityMode opacityMode) |
| 65 { | 65 { |
| 66 RefPtr<GraphicsContext3D> context3D = SharedGraphicsContext3D::get(); | 66 RefPtr<GraphicsContext3D> context3D = SharedGraphicsContext3D::get(); |
| 67 if (!context3D) | 67 if (!context3D) |
| 68 return 0; | 68 return 0; |
| 69 Canvas2DLayerBridge::OpacityMode bridgeOpacityMode = opacityMode == Opaque ?
Canvas2DLayerBridge::Opaque : Canvas2DLayerBridge::NonOpaque; | 69 Canvas2DLayerBridge::OpacityMode bridgeOpacityMode = opacityMode == Opaque ?
Canvas2DLayerBridge::Opaque : Canvas2DLayerBridge::NonOpaque; |
| 70 *outLayerBridge = Canvas2DLayerBridge::create(context3D.release(), size, bri
dgeOpacityMode); | 70 *outLayerBridge = Canvas2DLayerBridge::create(context3D.release(), size, bri
dgeOpacityMode); |
| 71 // If canvas buffer allocation failed, debug build will have asserted | 71 // If canvas buffer allocation failed, debug build will have asserted |
| 72 // For release builds, we must verify whether the device has a render target | 72 // For release builds, we must verify whether the device has a render target |
| 73 return (*outLayerBridge) ? (*outLayerBridge)->getCanvas() : 0; | 73 return outLayerBridge->get() ? (*outLayerBridge)->getCanvas() : 0; |
| 74 } | 74 } |
| 75 | 75 |
| 76 static SkCanvas* createNonPlatformCanvas(const IntSize& size) | 76 static SkCanvas* createNonPlatformCanvas(const IntSize& size) |
| 77 { | 77 { |
| 78 SkAutoTUnref<SkDevice> device(new SkDevice(SkBitmap::kARGB_8888_Config, size
.width(), size.height())); | 78 SkAutoTUnref<SkDevice> device(new SkDevice(SkBitmap::kARGB_8888_Config, size
.width(), size.height())); |
| 79 SkPixelRef* pixelRef = device->accessBitmap(false).pixelRef(); | 79 SkPixelRef* pixelRef = device->accessBitmap(false).pixelRef(); |
| 80 return pixelRef ? new SkCanvas(device) : 0; | 80 return pixelRef ? new SkCanvas(device) : 0; |
| 81 } | 81 } |
| 82 | 82 |
| 83 PassOwnPtr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const IntSize& size,
float resolutionScale, const GraphicsContext* context, bool hasAlpha) | 83 PassOwnPtr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const IntSize& size,
float resolutionScale, const GraphicsContext* context, bool hasAlpha) |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 | 156 |
| 157 success = true; | 157 success = true; |
| 158 } | 158 } |
| 159 | 159 |
| 160 ImageBuffer::~ImageBuffer() | 160 ImageBuffer::~ImageBuffer() |
| 161 { | 161 { |
| 162 } | 162 } |
| 163 | 163 |
| 164 GraphicsContext* ImageBuffer::context() const | 164 GraphicsContext* ImageBuffer::context() const |
| 165 { | 165 { |
| 166 if (m_layerBridge) { | 166 if (m_layerBridge.get()) { |
| 167 // We're using context acquisition as a signal that someone is about to
render into our buffer and we need | 167 // We're using context acquisition as a signal that someone is about to
render into our buffer and we need |
| 168 // to be ready. This isn't logically const-correct, hence the cast. | 168 // to be ready. This isn't logically const-correct, hence the cast. |
| 169 const_cast<Canvas2DLayerBridge*>(m_layerBridge.get())->contextAcquired()
; | 169 const_cast<Canvas2DLayerBridge*>(m_layerBridge.get())->contextAcquired()
; |
| 170 } | 170 } |
| 171 return m_context.get(); | 171 return m_context.get(); |
| 172 } | 172 } |
| 173 | 173 |
| 174 | 174 |
| 175 bool ImageBuffer::isValid() const | 175 bool ImageBuffer::isValid() const |
| 176 { | 176 { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 198 return BitmapImage::create(NativeImageSkia::create(copyBehavior == CopyBacki
ngStore ? deepSkBitmapCopy(bitmap) : bitmap, m_resolutionScale)); | 198 return BitmapImage::create(NativeImageSkia::create(copyBehavior == CopyBacki
ngStore ? deepSkBitmapCopy(bitmap) : bitmap, m_resolutionScale)); |
| 199 } | 199 } |
| 200 | 200 |
| 201 BackingStoreCopy ImageBuffer::fastCopyImageMode() | 201 BackingStoreCopy ImageBuffer::fastCopyImageMode() |
| 202 { | 202 { |
| 203 return DontCopyBackingStore; | 203 return DontCopyBackingStore; |
| 204 } | 204 } |
| 205 | 205 |
| 206 WebKit::WebLayer* ImageBuffer::platformLayer() const | 206 WebKit::WebLayer* ImageBuffer::platformLayer() const |
| 207 { | 207 { |
| 208 return m_layerBridge ? m_layerBridge->layer() : 0; | 208 return m_layerBridge.get() ? m_layerBridge->layer() : 0; |
| 209 } | 209 } |
| 210 | 210 |
| 211 bool ImageBuffer::copyToPlatformTexture(GraphicsContext3D& context, Platform3DOb
ject texture, GC3Denum internalFormat, GC3Denum destType, GC3Dint level, bool pr
emultiplyAlpha, bool flipY) | 211 bool ImageBuffer::copyToPlatformTexture(GraphicsContext3D& context, Platform3DOb
ject texture, GC3Denum internalFormat, GC3Denum destType, GC3Dint level, bool pr
emultiplyAlpha, bool flipY) |
| 212 { | 212 { |
| 213 if (!m_layerBridge || !platformLayer() || !isValid()) | 213 if (!m_layerBridge.get() || !platformLayer() || !isValid()) |
| 214 return false; | 214 return false; |
| 215 | 215 |
| 216 Platform3DObject sourceTexture = m_layerBridge->backBufferTexture(); | 216 Platform3DObject sourceTexture = m_layerBridge->backBufferTexture(); |
| 217 | 217 |
| 218 if (!context.makeContextCurrent()) | 218 if (!context.makeContextCurrent()) |
| 219 return false; | 219 return false; |
| 220 | 220 |
| 221 Extensions3D* extensions = context.getExtensions(); | 221 Extensions3D* extensions = context.getExtensions(); |
| 222 if (!extensions->supports("GL_CHROMIUM_copy_texture") || !extensions->suppor
ts("GL_CHROMIUM_flipy") | 222 if (!extensions->supports("GL_CHROMIUM_copy_texture") || !extensions->suppor
ts("GL_CHROMIUM_flipy") |
| 223 || !extensions->canUseCopyTextureCHROMIUM(internalFormat, destType, leve
l)) | 223 || !extensions->canUseCopyTextureCHROMIUM(internalFormat, destType, leve
l)) |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 if (!encodeImage(imageData, mimeType, quality, &encodedImage)) | 489 if (!encodeImage(imageData, mimeType, quality, &encodedImage)) |
| 490 return "data:,"; | 490 return "data:,"; |
| 491 | 491 |
| 492 Vector<char> base64Data; | 492 Vector<char> base64Data; |
| 493 base64Encode(encodedImage, base64Data); | 493 base64Encode(encodedImage, base64Data); |
| 494 | 494 |
| 495 return "data:" + mimeType + ";base64," + base64Data; | 495 return "data:" + mimeType + ";base64," + base64Data; |
| 496 } | 496 } |
| 497 | 497 |
| 498 } // namespace WebCore | 498 } // namespace WebCore |
| OLD | NEW |