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

Side by Side Diff: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 2365653005: Fix failing transferToImageBitmap layout tests and commit pixel test on Mac (Closed)
Patch Set: remove es3 tests Created 4 years, 2 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) 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 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 , m_version(version) 961 , m_version(version)
962 { 962 {
963 ASSERT(contextProvider); 963 ASSERT(contextProvider);
964 964
965 m_contextGroup = WebGLContextGroup::create(); 965 m_contextGroup = WebGLContextGroup::create();
966 m_contextGroup->addContext(this); 966 m_contextGroup->addContext(this);
967 967
968 m_maxViewportDims[0] = m_maxViewportDims[1] = 0; 968 m_maxViewportDims[0] = m_maxViewportDims[1] = 0;
969 contextProvider->contextGL()->GetIntegerv(GL_MAX_VIEWPORT_DIMS, m_maxViewpor tDims); 969 contextProvider->contextGL()->GetIntegerv(GL_MAX_VIEWPORT_DIMS, m_maxViewpor tDims);
970 970
971 RefPtr<DrawingBuffer> buffer = createDrawingBuffer(std::move(contextProvider )); 971 RefPtr<DrawingBuffer> buffer;
972 if (passedOffscreenCanvas)
973 buffer = createDrawingBuffer(std::move(contextProvider), DrawingBuffer:: DisallowChromiumImage);
974 else
975 buffer = createDrawingBuffer(std::move(contextProvider), DrawingBuffer:: AllowChromiumImage);
972 if (!buffer) { 976 if (!buffer) {
973 m_contextLostMode = SyntheticLostContext; 977 m_contextLostMode = SyntheticLostContext;
974 return; 978 return;
975 } 979 }
976 980
977 m_drawingBuffer = buffer.release(); 981 m_drawingBuffer = buffer.release();
978 m_drawingBuffer->addNewMailboxCallback(WTF::bind(&WebGLRenderingContextBase: :notifyCanvasContextChanged, wrapWeakPersistent(this))); 982 m_drawingBuffer->addNewMailboxCallback(WTF::bind(&WebGLRenderingContextBase: :notifyCanvasContextChanged, wrapWeakPersistent(this)));
979 drawingBuffer()->bind(GL_FRAMEBUFFER); 983 drawingBuffer()->bind(GL_FRAMEBUFFER);
980 setupFlags(); 984 setupFlags();
981 985
982 #define ADD_VALUES_TO_SET(set, values) \ 986 #define ADD_VALUES_TO_SET(set, values) \
983 for (size_t i = 0; i < WTF_ARRAY_LENGTH(values); ++i) { \ 987 for (size_t i = 0; i < WTF_ARRAY_LENGTH(values); ++i) { \
984 set.insert(values[i]); \ 988 set.insert(values[i]); \
985 } 989 }
986 990
987 ADD_VALUES_TO_SET(m_supportedInternalFormats, kSupportedInternalFormatsES2); 991 ADD_VALUES_TO_SET(m_supportedInternalFormats, kSupportedInternalFormatsES2);
988 ADD_VALUES_TO_SET(m_supportedInternalFormatsCopyTexImage, kSupportedInternal FormatsES2); 992 ADD_VALUES_TO_SET(m_supportedInternalFormatsCopyTexImage, kSupportedInternal FormatsES2);
989 ADD_VALUES_TO_SET(m_supportedFormats, kSupportedFormatsES2); 993 ADD_VALUES_TO_SET(m_supportedFormats, kSupportedFormatsES2);
990 ADD_VALUES_TO_SET(m_supportedTypes, kSupportedTypesES2); 994 ADD_VALUES_TO_SET(m_supportedTypes, kSupportedTypesES2);
991 } 995 }
992 996
993 PassRefPtr<DrawingBuffer> WebGLRenderingContextBase::createDrawingBuffer(std::un ique_ptr<WebGraphicsContext3DProvider> contextProvider) 997 PassRefPtr<DrawingBuffer> WebGLRenderingContextBase::createDrawingBuffer(std::un ique_ptr<WebGraphicsContext3DProvider> contextProvider, DrawingBuffer::ChromiumI mageUsage chromiumImageUsage)
994 { 998 {
995 bool premultipliedAlpha = creationAttributes().premultipliedAlpha(); 999 bool premultipliedAlpha = creationAttributes().premultipliedAlpha();
996 bool wantAlphaChannel = creationAttributes().alpha(); 1000 bool wantAlphaChannel = creationAttributes().alpha();
997 bool wantDepthBuffer = creationAttributes().depth(); 1001 bool wantDepthBuffer = creationAttributes().depth();
998 bool wantStencilBuffer = creationAttributes().stencil(); 1002 bool wantStencilBuffer = creationAttributes().stencil();
999 bool wantAntialiasing = creationAttributes().antialias(); 1003 bool wantAntialiasing = creationAttributes().antialias();
1000 DrawingBuffer::PreserveDrawingBuffer preserve = creationAttributes().preserv eDrawingBuffer() ? DrawingBuffer::Preserve : DrawingBuffer::Discard; 1004 DrawingBuffer::PreserveDrawingBuffer preserve = creationAttributes().preserv eDrawingBuffer() ? DrawingBuffer::Preserve : DrawingBuffer::Discard;
1001 DrawingBuffer::WebGLVersion webGLVersion = DrawingBuffer::WebGL1; 1005 DrawingBuffer::WebGLVersion webGLVersion = DrawingBuffer::WebGL1;
1002 if (version() == 1) { 1006 if (version() == 1) {
1003 webGLVersion = DrawingBuffer::WebGL1; 1007 webGLVersion = DrawingBuffer::WebGL1;
1004 } else if (version() == 2) { 1008 } else if (version() == 2) {
1005 webGLVersion = DrawingBuffer::WebGL2; 1009 webGLVersion = DrawingBuffer::WebGL2;
1006 } else { 1010 } else {
1007 NOTREACHED(); 1011 NOTREACHED();
1008 } 1012 }
1009 return DrawingBuffer::create( 1013 return DrawingBuffer::create(
1010 std::move(contextProvider), 1014 std::move(contextProvider),
1011 clampedCanvasSize(), 1015 clampedCanvasSize(),
1012 premultipliedAlpha, 1016 premultipliedAlpha,
1013 wantAlphaChannel, 1017 wantAlphaChannel,
1014 wantDepthBuffer, 1018 wantDepthBuffer,
1015 wantStencilBuffer, 1019 wantStencilBuffer,
1016 wantAntialiasing, 1020 wantAntialiasing,
1017 preserve, 1021 preserve,
1018 webGLVersion); 1022 webGLVersion,
1023 chromiumImageUsage);
1019 } 1024 }
1020 1025
1021 void WebGLRenderingContextBase::initializeNewContext() 1026 void WebGLRenderingContextBase::initializeNewContext()
1022 { 1027 {
1023 ASSERT(!isContextLost()); 1028 ASSERT(!isContextLost());
1024 ASSERT(drawingBuffer()); 1029 ASSERT(drawingBuffer());
1025 1030
1026 m_markedCanvasDirty = false; 1031 m_markedCanvasDirty = false;
1027 m_activeTextureUnit = 0; 1032 m_activeTextureUnit = 0;
1028 m_packAlignment = 4; 1033 m_packAlignment = 4;
(...skipping 5141 matching lines...) Expand 10 before | Expand all | Expand 10 after
6170 m_drawingBuffer.clear(); 6175 m_drawingBuffer.clear();
6171 } 6176 }
6172 6177
6173 Platform::ContextAttributes attributes = toPlatformContextAttributes(creatio nAttributes(), version()); 6178 Platform::ContextAttributes attributes = toPlatformContextAttributes(creatio nAttributes(), version());
6174 Platform::GraphicsInfo glInfo; 6179 Platform::GraphicsInfo glInfo;
6175 std::unique_ptr<WebGraphicsContext3DProvider> contextProvider = wrapUnique(P latform::current()->createOffscreenGraphicsContext3DProvider( 6180 std::unique_ptr<WebGraphicsContext3DProvider> contextProvider = wrapUnique(P latform::current()->createOffscreenGraphicsContext3DProvider(
6176 attributes, canvas()->document().topDocument().url(), 0, &glInfo)); 6181 attributes, canvas()->document().topDocument().url(), 0, &glInfo));
6177 RefPtr<DrawingBuffer> buffer; 6182 RefPtr<DrawingBuffer> buffer;
6178 if (contextProvider && contextProvider->bindToCurrentThread()) { 6183 if (contextProvider && contextProvider->bindToCurrentThread()) {
6179 // Construct a new drawing buffer with the new GL context. 6184 // Construct a new drawing buffer with the new GL context.
6180 buffer = createDrawingBuffer(std::move(contextProvider)); 6185 buffer = createDrawingBuffer(std::move(contextProvider), DrawingBuffer:: AllowChromiumImage);
Ken Russell (switch to Gerrit) 2016/09/26 21:47:19 Is this correct in all cases, or does the context
6181 // If DrawingBuffer::create() fails to allocate a fbo, |drawingBuffer| i s set to null. 6186 // If DrawingBuffer::create() fails to allocate a fbo, |drawingBuffer| i s set to null.
6182 } 6187 }
6183 if (!buffer) { 6188 if (!buffer) {
6184 if (m_contextLostMode == RealLostContext) { 6189 if (m_contextLostMode == RealLostContext) {
6185 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, BLINK_FRO M_HERE); 6190 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, BLINK_FRO M_HERE);
6186 } else { 6191 } else {
6187 // This likely shouldn't happen but is the best way to report it to the WebGL app. 6192 // This likely shouldn't happen but is the best way to report it to the WebGL app.
6188 synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context "); 6193 synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context ");
6189 } 6194 }
6190 return; 6195 return;
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
6473 6478
6474 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas(HTMLCanvasElementOrOffs creenCanvas& result) const 6479 void WebGLRenderingContextBase::getHTMLOrOffscreenCanvas(HTMLCanvasElementOrOffs creenCanvas& result) const
6475 { 6480 {
6476 if (canvas()) 6481 if (canvas())
6477 result.setHTMLCanvasElement(canvas()); 6482 result.setHTMLCanvasElement(canvas());
6478 else 6483 else
6479 result.setOffscreenCanvas(getOffscreenCanvas()); 6484 result.setOffscreenCanvas(getOffscreenCanvas());
6480 } 6485 }
6481 6486
6482 } // namespace blink 6487 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698