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

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

Issue 1387743002: Fixed expando-loss.html test. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cache ScriptState and use it to wrap m_defaultVertexArrayObject. Created 5 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 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "modules/webgl/WebGL2RenderingContextBase.h" 6 #include "modules/webgl/WebGL2RenderingContextBase.h"
7 7
8 #include "bindings/modules/v8/WebGLAny.h" 8 #include "bindings/modules/v8/WebGLAny.h"
9 #include "core/html/HTMLCanvasElement.h" 9 #include "core/html/HTMLCanvasElement.h"
10 #include "core/html/HTMLImageElement.h" 10 #include "core/html/HTMLImageElement.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 GL_COMPRESSED_RG11_EAC, 99 GL_COMPRESSED_RG11_EAC,
100 GL_COMPRESSED_SIGNED_RG11_EAC, 100 GL_COMPRESSED_SIGNED_RG11_EAC,
101 GL_COMPRESSED_RGB8_ETC2, 101 GL_COMPRESSED_RGB8_ETC2,
102 GL_COMPRESSED_SRGB8_ETC2, 102 GL_COMPRESSED_SRGB8_ETC2,
103 GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, 103 GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
104 GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 104 GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
105 GL_COMPRESSED_RGBA8_ETC2_EAC, 105 GL_COMPRESSED_RGBA8_ETC2_EAC,
106 GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 106 GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
107 }; 107 };
108 108
109 WebGL2RenderingContextBase::WebGL2RenderingContextBase(HTMLCanvasElement* passed Canvas, PassOwnPtr<WebGraphicsContext3D> context, const WebGLContextAttributes& requestedAttributes) 109 WebGL2RenderingContextBase::WebGL2RenderingContextBase(HTMLCanvasElement* passed Canvas, ScriptState* scriptState, PassOwnPtr<WebGraphicsContext3D> context, cons t WebGLContextAttributes& requestedAttributes)
110 : WebGLRenderingContextBase(passedCanvas, context, requestedAttributes) 110 : WebGLRenderingContextBase(passedCanvas, scriptState, context, requestedAtt ributes)
111 { 111 {
112 m_supportedInternalFormatsStorage.insert(kSupportedInternalFormatsStorage, k SupportedInternalFormatsStorage + arraysize(kSupportedInternalFormatsStorage)); 112 m_supportedInternalFormatsStorage.insert(kSupportedInternalFormatsStorage, k SupportedInternalFormatsStorage + arraysize(kSupportedInternalFormatsStorage));
113 } 113 }
114 114
115 WebGL2RenderingContextBase::~WebGL2RenderingContextBase() 115 WebGL2RenderingContextBase::~WebGL2RenderingContextBase()
116 { 116 {
117 m_readFramebufferBinding = nullptr; 117 m_readFramebufferBinding = nullptr;
118 118
119 m_boundCopyReadBuffer = nullptr; 119 m_boundCopyReadBuffer = nullptr;
120 m_boundCopyWriteBuffer = nullptr; 120 m_boundCopyWriteBuffer = nullptr;
(...skipping 1937 matching lines...) Expand 10 before | Expand all | Expand 10 after
2058 WebGLVertexArrayObject* WebGL2RenderingContextBase::createVertexArray() 2058 WebGLVertexArrayObject* WebGL2RenderingContextBase::createVertexArray()
2059 { 2059 {
2060 if (isContextLost()) 2060 if (isContextLost())
2061 return nullptr; 2061 return nullptr;
2062 2062
2063 WebGLVertexArrayObject* o = WebGLVertexArrayObject::create(this, WebGLVertex ArrayObjectBase::VaoTypeUser); 2063 WebGLVertexArrayObject* o = WebGLVertexArrayObject::create(this, WebGLVertex ArrayObjectBase::VaoTypeUser);
2064 addContextObject(o); 2064 addContextObject(o);
2065 return o; 2065 return o;
2066 } 2066 }
2067 2067
2068 void WebGL2RenderingContextBase::deleteVertexArray(WebGLVertexArrayObject* verte xArray) 2068 void WebGL2RenderingContextBase::deleteVertexArray(ScriptState* scriptState, Web GLVertexArrayObject* vertexArray)
2069 { 2069 {
2070 if (isContextLost() || !vertexArray) 2070 if (isContextLost() || !vertexArray)
2071 return; 2071 return;
2072 2072
2073 if (!vertexArray->isDefaultObject() && vertexArray == m_boundVertexArrayObje ct) 2073 if (!vertexArray->isDefaultObject() && vertexArray == m_boundVertexArrayObje ct)
2074 setBoundVertexArrayObject(nullptr); 2074 setBoundVertexArrayObject(scriptState, nullptr);
2075 2075
2076 vertexArray->deleteObject(webContext()); 2076 vertexArray->deleteObject(webContext());
2077 } 2077 }
2078 2078
2079 GLboolean WebGL2RenderingContextBase::isVertexArray(WebGLVertexArrayObject* vert exArray) 2079 GLboolean WebGL2RenderingContextBase::isVertexArray(WebGLVertexArrayObject* vert exArray)
2080 { 2080 {
2081 if (isContextLost() || !vertexArray) 2081 if (isContextLost() || !vertexArray)
2082 return 0; 2082 return 0;
2083 2083
2084 if (!vertexArray->hasEverBeenBound()) 2084 if (!vertexArray->hasEverBeenBound())
2085 return 0; 2085 return 0;
2086 2086
2087 return webContext()->isVertexArrayOES(vertexArray->object()); 2087 return webContext()->isVertexArrayOES(vertexArray->object());
2088 } 2088 }
2089 2089
2090 void WebGL2RenderingContextBase::bindVertexArray(WebGLVertexArrayObject* vertexA rray) 2090 void WebGL2RenderingContextBase::bindVertexArray(ScriptState* scriptState, WebGL VertexArrayObject* vertexArray)
2091 { 2091 {
2092 if (isContextLost()) 2092 if (isContextLost())
2093 return; 2093 return;
2094 2094
2095 if (vertexArray && (vertexArray->isDeleted() || !vertexArray->validate(0, th is))) { 2095 if (vertexArray && (vertexArray->isDeleted() || !vertexArray->validate(0, th is))) {
2096 webContext()->synthesizeGLError(GL_INVALID_OPERATION); 2096 webContext()->synthesizeGLError(GL_INVALID_OPERATION);
2097 return; 2097 return;
2098 } 2098 }
2099 2099
2100 if (vertexArray && !vertexArray->isDefaultObject() && vertexArray->object()) { 2100 if (vertexArray && !vertexArray->isDefaultObject() && vertexArray->object()) {
2101 webContext()->bindVertexArrayOES(objectOrZero(vertexArray)); 2101 webContext()->bindVertexArrayOES(objectOrZero(vertexArray));
2102 2102
2103 vertexArray->setHasEverBeenBound(); 2103 vertexArray->setHasEverBeenBound();
2104 setBoundVertexArrayObject(vertexArray); 2104 setBoundVertexArrayObject(scriptState, vertexArray);
2105 } else { 2105 } else {
2106 webContext()->bindVertexArrayOES(0); 2106 webContext()->bindVertexArrayOES(0);
2107 setBoundVertexArrayObject(nullptr); 2107 setBoundVertexArrayObject(scriptState, nullptr);
2108 } 2108 }
2109 } 2109 }
2110 2110
2111 void WebGL2RenderingContextBase::bindFramebuffer(GLenum target, WebGLFramebuffer * buffer) 2111 void WebGL2RenderingContextBase::bindFramebuffer(ScriptState* scriptState, GLenu m target, WebGLFramebuffer* buffer)
2112 { 2112 {
2113 bool deleted; 2113 bool deleted;
2114 if (!checkObjectToBeBound("bindFramebuffer", buffer, deleted)) 2114 if (!checkObjectToBeBound("bindFramebuffer", buffer, deleted))
2115 return; 2115 return;
2116 2116
2117 if (deleted) 2117 if (deleted)
2118 buffer = 0; 2118 buffer = 0;
2119 2119
2120 switch (target) { 2120 switch (target) {
2121 case GL_DRAW_FRAMEBUFFER: 2121 case GL_DRAW_FRAMEBUFFER:
2122 break; 2122 break;
2123 case GL_FRAMEBUFFER: 2123 case GL_FRAMEBUFFER:
2124 case GL_READ_FRAMEBUFFER: 2124 case GL_READ_FRAMEBUFFER:
2125 m_readFramebufferBinding = buffer; 2125 m_readFramebufferBinding = buffer;
2126 break; 2126 break;
2127 default: 2127 default:
2128 synthesizeGLError(GL_INVALID_ENUM, "bindFramebuffer", "invalid target"); 2128 synthesizeGLError(GL_INVALID_ENUM, "bindFramebuffer", "invalid target");
2129 return; 2129 return;
2130 } 2130 }
2131 2131
2132 setFramebuffer(target, buffer); 2132 setFramebuffer(target, buffer);
2133 if (scriptState)
2134 preserveObjectWrapper(scriptState, this, "framebuffer", 0, buffer);
2133 } 2135 }
2134 2136
2135 void WebGL2RenderingContextBase::deleteFramebuffer(WebGLFramebuffer* framebuffer ) 2137 void WebGL2RenderingContextBase::deleteFramebuffer(WebGLFramebuffer* framebuffer )
2136 { 2138 {
2137 if (!deleteObject(framebuffer)) 2139 if (!deleteObject(framebuffer))
2138 return; 2140 return;
2139 GLenum target = 0; 2141 GLenum target = 0;
2140 if (framebuffer == m_framebufferBinding) { 2142 if (framebuffer == m_framebufferBinding) {
2141 if (framebuffer == m_readFramebufferBinding) { 2143 if (framebuffer == m_readFramebufferBinding) {
2142 target = GL_FRAMEBUFFER; 2144 target = GL_FRAMEBUFFER;
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after
2940 if (m_boundTransformFeedbackBuffer == buffer) 2942 if (m_boundTransformFeedbackBuffer == buffer)
2941 m_boundTransformFeedbackBuffer = nullptr; 2943 m_boundTransformFeedbackBuffer = nullptr;
2942 if (m_boundUniformBuffer == buffer) 2944 if (m_boundUniformBuffer == buffer)
2943 m_boundUniformBuffer = nullptr; 2945 m_boundUniformBuffer = nullptr;
2944 2946
2945 WebGLRenderingContextBase::removeBoundBuffer(buffer); 2947 WebGLRenderingContextBase::removeBoundBuffer(buffer);
2946 } 2948 }
2947 2949
2948 void WebGL2RenderingContextBase::restoreCurrentFramebuffer() 2950 void WebGL2RenderingContextBase::restoreCurrentFramebuffer()
2949 { 2951 {
2950 bindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebufferBinding.get()); 2952 bindFramebuffer(nullptr, GL_DRAW_FRAMEBUFFER, m_framebufferBinding.get());
2951 bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBinding.get()); 2953 bindFramebuffer(nullptr, GL_READ_FRAMEBUFFER, m_readFramebufferBinding.get() );
haraken 2015/10/13 02:02:04 I'm wondering why we can't use m_scriptState.
2952 } 2954 }
2953 2955
2954 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat() 2956 GLenum WebGL2RenderingContextBase::boundFramebufferColorFormat()
2955 { 2957 {
2956 if (m_readFramebufferBinding && m_readFramebufferBinding->object()) 2958 if (m_readFramebufferBinding && m_readFramebufferBinding->object())
2957 return m_readFramebufferBinding->colorBufferFormat(); 2959 return m_readFramebufferBinding->colorBufferFormat();
2958 if (m_requestedAttributes.alpha()) 2960 if (m_requestedAttributes.alpha())
2959 return GL_RGBA; 2961 return GL_RGBA;
2960 return GL_RGB; 2962 return GL_RGB;
2961 } 2963 }
2962 2964
2963 } // namespace blink 2965 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698