Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp

Issue 1807103002: Move simple methods [A-E] from WebGraphicsContext3D to GLES2Interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@work
Patch Set: bindFoo: ALLthetests Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 14 matching lines...) Expand all
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */ 31 */
32 32
33 #include "platform/graphics/ImageBuffer.h" 33 #include "platform/graphics/ImageBuffer.h"
34 34
35 #include "GrContext.h" 35 #include "gpu/command_buffer/client/gles2_interface.h"
36 #include "platform/MIMETypeRegistry.h" 36 #include "platform/MIMETypeRegistry.h"
37 #include "platform/geometry/IntRect.h" 37 #include "platform/geometry/IntRect.h"
38 #include "platform/graphics/GraphicsContext.h" 38 #include "platform/graphics/GraphicsContext.h"
39 #include "platform/graphics/GraphicsTypes3D.h" 39 #include "platform/graphics/GraphicsTypes3D.h"
40 #include "platform/graphics/ImageBufferClient.h" 40 #include "platform/graphics/ImageBufferClient.h"
41 #include "platform/graphics/StaticBitmapImage.h" 41 #include "platform/graphics/StaticBitmapImage.h"
42 #include "platform/graphics/UnacceleratedImageBufferSurface.h" 42 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
43 #include "platform/graphics/gpu/DrawingBuffer.h" 43 #include "platform/graphics/gpu/DrawingBuffer.h"
44 #include "platform/graphics/gpu/Extensions3DUtil.h" 44 #include "platform/graphics/gpu/Extensions3DUtil.h"
45 #include "platform/graphics/skia/SkiaUtils.h" 45 #include "platform/graphics/skia/SkiaUtils.h"
46 #include "platform/image-encoders/skia/JPEGImageEncoder.h" 46 #include "platform/image-encoders/skia/JPEGImageEncoder.h"
47 #include "platform/image-encoders/skia/PNGImageEncoder.h" 47 #include "platform/image-encoders/skia/PNGImageEncoder.h"
48 #include "platform/image-encoders/skia/WEBPImageEncoder.h" 48 #include "platform/image-encoders/skia/WEBPImageEncoder.h"
49 #include "public/platform/Platform.h" 49 #include "public/platform/Platform.h"
50 #include "public/platform/WebExternalTextureMailbox.h" 50 #include "public/platform/WebExternalTextureMailbox.h"
51 #include "public/platform/WebGraphicsContext3D.h" 51 #include "public/platform/WebGraphicsContext3D.h"
52 #include "public/platform/WebGraphicsContext3DProvider.h" 52 #include "public/platform/WebGraphicsContext3DProvider.h"
53 #include "skia/ext/texture_handle.h" 53 #include "skia/ext/texture_handle.h"
54 #include "third_party/skia/include/core/SkPicture.h" 54 #include "third_party/skia/include/core/SkPicture.h"
55 #include "third_party/skia/include/gpu/GrContext.h"
55 #include "third_party/skia/include/gpu/gl/GrGLTypes.h" 56 #include "third_party/skia/include/gpu/gl/GrGLTypes.h"
56 #include "wtf/ArrayBufferContents.h" 57 #include "wtf/ArrayBufferContents.h"
57 #include "wtf/MathExtras.h" 58 #include "wtf/MathExtras.h"
58 #include "wtf/Vector.h" 59 #include "wtf/Vector.h"
59 #include "wtf/text/Base64.h" 60 #include "wtf/text/Base64.h"
60 #include "wtf/text/WTFString.h" 61 #include "wtf/text/WTFString.h"
61 62
62 namespace blink { 63 namespace blink {
63 64
64 PassOwnPtr<ImageBuffer> ImageBuffer::create(PassOwnPtr<ImageBufferSurface> surfa ce) 65 PassOwnPtr<ImageBuffer> ImageBuffer::create(PassOwnPtr<ImageBufferSurface> surfa ce)
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 if (m_snapshotState == DidAcquireSnapshot) 171 if (m_snapshotState == DidAcquireSnapshot)
171 m_snapshotState = DrawnToAfterSnapshot; 172 m_snapshotState = DrawnToAfterSnapshot;
172 m_surface->didDraw(rect); 173 m_surface->didDraw(rect);
173 } 174 }
174 175
175 WebLayer* ImageBuffer::platformLayer() const 176 WebLayer* ImageBuffer::platformLayer() const
176 { 177 {
177 return m_surface->layer(); 178 return m_surface->layer();
178 } 179 }
179 180
180 bool ImageBuffer::copyToPlatformTexture(WebGraphicsContext3D* context, Platform3 DObject texture, GLenum internalFormat, GLenum destType, GLint level, bool premu ltiplyAlpha, bool flipY) 181 bool ImageBuffer::copyToPlatformTexture(WebGraphicsContext3D* context, gpu::gles 2::GLES2Interface* gl, Platform3DObject texture, GLenum internalFormat, GLenum d estType, GLint level, bool premultiplyAlpha, bool flipY)
181 { 182 {
182 if (!Extensions3DUtil::canUseCopyTextureCHROMIUM(GL_TEXTURE_2D, internalForm at, destType, level)) 183 if (!Extensions3DUtil::canUseCopyTextureCHROMIUM(GL_TEXTURE_2D, internalForm at, destType, level))
183 return false; 184 return false;
184 185
185 if (!isSurfaceValid()) 186 if (!isSurfaceValid())
186 return false; 187 return false;
187 188
188 RefPtr<const SkImage> textureImage = m_surface->newImageSnapshot(PreferAccel eration, SnapshotReasonCopyToWebGLTexture); 189 RefPtr<const SkImage> textureImage = m_surface->newImageSnapshot(PreferAccel eration, SnapshotReasonCopyToWebGLTexture);
189 if (!textureImage) 190 if (!textureImage)
190 return false; 191 return false;
191 192
192 if (!m_surface->isAccelerated()) 193 if (!m_surface->isAccelerated())
193 return false; 194 return false;
194 195
195 196
196 ASSERT(textureImage->isTextureBacked()); // isAccelerated() check above shou ld guarantee this 197 ASSERT(textureImage->isTextureBacked()); // isAccelerated() check above shou ld guarantee this
197 // Get the texture ID, flushing pending operations if needed. 198 // Get the texture ID, flushing pending operations if needed.
198 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureInfo( textureImage->getTextureHandle(true)); 199 const GrGLTextureInfo* textureInfo = skia::GrBackendObjectToGrGLTextureInfo( textureImage->getTextureHandle(true));
199 if (!textureInfo || !textureInfo->fID) 200 if (!textureInfo || !textureInfo->fID)
200 return false; 201 return false;
201 202
202 OwnPtr<WebGraphicsContext3DProvider> provider = adoptPtr(Platform::current() ->createSharedOffscreenGraphicsContext3DProvider()); 203 OwnPtr<WebGraphicsContext3DProvider> provider = adoptPtr(Platform::current() ->createSharedOffscreenGraphicsContext3DProvider());
203 if (!provider) 204 if (!provider)
204 return false; 205 return false;
205 WebGraphicsContext3D* sharedContext = provider->context3d(); 206 WebGraphicsContext3D* sharedContext = provider->context3d();
207 gpu::gles2::GLES2Interface* sharedGL = provider->contextGL();
206 208
207 OwnPtr<WebExternalTextureMailbox> mailbox = adoptPtr(new WebExternalTextureM ailbox); 209 OwnPtr<WebExternalTextureMailbox> mailbox = adoptPtr(new WebExternalTextureM ailbox);
208 mailbox->textureSize = WebSize(textureImage->width(), textureImage->height() ); 210 mailbox->textureSize = WebSize(textureImage->width(), textureImage->height() );
209 211
210 // Contexts may be in a different share group. We must transfer the texture through a mailbox first 212 // Contexts may be in a different share group. We must transfer the texture through a mailbox first
211 sharedContext->genMailboxCHROMIUM(mailbox->name); 213 sharedContext->genMailboxCHROMIUM(mailbox->name);
212 sharedContext->produceTextureDirectCHROMIUM(textureInfo->fID, textureInfo->f Target, mailbox->name); 214 sharedContext->produceTextureDirectCHROMIUM(textureInfo->fID, textureInfo->f Target, mailbox->name);
213 const WGC3Duint64 sharedFenceSync = sharedContext->insertFenceSyncCHROMIUM() ; 215 const GLuint64 sharedFenceSync = sharedGL->InsertFenceSyncCHROMIUM();
214 sharedContext->flush(); 216 sharedContext->flush();
215 217
216 mailbox->validSyncToken = sharedContext->genSyncTokenCHROMIUM(sharedFenceSyn c, mailbox->syncToken); 218 mailbox->validSyncToken = sharedContext->genSyncTokenCHROMIUM(sharedFenceSyn c, mailbox->syncToken);
217 if (mailbox->validSyncToken) 219 if (mailbox->validSyncToken)
218 context->waitSyncTokenCHROMIUM(mailbox->syncToken); 220 gl->WaitSyncTokenCHROMIUM(mailbox->syncToken);
219 221
220 Platform3DObject sourceTexture = context->createAndConsumeTextureCHROMIUM(te xtureInfo->fTarget, mailbox->name); 222 Platform3DObject sourceTexture = context->createAndConsumeTextureCHROMIUM(te xtureInfo->fTarget, mailbox->name);
221 223
222 // The canvas is stored in a premultiplied format, so unpremultiply if neces sary. 224 // The canvas is stored in a premultiplied format, so unpremultiply if neces sary.
223 // The canvas is stored in an inverted position, so the flip semantics are r eversed. 225 // The canvas is stored in an inverted position, so the flip semantics are r eversed.
224 context->copyTextureCHROMIUM(sourceTexture, texture, internalFormat, destTyp e, flipY ? GL_FALSE : GL_TRUE, GL_FALSE, premultiplyAlpha ? GL_FALSE : GL_TRUE); 226 context->copyTextureCHROMIUM(sourceTexture, texture, internalFormat, destTyp e, flipY ? GL_FALSE : GL_TRUE, GL_FALSE, premultiplyAlpha ? GL_FALSE : GL_TRUE);
225 227
226 context->deleteTexture(sourceTexture); 228 context->deleteTexture(sourceTexture);
227 229
228 const WGC3Duint64 contextFenceSync = context->insertFenceSyncCHROMIUM(); 230 const GLuint64 contextFenceSync = gl->InsertFenceSyncCHROMIUM();
229 231
230 context->flush(); 232 context->flush();
231 233
232 WGC3Dbyte syncToken[24]; 234 WGC3Dbyte syncToken[24];
233 if (context->genSyncTokenCHROMIUM(contextFenceSync, syncToken)) 235 if (context->genSyncTokenCHROMIUM(contextFenceSync, syncToken))
234 sharedContext->waitSyncTokenCHROMIUM(syncToken); 236 sharedGL->WaitSyncTokenCHROMIUM(syncToken);
235 237
236 // Undo grContext texture binding changes introduced in this function 238 // Undo grContext texture binding changes introduced in this function
237 provider->grContext()->resetContext(kTextureBinding_GrGLBackendState); 239 provider->grContext()->resetContext(kTextureBinding_GrGLBackendState);
238 240
239 return true; 241 return true;
240 } 242 }
241 243
242 bool ImageBuffer::copyRenderingResultsFromDrawingBuffer(DrawingBuffer* drawingBu ffer, SourceDrawingBuffer sourceBuffer) 244 bool ImageBuffer::copyRenderingResultsFromDrawingBuffer(DrawingBuffer* drawingBu ffer, SourceDrawingBuffer sourceBuffer)
243 { 245 {
244 if (!drawingBuffer || !m_surface->isAccelerated()) 246 if (!drawingBuffer || !m_surface->isAccelerated())
245 return false; 247 return false;
246 OwnPtr<WebGraphicsContext3DProvider> provider = adoptPtr(Platform::current() ->createSharedOffscreenGraphicsContext3DProvider()); 248 OwnPtr<WebGraphicsContext3DProvider> provider = adoptPtr(Platform::current() ->createSharedOffscreenGraphicsContext3DProvider());
247 if (!provider) 249 if (!provider)
248 return false; 250 return false;
249 WebGraphicsContext3D* context3D = provider->context3d(); 251 WebGraphicsContext3D* context3D = provider->context3d();
252 gpu::gles2::GLES2Interface* gl = provider->contextGL();
250 Platform3DObject textureId = m_surface->getBackingTextureHandleForOverwrite( ); 253 Platform3DObject textureId = m_surface->getBackingTextureHandleForOverwrite( );
251 if (!textureId) 254 if (!textureId)
252 return false; 255 return false;
253 256
254 context3D->flush(); 257 context3D->flush();
255 258
256 return drawingBuffer->copyToPlatformTexture(context3D, textureId, GL_RGBA, 259 return drawingBuffer->copyToPlatformTexture(context3D, gl, textureId, GL_RGB A,
257 GL_UNSIGNED_BYTE, 0, true, false, sourceBuffer); 260 GL_UNSIGNED_BYTE, 0, true, false, sourceBuffer);
258 } 261 }
259 262
260 void ImageBuffer::draw(GraphicsContext& context, const FloatRect& destRect, cons t FloatRect* srcPtr, SkXfermode::Mode op) 263 void ImageBuffer::draw(GraphicsContext& context, const FloatRect& destRect, cons t FloatRect* srcPtr, SkXfermode::Mode op)
261 { 264 {
262 if (!isSurfaceValid()) 265 if (!isSurfaceValid())
263 return; 266 return;
264 267
265 FloatRect srcRect = srcPtr ? *srcPtr : FloatRect(FloatPoint(), FloatSize(siz e())); 268 FloatRect srcRect = srcPtr ? *srcPtr : FloatRect(FloatPoint(), FloatSize(siz e()));
266 m_surface->draw(context, destRect, srcRect, op); 269 m_surface->draw(context, destRect, srcRect, op);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 ASSERT(MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType)); 405 ASSERT(MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType));
403 406
404 Vector<unsigned char> result; 407 Vector<unsigned char> result;
405 if (!encodeImage(mimeType, quality, &result)) 408 if (!encodeImage(mimeType, quality, &result))
406 return "data:,"; 409 return "data:,";
407 410
408 return "data:" + mimeType + ";base64," + base64Encode(result); 411 return "data:" + mimeType + ";base64," + base64Encode(result);
409 } 412 }
410 413
411 } // namespace blink 414 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698