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 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 PassOwnPtr<WebGLRenderingContext> WebGLRenderingContext::create(HTMLCanvasElemen
t* canvas, WebGLContextAttributes* attrs) | 517 PassOwnPtr<WebGLRenderingContext> WebGLRenderingContext::create(HTMLCanvasElemen
t* canvas, WebGLContextAttributes* attrs) |
518 { | 518 { |
519 Document& document = canvas->document(); | 519 Document& document = canvas->document(); |
520 Frame* frame = document.frame(); | 520 Frame* frame = document.frame(); |
521 if (!frame) | 521 if (!frame) |
522 return nullptr; | 522 return nullptr; |
523 Settings* settings = frame->settings(); | 523 Settings* settings = frame->settings(); |
524 | 524 |
525 // The FrameLoaderClient might block creation of a new WebGL context despite
the page settings; in | 525 // The FrameLoaderClient might block creation of a new WebGL context despite
the page settings; in |
526 // particular, if WebGL contexts were lost one or more times via the GL_ARB_
robustness extension. | 526 // particular, if WebGL contexts were lost one or more times via the GL_ARB_
robustness extension. |
527 if (!frame->loader()->client()->allowWebGL(settings && settings->webGLEnable
d())) { | 527 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled
())) { |
528 canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcon
textcreationerror, false, true, "Web page was not allowed to create a WebGL cont
ext.")); | 528 canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcon
textcreationerror, false, true, "Web page was not allowed to create a WebGL cont
ext.")); |
529 return nullptr; | 529 return nullptr; |
530 } | 530 } |
531 | 531 |
532 GraphicsContext3D::Attributes requestedAttributes = attrs ? attrs->attribute
s() : GraphicsContext3D::Attributes(); | 532 GraphicsContext3D::Attributes requestedAttributes = attrs ? attrs->attribute
s() : GraphicsContext3D::Attributes(); |
533 requestedAttributes.noExtensions = true; | 533 requestedAttributes.noExtensions = true; |
534 requestedAttributes.shareResources = true; | 534 requestedAttributes.shareResources = true; |
535 requestedAttributes.preferDiscreteGPU = true; | 535 requestedAttributes.preferDiscreteGPU = true; |
536 requestedAttributes.topDocumentURL = document.topDocument()->url(); | 536 requestedAttributes.topDocumentURL = document.topDocument()->url(); |
537 | 537 |
(...skipping 3612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4150 if (isContextLost()) | 4150 if (isContextLost()) |
4151 return; | 4151 return; |
4152 | 4152 |
4153 m_contextLost = true; | 4153 m_contextLost = true; |
4154 m_contextLostMode = mode; | 4154 m_contextLostMode = mode; |
4155 | 4155 |
4156 if (mode == RealLostContext) { | 4156 if (mode == RealLostContext) { |
4157 // Inform the embedder that a lost context was received. In response, th
e embedder might | 4157 // Inform the embedder that a lost context was received. In response, th
e embedder might |
4158 // decide to take action such as asking the user for permission to use W
ebGL again. | 4158 // decide to take action such as asking the user for permission to use W
ebGL again. |
4159 if (Frame* frame = canvas()->document().frame()) | 4159 if (Frame* frame = canvas()->document().frame()) |
4160 frame->loader()->client()->didLoseWebGLContext(m_context->extensions
()->getGraphicsResetStatusARB()); | 4160 frame->loader().client()->didLoseWebGLContext(m_context->extensions(
)->getGraphicsResetStatusARB()); |
4161 } | 4161 } |
4162 | 4162 |
4163 // Make absolutely sure we do not refer to an already-deleted texture or fra
mebuffer. | 4163 // Make absolutely sure we do not refer to an already-deleted texture or fra
mebuffer. |
4164 m_drawingBuffer->setTexture2DBinding(0); | 4164 m_drawingBuffer->setTexture2DBinding(0); |
4165 m_drawingBuffer->setFramebufferBinding(0); | 4165 m_drawingBuffer->setFramebufferBinding(0); |
4166 | 4166 |
4167 detachAndRemoveAllObjects(); | 4167 detachAndRemoveAllObjects(); |
4168 | 4168 |
4169 // Lose all the extensions. | 4169 // Lose all the extensions. |
4170 for (size_t i = 0; i < m_extensions.size(); ++i) { | 4170 for (size_t i = 0; i < m_extensions.size(); ++i) { |
(...skipping 1211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5382 // the retry loop for real context lost events. | 5382 // the retry loop for real context lost events. |
5383 if (!m_restoreAllowed) | 5383 if (!m_restoreAllowed) |
5384 return; | 5384 return; |
5385 | 5385 |
5386 Frame* frame = canvas()->document().frame(); | 5386 Frame* frame = canvas()->document().frame(); |
5387 if (!frame) | 5387 if (!frame) |
5388 return; | 5388 return; |
5389 | 5389 |
5390 Settings* settings = frame->settings(); | 5390 Settings* settings = frame->settings(); |
5391 | 5391 |
5392 if (!frame->loader()->client()->allowWebGL(settings && settings->webGLEnable
d())) | 5392 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled
())) |
5393 return; | 5393 return; |
5394 | 5394 |
5395 // Reset the context attributes back to the requested attributes and re-appl
y restrictions | 5395 // Reset the context attributes back to the requested attributes and re-appl
y restrictions |
5396 m_attributes = adjustAttributes(m_requestedAttributes, settings); | 5396 m_attributes = adjustAttributes(m_requestedAttributes, settings); |
5397 | 5397 |
5398 RefPtr<GraphicsContext3D> context(GraphicsContext3D::create(m_attributes)); | 5398 RefPtr<GraphicsContext3D> context(GraphicsContext3D::create(m_attributes)); |
5399 | 5399 |
5400 if (!context) { | 5400 if (!context) { |
5401 if (m_contextLostMode == RealLostContext) | 5401 if (m_contextLostMode == RealLostContext) |
5402 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts); | 5402 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts); |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5615 if (m_textureUnits[i].m_texture2DBinding | 5615 if (m_textureUnits[i].m_texture2DBinding |
5616 || m_textureUnits[i].m_textureCubeMapBinding) { | 5616 || m_textureUnits[i].m_textureCubeMapBinding) { |
5617 m_onePlusMaxNonDefaultTextureUnit = i + 1; | 5617 m_onePlusMaxNonDefaultTextureUnit = i + 1; |
5618 return; | 5618 return; |
5619 } | 5619 } |
5620 } | 5620 } |
5621 m_onePlusMaxNonDefaultTextureUnit = 0; | 5621 m_onePlusMaxNonDefaultTextureUnit = 0; |
5622 } | 5622 } |
5623 | 5623 |
5624 } // namespace WebCore | 5624 } // namespace WebCore |
OLD | NEW |