Skip to content
This repository was archived by the owner on Jun 24, 2022. It is now read-only.

Commit 4b0f13d

Browse files
An unresolved WebGL Context should operate normally until used
https://bugs.webkit.org/show_bug.cgi?id=129110 Reviewed by Brent Fulgham. Add the ability to create a special instance of WebGLRenderingContext, that appears normal but won't actually do anything if asked. This will be created in the case of the WebGLLoadPolicy being "pending" and helps in the case of pages that feature detect by creating a context and immediately deleting it. Note that the context doesn't actually try to recover from this state yet, although that would be a nice addition. When asked to do something it could actually try to create the GraphicsContext3D. However, if it fails it would then have to fire a context lost. * html/HTMLCanvasElement.cpp: (WebCore::HTMLCanvasElement::getContext): Move the load policy code out of getContext. * html/canvas/WebGLRenderingContext.cpp: (WebCore::WebGLRenderingContext::create): Add the ability to create a pending context. (WebCore::WebGLRenderingContext::WebGLRenderingContext): New constructor for a pending context. (WebCore::WebGLRenderingContext::~WebGLRenderingContext): Only delete if not pending. (WebCore::WebGLRenderingContext::destroyGraphicsContext3D): Ditto. (WebCore::WebGLRenderingContext::clearIfComposited): Everything below is about checking the pending state before doing anything, and triggering a resolution if necessary. (WebCore::WebGLRenderingContext::activeTexture): (WebCore::WebGLRenderingContext::attachShader): (WebCore::WebGLRenderingContext::bindAttribLocation): (WebCore::WebGLRenderingContext::checkObjectToBeBound): (WebCore::WebGLRenderingContext::blendColor): (WebCore::WebGLRenderingContext::blendEquation): (WebCore::WebGLRenderingContext::blendEquationSeparate): (WebCore::WebGLRenderingContext::blendFunc): (WebCore::WebGLRenderingContext::blendFuncSeparate): (WebCore::WebGLRenderingContext::bufferData): (WebCore::WebGLRenderingContext::bufferSubData): (WebCore::WebGLRenderingContext::checkFramebufferStatus): (WebCore::WebGLRenderingContext::clear): (WebCore::WebGLRenderingContext::clearColor): (WebCore::WebGLRenderingContext::clearDepth): (WebCore::WebGLRenderingContext::clearStencil): (WebCore::WebGLRenderingContext::colorMask): (WebCore::WebGLRenderingContext::compileShader): (WebCore::WebGLRenderingContext::compressedTexImage2D): (WebCore::WebGLRenderingContext::compressedTexSubImage2D): (WebCore::WebGLRenderingContext::copyTexImage2D): (WebCore::WebGLRenderingContext::copyTexSubImage2D): (WebCore::WebGLRenderingContext::createBuffer): (WebCore::WebGLRenderingContext::createFramebuffer): (WebCore::WebGLRenderingContext::createTexture): (WebCore::WebGLRenderingContext::createProgram): (WebCore::WebGLRenderingContext::createRenderbuffer): (WebCore::WebGLRenderingContext::createShader): (WebCore::WebGLRenderingContext::cullFace): (WebCore::WebGLRenderingContext::deleteObject): (WebCore::WebGLRenderingContext::depthFunc): (WebCore::WebGLRenderingContext::depthMask): (WebCore::WebGLRenderingContext::depthRange): (WebCore::WebGLRenderingContext::detachShader): (WebCore::WebGLRenderingContext::disable): (WebCore::WebGLRenderingContext::disableVertexAttribArray): (WebCore::WebGLRenderingContext::validateDrawArrays): (WebCore::WebGLRenderingContext::validateDrawElements): (WebCore::WebGLRenderingContext::enable): (WebCore::WebGLRenderingContext::enableVertexAttribArray): (WebCore::WebGLRenderingContext::finish): (WebCore::WebGLRenderingContext::flush): (WebCore::WebGLRenderingContext::framebufferRenderbuffer): (WebCore::WebGLRenderingContext::framebufferTexture2D): (WebCore::WebGLRenderingContext::frontFace): (WebCore::WebGLRenderingContext::generateMipmap): (WebCore::WebGLRenderingContext::getActiveAttrib): (WebCore::WebGLRenderingContext::getActiveUniform): (WebCore::WebGLRenderingContext::getAttachedShaders): (WebCore::WebGLRenderingContext::getAttribLocation): (WebCore::WebGLRenderingContext::getBufferParameter): (WebCore::WebGLRenderingContext::getContextAttributes): (WebCore::WebGLRenderingContext::getExtension): (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): (WebCore::WebGLRenderingContext::getParameter): (WebCore::WebGLRenderingContext::getProgramParameter): (WebCore::WebGLRenderingContext::getProgramInfoLog): (WebCore::WebGLRenderingContext::getRenderbufferParameter): (WebCore::WebGLRenderingContext::getShaderParameter): (WebCore::WebGLRenderingContext::getShaderInfoLog): (WebCore::WebGLRenderingContext::getShaderPrecisionFormat): (WebCore::WebGLRenderingContext::getShaderSource): (WebCore::WebGLRenderingContext::getTexParameter): (WebCore::WebGLRenderingContext::getUniform): (WebCore::WebGLRenderingContext::getUniformLocation): (WebCore::WebGLRenderingContext::getVertexAttrib): (WebCore::WebGLRenderingContext::getVertexAttribOffset): (WebCore::WebGLRenderingContext::hint): (WebCore::WebGLRenderingContext::isBuffer): (WebCore::WebGLRenderingContext::isContextLostOrPending): (WebCore::WebGLRenderingContext::isEnabled): (WebCore::WebGLRenderingContext::isFramebuffer): (WebCore::WebGLRenderingContext::isProgram): (WebCore::WebGLRenderingContext::isRenderbuffer): (WebCore::WebGLRenderingContext::isShader): (WebCore::WebGLRenderingContext::isTexture): (WebCore::WebGLRenderingContext::lineWidth): (WebCore::WebGLRenderingContext::linkProgram): (WebCore::WebGLRenderingContext::pixelStorei): (WebCore::WebGLRenderingContext::polygonOffset): (WebCore::WebGLRenderingContext::readPixels): (WebCore::WebGLRenderingContext::releaseShaderCompiler): (WebCore::WebGLRenderingContext::renderbufferStorage): (WebCore::WebGLRenderingContext::sampleCoverage): (WebCore::WebGLRenderingContext::scissor): (WebCore::WebGLRenderingContext::shaderSource): (WebCore::WebGLRenderingContext::stencilFunc): (WebCore::WebGLRenderingContext::stencilFuncSeparate): (WebCore::WebGLRenderingContext::stencilMask): (WebCore::WebGLRenderingContext::stencilMaskSeparate): (WebCore::WebGLRenderingContext::stencilOp): (WebCore::WebGLRenderingContext::stencilOpSeparate): (WebCore::WebGLRenderingContext::texImage2D): (WebCore::WebGLRenderingContext::texParameter): (WebCore::WebGLRenderingContext::texSubImage2D): (WebCore::WebGLRenderingContext::uniform1f): (WebCore::WebGLRenderingContext::uniform1fv): (WebCore::WebGLRenderingContext::uniform1i): (WebCore::WebGLRenderingContext::uniform1iv): (WebCore::WebGLRenderingContext::uniform2f): (WebCore::WebGLRenderingContext::uniform2fv): (WebCore::WebGLRenderingContext::uniform2i): (WebCore::WebGLRenderingContext::uniform2iv): (WebCore::WebGLRenderingContext::uniform3f): (WebCore::WebGLRenderingContext::uniform3fv): (WebCore::WebGLRenderingContext::uniform3i): (WebCore::WebGLRenderingContext::uniform3iv): (WebCore::WebGLRenderingContext::uniform4f): (WebCore::WebGLRenderingContext::uniform4fv): (WebCore::WebGLRenderingContext::uniform4i): (WebCore::WebGLRenderingContext::uniform4iv): (WebCore::WebGLRenderingContext::uniformMatrix2fv): (WebCore::WebGLRenderingContext::uniformMatrix3fv): (WebCore::WebGLRenderingContext::uniformMatrix4fv): (WebCore::WebGLRenderingContext::validateProgram): (WebCore::WebGLRenderingContext::vertexAttribPointer): (WebCore::WebGLRenderingContext::viewport): (WebCore::WebGLRenderingContext::forceLostContext): (WebCore::WebGLRenderingContext::forceRestoreContext): (WebCore::WebGLRenderingContext::platformLayer): (WebCore::WebGLRenderingContext::removeSharedObject): (WebCore::WebGLRenderingContext::addSharedObject): (WebCore::WebGLRenderingContext::removeContextObject): (WebCore::WebGLRenderingContext::addContextObject): (WebCore::WebGLRenderingContext::detachAndRemoveAllObjects): (WebCore::WebGLRenderingContext::stop): (WebCore::WebGLRenderingContext::vertexAttribfImpl): (WebCore::WebGLRenderingContext::vertexAttribfvImpl): (WebCore::WebGLRenderingContext::vertexAttribDivisor): * html/canvas/WebGLRenderingContext.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@164452 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 04aa8f9 commit 4b0f13d

File tree

4 files changed

+404
-162
lines changed

4 files changed

+404
-162
lines changed

Source/WebCore/ChangeLog

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,161 @@
1+
2014-02-20 Dean Jackson <[email protected]>
2+
3+
An unresolved WebGL Context should operate normally until used
4+
https://bugs.webkit.org/show_bug.cgi?id=129110
5+
6+
Reviewed by Brent Fulgham.
7+
8+
Add the ability to create a special instance of WebGLRenderingContext,
9+
that appears normal but won't actually do anything if asked. This will
10+
be created in the case of the WebGLLoadPolicy being "pending" and helps
11+
in the case of pages that feature detect by creating a context and
12+
immediately deleting it.
13+
14+
Note that the context doesn't actually try to recover from this state
15+
yet, although that would be a nice addition. When asked to do something
16+
it could actually try to create the GraphicsContext3D. However, if it
17+
fails it would then have to fire a context lost.
18+
19+
* html/HTMLCanvasElement.cpp:
20+
(WebCore::HTMLCanvasElement::getContext): Move the load policy code out of getContext.
21+
* html/canvas/WebGLRenderingContext.cpp:
22+
(WebCore::WebGLRenderingContext::create): Add the ability to create a pending context.
23+
(WebCore::WebGLRenderingContext::WebGLRenderingContext): New constructor for a pending context.
24+
(WebCore::WebGLRenderingContext::~WebGLRenderingContext): Only delete if not pending.
25+
(WebCore::WebGLRenderingContext::destroyGraphicsContext3D): Ditto.
26+
(WebCore::WebGLRenderingContext::clearIfComposited): Everything below is about checking the
27+
pending state before doing anything, and triggering a resolution if necessary.
28+
(WebCore::WebGLRenderingContext::activeTexture):
29+
(WebCore::WebGLRenderingContext::attachShader):
30+
(WebCore::WebGLRenderingContext::bindAttribLocation):
31+
(WebCore::WebGLRenderingContext::checkObjectToBeBound):
32+
(WebCore::WebGLRenderingContext::blendColor):
33+
(WebCore::WebGLRenderingContext::blendEquation):
34+
(WebCore::WebGLRenderingContext::blendEquationSeparate):
35+
(WebCore::WebGLRenderingContext::blendFunc):
36+
(WebCore::WebGLRenderingContext::blendFuncSeparate):
37+
(WebCore::WebGLRenderingContext::bufferData):
38+
(WebCore::WebGLRenderingContext::bufferSubData):
39+
(WebCore::WebGLRenderingContext::checkFramebufferStatus):
40+
(WebCore::WebGLRenderingContext::clear):
41+
(WebCore::WebGLRenderingContext::clearColor):
42+
(WebCore::WebGLRenderingContext::clearDepth):
43+
(WebCore::WebGLRenderingContext::clearStencil):
44+
(WebCore::WebGLRenderingContext::colorMask):
45+
(WebCore::WebGLRenderingContext::compileShader):
46+
(WebCore::WebGLRenderingContext::compressedTexImage2D):
47+
(WebCore::WebGLRenderingContext::compressedTexSubImage2D):
48+
(WebCore::WebGLRenderingContext::copyTexImage2D):
49+
(WebCore::WebGLRenderingContext::copyTexSubImage2D):
50+
(WebCore::WebGLRenderingContext::createBuffer):
51+
(WebCore::WebGLRenderingContext::createFramebuffer):
52+
(WebCore::WebGLRenderingContext::createTexture):
53+
(WebCore::WebGLRenderingContext::createProgram):
54+
(WebCore::WebGLRenderingContext::createRenderbuffer):
55+
(WebCore::WebGLRenderingContext::createShader):
56+
(WebCore::WebGLRenderingContext::cullFace):
57+
(WebCore::WebGLRenderingContext::deleteObject):
58+
(WebCore::WebGLRenderingContext::depthFunc):
59+
(WebCore::WebGLRenderingContext::depthMask):
60+
(WebCore::WebGLRenderingContext::depthRange):
61+
(WebCore::WebGLRenderingContext::detachShader):
62+
(WebCore::WebGLRenderingContext::disable):
63+
(WebCore::WebGLRenderingContext::disableVertexAttribArray):
64+
(WebCore::WebGLRenderingContext::validateDrawArrays):
65+
(WebCore::WebGLRenderingContext::validateDrawElements):
66+
(WebCore::WebGLRenderingContext::enable):
67+
(WebCore::WebGLRenderingContext::enableVertexAttribArray):
68+
(WebCore::WebGLRenderingContext::finish):
69+
(WebCore::WebGLRenderingContext::flush):
70+
(WebCore::WebGLRenderingContext::framebufferRenderbuffer):
71+
(WebCore::WebGLRenderingContext::framebufferTexture2D):
72+
(WebCore::WebGLRenderingContext::frontFace):
73+
(WebCore::WebGLRenderingContext::generateMipmap):
74+
(WebCore::WebGLRenderingContext::getActiveAttrib):
75+
(WebCore::WebGLRenderingContext::getActiveUniform):
76+
(WebCore::WebGLRenderingContext::getAttachedShaders):
77+
(WebCore::WebGLRenderingContext::getAttribLocation):
78+
(WebCore::WebGLRenderingContext::getBufferParameter):
79+
(WebCore::WebGLRenderingContext::getContextAttributes):
80+
(WebCore::WebGLRenderingContext::getExtension):
81+
(WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
82+
(WebCore::WebGLRenderingContext::getParameter):
83+
(WebCore::WebGLRenderingContext::getProgramParameter):
84+
(WebCore::WebGLRenderingContext::getProgramInfoLog):
85+
(WebCore::WebGLRenderingContext::getRenderbufferParameter):
86+
(WebCore::WebGLRenderingContext::getShaderParameter):
87+
(WebCore::WebGLRenderingContext::getShaderInfoLog):
88+
(WebCore::WebGLRenderingContext::getShaderPrecisionFormat):
89+
(WebCore::WebGLRenderingContext::getShaderSource):
90+
(WebCore::WebGLRenderingContext::getTexParameter):
91+
(WebCore::WebGLRenderingContext::getUniform):
92+
(WebCore::WebGLRenderingContext::getUniformLocation):
93+
(WebCore::WebGLRenderingContext::getVertexAttrib):
94+
(WebCore::WebGLRenderingContext::getVertexAttribOffset):
95+
(WebCore::WebGLRenderingContext::hint):
96+
(WebCore::WebGLRenderingContext::isBuffer):
97+
(WebCore::WebGLRenderingContext::isContextLostOrPending):
98+
(WebCore::WebGLRenderingContext::isEnabled):
99+
(WebCore::WebGLRenderingContext::isFramebuffer):
100+
(WebCore::WebGLRenderingContext::isProgram):
101+
(WebCore::WebGLRenderingContext::isRenderbuffer):
102+
(WebCore::WebGLRenderingContext::isShader):
103+
(WebCore::WebGLRenderingContext::isTexture):
104+
(WebCore::WebGLRenderingContext::lineWidth):
105+
(WebCore::WebGLRenderingContext::linkProgram):
106+
(WebCore::WebGLRenderingContext::pixelStorei):
107+
(WebCore::WebGLRenderingContext::polygonOffset):
108+
(WebCore::WebGLRenderingContext::readPixels):
109+
(WebCore::WebGLRenderingContext::releaseShaderCompiler):
110+
(WebCore::WebGLRenderingContext::renderbufferStorage):
111+
(WebCore::WebGLRenderingContext::sampleCoverage):
112+
(WebCore::WebGLRenderingContext::scissor):
113+
(WebCore::WebGLRenderingContext::shaderSource):
114+
(WebCore::WebGLRenderingContext::stencilFunc):
115+
(WebCore::WebGLRenderingContext::stencilFuncSeparate):
116+
(WebCore::WebGLRenderingContext::stencilMask):
117+
(WebCore::WebGLRenderingContext::stencilMaskSeparate):
118+
(WebCore::WebGLRenderingContext::stencilOp):
119+
(WebCore::WebGLRenderingContext::stencilOpSeparate):
120+
(WebCore::WebGLRenderingContext::texImage2D):
121+
(WebCore::WebGLRenderingContext::texParameter):
122+
(WebCore::WebGLRenderingContext::texSubImage2D):
123+
(WebCore::WebGLRenderingContext::uniform1f):
124+
(WebCore::WebGLRenderingContext::uniform1fv):
125+
(WebCore::WebGLRenderingContext::uniform1i):
126+
(WebCore::WebGLRenderingContext::uniform1iv):
127+
(WebCore::WebGLRenderingContext::uniform2f):
128+
(WebCore::WebGLRenderingContext::uniform2fv):
129+
(WebCore::WebGLRenderingContext::uniform2i):
130+
(WebCore::WebGLRenderingContext::uniform2iv):
131+
(WebCore::WebGLRenderingContext::uniform3f):
132+
(WebCore::WebGLRenderingContext::uniform3fv):
133+
(WebCore::WebGLRenderingContext::uniform3i):
134+
(WebCore::WebGLRenderingContext::uniform3iv):
135+
(WebCore::WebGLRenderingContext::uniform4f):
136+
(WebCore::WebGLRenderingContext::uniform4fv):
137+
(WebCore::WebGLRenderingContext::uniform4i):
138+
(WebCore::WebGLRenderingContext::uniform4iv):
139+
(WebCore::WebGLRenderingContext::uniformMatrix2fv):
140+
(WebCore::WebGLRenderingContext::uniformMatrix3fv):
141+
(WebCore::WebGLRenderingContext::uniformMatrix4fv):
142+
(WebCore::WebGLRenderingContext::validateProgram):
143+
(WebCore::WebGLRenderingContext::vertexAttribPointer):
144+
(WebCore::WebGLRenderingContext::viewport):
145+
(WebCore::WebGLRenderingContext::forceLostContext):
146+
(WebCore::WebGLRenderingContext::forceRestoreContext):
147+
(WebCore::WebGLRenderingContext::platformLayer):
148+
(WebCore::WebGLRenderingContext::removeSharedObject):
149+
(WebCore::WebGLRenderingContext::addSharedObject):
150+
(WebCore::WebGLRenderingContext::removeContextObject):
151+
(WebCore::WebGLRenderingContext::addContextObject):
152+
(WebCore::WebGLRenderingContext::detachAndRemoveAllObjects):
153+
(WebCore::WebGLRenderingContext::stop):
154+
(WebCore::WebGLRenderingContext::vertexAttribfImpl):
155+
(WebCore::WebGLRenderingContext::vertexAttribfvImpl):
156+
(WebCore::WebGLRenderingContext::vertexAttribDivisor):
157+
* html/canvas/WebGLRenderingContext.h:
158+
1159
2014-02-20 Dean Jackson <[email protected]>
2160

3161
Add an unresolved WebGLPolicy and an API to resolve it

Source/WebCore/html/HTMLCanvasElement.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#include "HTMLNames.h"
4343
#include "ImageData.h"
4444
#include "MIMETypeRegistry.h"
45-
#include "MainFrame.h"
4645
#include "Page.h"
4746
#include "RenderHTMLCanvas.h"
4847
#include "ScriptController.h"
@@ -221,14 +220,6 @@ CanvasRenderingContext* HTMLCanvasElement::getContext(const String& type, Canvas
221220
if (m_context && !m_context->is3d())
222221
return nullptr;
223222
if (!m_context) {
224-
Document& topDocument = document().topDocument();
225-
Page* page = topDocument.page();
226-
if (page && !topDocument.url().isLocalFile()) {
227-
WebGLLoadPolicy policy = page->mainFrame().loader().client().webGLPolicyForURL(topDocument.url());
228-
229-
if (policy == WebGLBlockCreation)
230-
return nullptr;
231-
}
232223
m_context = WebGLRenderingContext::create(this, static_cast<WebGLContextAttributes*>(attrs));
233224
if (m_context) {
234225
// Need to make sure a RenderLayer and compositing layer get created for the Canvas

0 commit comments

Comments
 (0)