| 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 4129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4140 | 4140 |
| 4141 ConsoleDisplayPreference display = (mode == RealLostContext) ? DisplayInCons
ole: DontDisplayInConsole; | 4141 ConsoleDisplayPreference display = (mode == RealLostContext) ? DisplayInCons
ole: DontDisplayInConsole; |
| 4142 synthesizeGLError(GC3D_CONTEXT_LOST_WEBGL, "loseContext", "context lost", di
splay); | 4142 synthesizeGLError(GC3D_CONTEXT_LOST_WEBGL, "loseContext", "context lost", di
splay); |
| 4143 | 4143 |
| 4144 // Don't allow restoration unless the context lost event has both been | 4144 // Don't allow restoration unless the context lost event has both been |
| 4145 // dispatched and its default behavior prevented. | 4145 // dispatched and its default behavior prevented. |
| 4146 m_restoreAllowed = false; | 4146 m_restoreAllowed = false; |
| 4147 | 4147 |
| 4148 // Always defer the dispatch of the context lost event, to implement | 4148 // Always defer the dispatch of the context lost event, to implement |
| 4149 // the spec behavior of queueing a task. | 4149 // the spec behavior of queueing a task. |
| 4150 m_dispatchContextLostEventTimer.startOneShot(0); | 4150 m_dispatchContextLostEventTimer.startOneShot(0, FROM_HERE); |
| 4151 } | 4151 } |
| 4152 | 4152 |
| 4153 void WebGLRenderingContextBase::forceRestoreContext() | 4153 void WebGLRenderingContextBase::forceRestoreContext() |
| 4154 { | 4154 { |
| 4155 if (!isContextLost()) { | 4155 if (!isContextLost()) { |
| 4156 synthesizeGLError(GL_INVALID_OPERATION, "restoreContext", "context not l
ost"); | 4156 synthesizeGLError(GL_INVALID_OPERATION, "restoreContext", "context not l
ost"); |
| 4157 return; | 4157 return; |
| 4158 } | 4158 } |
| 4159 | 4159 |
| 4160 if (!m_restoreAllowed) { | 4160 if (!m_restoreAllowed) { |
| 4161 if (m_contextLostMode == SyntheticLostContext) | 4161 if (m_contextLostMode == SyntheticLostContext) |
| 4162 synthesizeGLError(GL_INVALID_OPERATION, "restoreContext", "context r
estoration not allowed"); | 4162 synthesizeGLError(GL_INVALID_OPERATION, "restoreContext", "context r
estoration not allowed"); |
| 4163 return; | 4163 return; |
| 4164 } | 4164 } |
| 4165 | 4165 |
| 4166 if (!m_restoreTimer.isActive()) | 4166 if (!m_restoreTimer.isActive()) |
| 4167 m_restoreTimer.startOneShot(0); | 4167 m_restoreTimer.startOneShot(0, FROM_HERE); |
| 4168 } | 4168 } |
| 4169 | 4169 |
| 4170 blink::WebLayer* WebGLRenderingContextBase::platformLayer() const | 4170 blink::WebLayer* WebGLRenderingContextBase::platformLayer() const |
| 4171 { | 4171 { |
| 4172 return m_drawingBuffer->platformLayer(); | 4172 return m_drawingBuffer->platformLayer(); |
| 4173 } | 4173 } |
| 4174 | 4174 |
| 4175 Extensions3DUtil* WebGLRenderingContextBase::extensionsUtil() | 4175 Extensions3DUtil* WebGLRenderingContextBase::extensionsUtil() |
| 4176 { | 4176 { |
| 4177 if (!m_extensionsUtil) | 4177 if (!m_extensionsUtil) |
| (...skipping 1127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5305 attribValue.value[ii] = v[ii]; | 5305 attribValue.value[ii] = v[ii]; |
| 5306 } | 5306 } |
| 5307 | 5307 |
| 5308 void WebGLRenderingContextBase::dispatchContextLostEvent(Timer<WebGLRenderingCon
textBase>*) | 5308 void WebGLRenderingContextBase::dispatchContextLostEvent(Timer<WebGLRenderingCon
textBase>*) |
| 5309 { | 5309 { |
| 5310 RefPtr<WebGLContextEvent> event = WebGLContextEvent::create(EventTypeNames::
webglcontextlost, false, true, ""); | 5310 RefPtr<WebGLContextEvent> event = WebGLContextEvent::create(EventTypeNames::
webglcontextlost, false, true, ""); |
| 5311 canvas()->dispatchEvent(event); | 5311 canvas()->dispatchEvent(event); |
| 5312 m_restoreAllowed = event->defaultPrevented(); | 5312 m_restoreAllowed = event->defaultPrevented(); |
| 5313 deactivateContext(this, m_contextLostMode != RealLostContext && m_restoreAll
owed); | 5313 deactivateContext(this, m_contextLostMode != RealLostContext && m_restoreAll
owed); |
| 5314 if ((m_contextLostMode == RealLostContext || m_contextLostMode == AutoRecove
rSyntheticLostContext) && m_restoreAllowed) | 5314 if ((m_contextLostMode == RealLostContext || m_contextLostMode == AutoRecove
rSyntheticLostContext) && m_restoreAllowed) |
| 5315 m_restoreTimer.startOneShot(0); | 5315 m_restoreTimer.startOneShot(0, FROM_HERE); |
| 5316 } | 5316 } |
| 5317 | 5317 |
| 5318 void WebGLRenderingContextBase::maybeRestoreContext(Timer<WebGLRenderingContextB
ase>*) | 5318 void WebGLRenderingContextBase::maybeRestoreContext(Timer<WebGLRenderingContextB
ase>*) |
| 5319 { | 5319 { |
| 5320 ASSERT(isContextLost()); | 5320 ASSERT(isContextLost()); |
| 5321 | 5321 |
| 5322 // The rendering context is not restored unless the default behavior of the | 5322 // The rendering context is not restored unless the default behavior of the |
| 5323 // webglcontextlost event was prevented earlier. | 5323 // webglcontextlost event was prevented earlier. |
| 5324 // | 5324 // |
| 5325 // Because of the way m_restoreTimer is set up for real vs. synthetic lost | 5325 // Because of the way m_restoreTimer is set up for real vs. synthetic lost |
| 5326 // context events, we don't have to worry about this test short-circuiting | 5326 // context events, we don't have to worry about this test short-circuiting |
| 5327 // the retry loop for real context lost events. | 5327 // the retry loop for real context lost events. |
| 5328 if (!m_restoreAllowed) | 5328 if (!m_restoreAllowed) |
| 5329 return; | 5329 return; |
| 5330 | 5330 |
| 5331 LocalFrame* frame = canvas()->document().frame(); | 5331 LocalFrame* frame = canvas()->document().frame(); |
| 5332 if (!frame) | 5332 if (!frame) |
| 5333 return; | 5333 return; |
| 5334 | 5334 |
| 5335 Settings* settings = frame->settings(); | 5335 Settings* settings = frame->settings(); |
| 5336 | 5336 |
| 5337 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled
())) | 5337 if (!frame->loader().client()->allowWebGL(settings && settings->webGLEnabled
())) |
| 5338 return; | 5338 return; |
| 5339 | 5339 |
| 5340 blink::WebGraphicsContext3D::Attributes attributes = m_requestedAttributes->
attributes(canvas()->document().topDocument().url().string(), settings); | 5340 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)); | 5341 OwnPtr<blink::WebGraphicsContext3D> context = adoptPtr(blink::Platform::curr
ent()->createOffscreenGraphicsContext3D(attributes)); |
| 5342 if (!context) { | 5342 if (!context) { |
| 5343 if (m_contextLostMode == RealLostContext) { | 5343 if (m_contextLostMode == RealLostContext) { |
| 5344 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts); | 5344 m_restoreTimer.startOneShot(secondsBetweenRestoreAttempts, FROM_HERE
); |
| 5345 } else { | 5345 } else { |
| 5346 // This likely shouldn't happen but is the best way to report it to
the WebGL app. | 5346 // 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
"); | 5347 synthesizeGLError(GL_INVALID_OPERATION, "", "error restoring context
"); |
| 5348 } | 5348 } |
| 5349 return; | 5349 return; |
| 5350 } | 5350 } |
| 5351 | 5351 |
| 5352 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR
ef(new WebGLRenderingContextEvictionManager()); | 5352 RefPtr<WebGLRenderingContextEvictionManager> contextEvictionManager = adoptR
ef(new WebGLRenderingContextEvictionManager()); |
| 5353 | 5353 |
| 5354 // Construct a new drawing buffer with the new WebGraphicsContext3D. | 5354 // Construct a new drawing buffer with the new WebGraphicsContext3D. |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5558 if (m_textureUnits[i].m_texture2DBinding | 5558 if (m_textureUnits[i].m_texture2DBinding |
| 5559 || m_textureUnits[i].m_textureCubeMapBinding) { | 5559 || m_textureUnits[i].m_textureCubeMapBinding) { |
| 5560 m_onePlusMaxNonDefaultTextureUnit = i + 1; | 5560 m_onePlusMaxNonDefaultTextureUnit = i + 1; |
| 5561 return; | 5561 return; |
| 5562 } | 5562 } |
| 5563 } | 5563 } |
| 5564 m_onePlusMaxNonDefaultTextureUnit = 0; | 5564 m_onePlusMaxNonDefaultTextureUnit = 0; |
| 5565 } | 5565 } |
| 5566 | 5566 |
| 5567 } // namespace WebCore | 5567 } // namespace WebCore |
| OLD | NEW |