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

Side by Side Diff: Source/core/html/canvas/WebGLRenderingContextBase.cpp

Issue 749653002: WebGL: clarify which Front or Back buffer is used by each API. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 1 month 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) 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 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 if (canvas()->hasImageBuffer()) 908 if (canvas()->hasImageBuffer())
909 drawingBuffer()->paintRenderingResultsToCanvas(canvas()->buffer()); 909 drawingBuffer()->paintRenderingResultsToCanvas(canvas()->buffer());
910 } 910 }
911 911
912 if (m_framebufferBinding) 912 if (m_framebufferBinding)
913 webContext()->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebuffer Binding.get())); 913 webContext()->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebuffer Binding.get()));
914 else 914 else
915 drawingBuffer()->bind(); 915 drawingBuffer()->bind();
916 } 916 }
917 917
918 PassRefPtrWillBeRawPtr<ImageData> WebGLRenderingContextBase::paintRenderingResul tsToImageData()
919 {
920 if (isContextLost())
921 return nullptr;
922
923 clearIfComposited();
924 drawingBuffer()->commit();
925 int width, height;
926 RefPtr<Uint8ClampedArray> imageDataPixels = drawingBuffer()->paintRenderingR esultsToImageData(width, height);
927 if (!imageDataPixels)
928 return nullptr;
929
930 if (m_framebufferBinding)
931 webContext()->bindFramebuffer(GL_FRAMEBUFFER, objectOrZero(m_framebuffer Binding.get()));
932 else
933 drawingBuffer()->bind();
934
935 return ImageData::create(IntSize(width, height), imageDataPixels);
936 }
937
938 void WebGLRenderingContextBase::reshape(int width, int height) 918 void WebGLRenderingContextBase::reshape(int width, int height)
939 { 919 {
940 if (isContextLost()) 920 if (isContextLost())
941 return; 921 return;
942 922
943 // This is an approximation because at WebGLRenderingContextBase level we do n't 923 // This is an approximation because at WebGLRenderingContextBase level we do n't
944 // know if the underlying FBO uses textures or renderbuffers. 924 // know if the underlying FBO uses textures or renderbuffers.
945 GLint maxSize = std::min(m_maxTextureSize, m_maxRenderbufferSize); 925 GLint maxSize = std::min(m_maxTextureSize, m_maxRenderbufferSize);
946 // Limit drawing buffer size to 4k to avoid memory exhaustion. 926 // Limit drawing buffer size to 4k to avoid memory exhaustion.
947 const int sizeUpperLimit = 4096; 927 const int sizeUpperLimit = 4096;
(...skipping 2602 matching lines...) Expand 10 before | Expand all | Expand 10 after
3550 WebGLRenderingContextBase* gl = toWebGLRenderingContextBase(canvas-> renderingContext()); 3530 WebGLRenderingContextBase* gl = toWebGLRenderingContextBase(canvas-> renderingContext());
3551 ScopedTexture2DRestorer restorer(gl); 3531 ScopedTexture2DRestorer restorer(gl);
3552 if (gl && gl->drawingBuffer()->copyToPlatformTexture(webContext(), t exture->object(), internalformat, type, 3532 if (gl && gl->drawingBuffer()->copyToPlatformTexture(webContext(), t exture->object(), internalformat, type,
3553 level, m_unpackPremultiplyAlpha, !m_unpackFlipY, DrawingBuffer:: Back)) { 3533 level, m_unpackPremultiplyAlpha, !m_unpackFlipY, DrawingBuffer:: Back)) {
3554 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type); 3534 texture->setLevelInfo(target, level, internalformat, canvas->wid th(), canvas->height(), type);
3555 return; 3535 return;
3556 } 3536 }
3557 } 3537 }
3558 } 3538 }
3559 3539
3560 RefPtrWillBeRawPtr<ImageData> imageData = canvas->getImageData(); 3540 texImage2DImpl(target, level, internalformat, format, type, canvas->copiedIm age(HTMLCanvasElement::Back), WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY , m_unpackPremultiplyAlpha, exceptionState);
3561 if (imageData)
3562 texImage2D(target, level, internalformat, format, type, imageData.get(), exceptionState);
3563 else
3564 texImage2DImpl(target, level, internalformat, format, type, canvas->copi edImage(), WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, m_unpackPremultip lyAlpha, exceptionState);
3565 } 3541 }
3566 3542
3567 PassRefPtr<Image> WebGLRenderingContextBase::videoFrameToImage(HTMLVideoElement* video, BackingStoreCopy backingStoreCopy) 3543 PassRefPtr<Image> WebGLRenderingContextBase::videoFrameToImage(HTMLVideoElement* video, BackingStoreCopy backingStoreCopy)
3568 { 3544 {
3569 IntSize size(video->videoWidth(), video->videoHeight()); 3545 IntSize size(video->videoWidth(), video->videoHeight());
3570 ImageBuffer* buf = m_generatedImageCache.imageBuffer(size); 3546 ImageBuffer* buf = m_generatedImageCache.imageBuffer(size);
3571 if (!buf) { 3547 if (!buf) {
3572 synthesizeGLError(GL_OUT_OF_MEMORY, "texImage2D", "out of memory"); 3548 synthesizeGLError(GL_OUT_OF_MEMORY, "texImage2D", "out of memory");
3573 return nullptr; 3549 return nullptr;
3574 } 3550 }
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
3788 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, imageForRen der.get(), WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackPremultipl yAlpha, exceptionState); 3764 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, imageForRen der.get(), WebGLImageConversion::HtmlDomImage, m_unpackFlipY, m_unpackPremultipl yAlpha, exceptionState);
3789 } 3765 }
3790 3766
3791 void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, 3767 void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
3792 GLenum format, GLenum type, HTMLCanvasElement* canvas, ExceptionState& excep tionState) 3768 GLenum format, GLenum type, HTMLCanvasElement* canvas, ExceptionState& excep tionState)
3793 { 3769 {
3794 if (isContextLost() || !validateHTMLCanvasElement("texSubImage2D", canvas, e xceptionState) 3770 if (isContextLost() || !validateHTMLCanvasElement("texSubImage2D", canvas, e xceptionState)
3795 || !validateTexFunc("texSubImage2D", TexSubImage2D, SourceHTMLCanvasElem ent, target, level, format, canvas->width(), canvas->height(), 0, format, type, xoffset, yoffset)) 3771 || !validateTexFunc("texSubImage2D", TexSubImage2D, SourceHTMLCanvasElem ent, target, level, format, canvas->width(), canvas->height(), 0, format, type, xoffset, yoffset))
3796 return; 3772 return;
3797 3773
3798 RefPtrWillBeRawPtr<ImageData> imageData = canvas->getImageData(); 3774 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, canvas->cop iedImage(HTMLCanvasElement::Back), WebGLImageConversion::HtmlDomCanvas, m_unpack FlipY, m_unpackPremultiplyAlpha, exceptionState);
3799 if (imageData)
3800 texSubImage2D(target, level, xoffset, yoffset, format, type, imageData.g et(), exceptionState);
3801 else
3802 texSubImage2DImpl(target, level, xoffset, yoffset, format, type, canvas- >copiedImage(), WebGLImageConversion::HtmlDomCanvas, m_unpackFlipY, m_unpackPrem ultiplyAlpha, exceptionState);
3803 } 3775 }
3804 3776
3805 void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, 3777 void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
3806 GLenum format, GLenum type, HTMLVideoElement* video, ExceptionState& excepti onState) 3778 GLenum format, GLenum type, HTMLVideoElement* video, ExceptionState& excepti onState)
3807 { 3779 {
3808 if (isContextLost() || !validateHTMLVideoElement("texSubImage2D", video, exc eptionState) 3780 if (isContextLost() || !validateHTMLVideoElement("texSubImage2D", video, exc eptionState)
3809 || !validateTexFunc("texSubImage2D", TexSubImage2D, SourceHTMLVideoEleme nt, target, level, format, video->videoWidth(), video->videoHeight(), 0, format, type, xoffset, yoffset)) 3781 || !validateTexFunc("texSubImage2D", TexSubImage2D, SourceHTMLVideoEleme nt, target, level, format, video->videoWidth(), video->videoHeight(), 0, format, type, xoffset, yoffset))
3810 return; 3782 return;
3811 3783
3812 RefPtr<Image> image = videoFrameToImage(video, ImageBuffer::fastCopyImageMod e()); 3784 RefPtr<Image> image = videoFrameToImage(video, ImageBuffer::fastCopyImageMod e());
(...skipping 1993 matching lines...) Expand 10 before | Expand all | Expand 10 after
5806 return m_sharedWebGraphicsContext3D ? m_sharedWebGraphicsContext3D->drawingB uffer() : 0; 5778 return m_sharedWebGraphicsContext3D ? m_sharedWebGraphicsContext3D->drawingB uffer() : 0;
5807 } 5779 }
5808 #else 5780 #else
5809 DrawingBuffer* WebGLRenderingContextBase::drawingBuffer() const 5781 DrawingBuffer* WebGLRenderingContextBase::drawingBuffer() const
5810 { 5782 {
5811 return m_drawingBuffer.get(); 5783 return m_drawingBuffer.get();
5812 } 5784 }
5813 #endif 5785 #endif
5814 5786
5815 } // namespace blink 5787 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698