Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple 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 | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 826 clearIfComposited(); | 826 clearIfComposited(); |
| 827 | 827 |
| 828 if (!m_markedCanvasDirty && !m_layerCleared) | 828 if (!m_markedCanvasDirty && !m_layerCleared) |
| 829 return; | 829 return; |
| 830 | 830 |
| 831 canvas()->clearCopiedImage(); | 831 canvas()->clearCopiedImage(); |
| 832 m_markedCanvasDirty = false; | 832 m_markedCanvasDirty = false; |
| 833 | 833 |
| 834 m_drawingBuffer->commit(); | 834 m_drawingBuffer->commit(); |
| 835 if (!(canvas()->buffer())->copyRenderingResultsFromDrawingBuffer(m_drawingBu ffer.get())) { | 835 if (!(canvas()->buffer())->copyRenderingResultsFromDrawingBuffer(m_drawingBu ffer.get())) { |
| 836 restoreCurrentTexture2D(); | |
| 836 canvas()->ensureUnacceleratedImageBuffer(); | 837 canvas()->ensureUnacceleratedImageBuffer(); |
| 837 if (canvas()->hasImageBuffer()) | 838 if (canvas()->hasImageBuffer()) |
| 838 m_drawingBuffer->paintRenderingResultsToCanvas(canvas()->buffer()); | 839 m_drawingBuffer->paintRenderingResultsToCanvas(canvas()->buffer()); |
| 840 } else { | |
| 841 restoreCurrentTexture2D(); | |
| 839 } | 842 } |
| 840 | 843 |
| 841 if (m_framebufferBinding) | 844 if (m_framebufferBinding) |
| 842 m_context->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebufferBin ding.get())); | 845 m_context->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebufferBin ding.get())); |
| 843 else | 846 else |
| 844 m_drawingBuffer->bind(); | 847 m_drawingBuffer->bind(); |
| 845 } | 848 } |
| 846 | 849 |
| 847 PassRefPtr<ImageData> WebGLRenderingContextBase::paintRenderingResultsToImageDat a() | 850 PassRefPtr<ImageData> WebGLRenderingContextBase::paintRenderingResultsToImageDat a() |
| 848 { | 851 { |
| (...skipping 2558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3407 | 3410 |
| 3408 WebGLTexture* texture = validateTextureBinding("texImage2D", target, true); | 3411 WebGLTexture* texture = validateTextureBinding("texImage2D", target, true); |
| 3409 // If possible, copy from the canvas element directly to the texture | 3412 // If possible, copy from the canvas element directly to the texture |
| 3410 // via the GPU, without a read-back to system memory. | 3413 // via the GPU, without a read-back to system memory. |
| 3411 if (GL_TEXTURE_2D == target && texture) { | 3414 if (GL_TEXTURE_2D == target && texture) { |
| 3412 if (!canvas->is3D()) { | 3415 if (!canvas->is3D()) { |
| 3413 ImageBuffer* buffer = canvas->buffer(); | 3416 ImageBuffer* buffer = canvas->buffer(); |
| 3414 if (buffer && buffer->copyToPlatformTexture(m_context.get(), texture ->object(), internalformat, type, | 3417 if (buffer && buffer->copyToPlatformTexture(m_context.get(), texture ->object(), internalformat, type, |
| 3415 level, m_unpackPremultiplyAlpha, m_unpackFlipY)) { | 3418 level, m_unpackPremultiplyAlpha, m_unpackFlipY)) { |
| 3416 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type); | 3419 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type); |
| 3420 restoreCurrentTexture2D(); | |
| 3417 return; | 3421 return; |
| 3418 } | 3422 } |
| 3419 } else { | 3423 } else { |
| 3420 WebGLRenderingContextBase* gl = toWebGLRenderingContextBase(canvas-> renderingContext()); | 3424 WebGLRenderingContextBase* gl = toWebGLRenderingContextBase(canvas-> renderingContext()); |
| 3421 if (gl && gl->m_drawingBuffer->copyToPlatformTexture(m_context.get() , texture->object(), internalformat, type, | 3425 if (gl && gl->m_drawingBuffer->copyToPlatformTexture(m_context.get() , texture->object(), internalformat, type, |
|
Ken Russell (switch to Gerrit)
2014/03/13 19:35:54
If the save/restore in DrawingBuffer::copyToPlatfo
| |
| 3422 level, m_unpackPremultiplyAlpha, m_unpackFlipY)) { | 3426 level, m_unpackPremultiplyAlpha, m_unpackFlipY)) { |
| 3423 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type); | 3427 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type); |
| 3428 restoreCurrentTexture2D(); | |
| 3424 return; | 3429 return; |
| 3425 } | 3430 } |
| 3426 } | 3431 } |
| 3432 restoreCurrentTexture2D(); | |
|
Ken Russell (switch to Gerrit)
2014/03/13 19:35:54
It might be worth creating a class which makes the
| |
| 3427 } | 3433 } |
| 3428 | 3434 |
| 3429 RefPtr<ImageData> imageData = canvas->getImageData(); | 3435 RefPtr<ImageData> imageData = canvas->getImageData(); |
| 3430 if (imageData) | 3436 if (imageData) |
| 3431 texImage2D(target, level, internalformat, format, type, imageData.get(), exceptionState); | 3437 texImage2D(target, level, internalformat, format, type, imageData.get(), exceptionState); |
| 3432 else | 3438 else |
| 3433 texImage2DImpl(target, level, internalformat, format, type, canvas->copi edImage(), WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, m_unpackPremultip lyAlpha, exceptionState); | 3439 texImage2DImpl(target, level, internalformat, format, type, canvas->copi edImage(), WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, m_unpackPremultip lyAlpha, exceptionState); |
| 3434 } | 3440 } |
| 3435 | 3441 |
| 3436 PassRefPtr<Image> WebGLRenderingContextBase::videoFrameToImage(HTMLVideoElement* video, BackingStoreCopy backingStoreCopy) | 3442 PassRefPtr<Image> WebGLRenderingContextBase::videoFrameToImage(HTMLVideoElement* video, BackingStoreCopy backingStoreCopy) |
| (...skipping 1894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5331 LocalFrame* frame = canvas()->document().frame(); | 5337 LocalFrame* frame = canvas()->document().frame(); |
| 5332 if (!frame) | 5338 if (!frame) |
| 5333 return; | 5339 return; |
| 5334 | 5340 |
| 5335 Settings* settings = frame->settings(); | 5341 Settings* settings = frame->settings(); |
| 5336 | 5342 |
| 5337 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled ())) | 5343 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled ())) |
| 5338 return; | 5344 return; |
| 5339 | 5345 |
| 5340 blink::WebGraphicsContext3D::Attributes attributes = m_requestedAttributes-> attributes(canvas()->document().topDocument().url().string(), settings); | 5346 blink::WebGraphicsContext3D::Attributes attributes = m_requestedAttributes-> attributes(canvas()->document().topDocument().url().string(), settings); |
| 5341 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr ent()->createOffscreenGraphicsContext3D(attributes)); | 5347 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr ent()->createOffscreenGraphicsContext3D(attributes, 0)); |
| 5342 if (!context) { | 5348 if (!context) { |
| 5343 if (m_contextLostMode == RealLostContext) { | 5349 if (m_contextLostMode == RealLostContext) { |
| 5344 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, FROM_HERE ); | 5350 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, FROM_HERE ); |
| 5345 } else { | 5351 } else { |
| 5346 // This likely shouldn't happen but is the best way to report it to the WebGL app. | 5352 // This likely shouldn't happen but is the best way to report it to the WebGL app. |
| 5347 synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context "); | 5353 synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context "); |
| 5348 } | 5354 } |
| 5349 return; | 5355 return; |
| 5350 } | 5356 } |
| 5351 | 5357 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5559 if (m_textureUnits[i].m_texture2DBinding | 5565 if (m_textureUnits[i].m_texture2DBinding |
| 5560 || m_textureUnits[i].m_textureCubeMapBinding) { | 5566 || m_textureUnits[i].m_textureCubeMapBinding) { |
| 5561 m_onePlusMaxNonDefaultTextureUnit = i + 1; | 5567 m_onePlusMaxNonDefaultTextureUnit = i + 1; |
| 5562 return; | 5568 return; |
| 5563 } | 5569 } |
| 5564 } | 5570 } |
| 5565 m_onePlusMaxNonDefaultTextureUnit = 0; | 5571 m_onePlusMaxNonDefaultTextureUnit = 0; |
| 5566 } | 5572 } |
| 5567 | 5573 |
| 5568 } // namespace WebCore | 5574 } // namespace WebCore |
| OLD | NEW |