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 4114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4125 for (size_t i = 0; i < m_extensions.size(); ++i) { | 4125 for (size_t i = 0; i < m_extensions.size(); ++i) { |
4126 ExtensionTracker* tracker = m_extensions[i]; | 4126 ExtensionTracker* tracker = m_extensions[i]; |
4127 tracker->loseExtension(); | 4127 tracker->loseExtension(); |
4128 } | 4128 } |
4129 | 4129 |
4130 for (size_t i = 0; i < WebGLExtensionNameCount; ++i) | 4130 for (size_t i = 0; i < WebGLExtensionNameCount; ++i) |
4131 m_extensionEnabled[i] = false; | 4131 m_extensionEnabled[i] = false; |
4132 | 4132 |
4133 removeAllCompressedTextureFormats(); | 4133 removeAllCompressedTextureFormats(); |
4134 | 4134 |
4135 if (mode != RealLostContext) | 4135 destroyContext(); |
4136 destroyContext(); | |
4137 | 4136 |
4138 ConsoleDisplayPreference display = (mode == RealLostContext) ? DisplayInCons ole: DontDisplayInConsole; | 4137 ConsoleDisplayPreference display = (mode == RealLostContext) ? DisplayInCons ole: DontDisplayInConsole; |
4139 synthesizeGLError(GC3D_CONTEXT_LOST_WEBGL, "loseContext", "context lost", di splay); | 4138 synthesizeGLError(GC3D_CONTEXT_LOST_WEBGL, "loseContext", "context lost", di splay); |
4140 | 4139 |
4141 // Don't allow restoration unless the context lost event has both been | 4140 // Don't allow restoration unless the context lost event has both been |
4142 // dispatched and its default behavior prevented. | 4141 // dispatched and its default behavior prevented. |
4143 m_restoreAllowed = false; | 4142 m_restoreAllowed = false; |
4144 | 4143 |
4145 // Always defer the dispatch of the context lost event, to implement | 4144 // Always defer the dispatch of the context lost event, to implement |
4146 // the spec behavior of queueing a task. | 4145 // the spec behavior of queueing a task. |
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5329 if (!frame) | 5328 if (!frame) |
5330 return; | 5329 return; |
5331 | 5330 |
5332 Settings* settings = frame->settings(); | 5331 Settings* settings = frame->settings(); |
5333 | 5332 |
5334 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled ())) | 5333 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled ())) |
5335 return; | 5334 return; |
5336 | 5335 |
5337 blink::WebGraphicsContext3D::Attributes attributes = m_requestedAttributes-> attributes(canvas()->document().topDocument().url().string(), settings); | 5336 blink::WebGraphicsContext3D::Attributes attributes = m_requestedAttributes-> attributes(canvas()->document().topDocument().url().string(), settings); |
5338 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr ent()->createOffscreenGraphicsContext3D(attributes)); | 5337 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr ent()->createOffscreenGraphicsContext3D(attributes)); |
5338 | |
5339 if (context) { | |
5340 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = ad optRef(new WebGLRenderingContextEvictionManager()); | |
5341 | |
5342 // Construct a new drawing buffer with the new WebGraphicsContext3D. | |
5343 m_drawingBuffer->releaseResources(); | |
5344 DrawingBuffer::PreserveDrawingBuffer preserve = m_requestedAttributes->p reserveDrawingBuffer() ? DrawingBuffer::Preserve : DrawingBuffer::Discard; | |
5345 m_drawingBuffer = DrawingBuffer::create(context.get(), clampedCanvasSize (), preserve, contextEvictionManager.release()); | |
5346 | |
5347 if (m_drawingBuffer->isZeroSized()) { | |
5348 m_drawingBuffer->releaseResources(); | |
5349 context.clear(); | |
5350 } | |
5351 } | |
5339 if (!context) { | 5352 if (!context) { |
5340 if (m_contextLostMode == RealLostContext) { | 5353 if (m_contextLostMode == RealLostContext) { |
5341 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts); | 5354 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts); |
5342 } else { | 5355 } else { |
5343 // This likely shouldn't happen but is the best way to report it to the WebGL app. | 5356 // This likely shouldn't happen but is the best way to report it to the WebGL app. |
5344 synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context "); | 5357 synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context "); |
5345 } | 5358 } |
5346 return; | 5359 return; |
5347 } | 5360 } |
5348 | 5361 |
5349 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR ef(new WebGLRenderingContextEvictionManager()); | |
5350 | |
5351 // Construct a new drawing buffer with the new WebGraphicsContext3D. | |
5352 m_drawingBuffer->releaseResources(); | |
5353 DrawingBuffer::PreserveDrawingBuffer preserve = m_requestedAttributes->prese rveDrawingBuffer() ? DrawingBuffer::Preserve : DrawingBuffer::Discard; | |
5354 m_drawingBuffer = DrawingBuffer::create(context.get(), clampedCanvasSize(), preserve, contextEvictionManager.release()); | |
5355 | |
5356 if (m_drawingBuffer->isZeroSized()) | |
5357 return; | |
dshwang
2014/03/10 18:23:31
Currently, when failing to create fbo, return here
| |
5358 | |
5359 m_drawingBuffer->bind(); | 5362 m_drawingBuffer->bind(); |
5360 | 5363 |
5361 m_lostContextErrors.clear(); | 5364 m_lostContextErrors.clear(); |
5362 | 5365 |
5363 m_context = context.release(); | 5366 m_context = context.release(); |
5364 m_contextLost = false; | 5367 m_contextLost = false; |
5365 | 5368 |
5366 setupFlags(); | 5369 setupFlags(); |
5367 initializeNewContext(); | 5370 initializeNewContext(); |
5368 canvas()->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglconte xtrestored, false, true, "")); | 5371 canvas()->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglconte xtrestored, false, true, "")); |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5555 if (m_textureUnits[i].m_texture2DBinding | 5558 if (m_textureUnits[i].m_texture2DBinding |
5556 || m_textureUnits[i].m_textureCubeMapBinding) { | 5559 || m_textureUnits[i].m_textureCubeMapBinding) { |
5557 m_onePlusMaxNonDefaultTextureUnit = i + 1; | 5560 m_onePlusMaxNonDefaultTextureUnit = i + 1; |
5558 return; | 5561 return; |
5559 } | 5562 } |
5560 } | 5563 } |
5561 m_onePlusMaxNonDefaultTextureUnit = 0; | 5564 m_onePlusMaxNonDefaultTextureUnit = 0; |
5562 } | 5565 } |
5563 | 5566 |
5564 } // namespace WebCore | 5567 } // namespace WebCore |
OLD | NEW |