| Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| index 0dca9165b5c0d6bc54ff70dfccbba8dadcb2cdd6..bd605b460e6e909af69feaa9b524191e9a78d91b 100644
|
| --- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
|
| @@ -27,6 +27,7 @@
|
|
|
| #include "bindings/core/v8/ExceptionMessages.h"
|
| #include "bindings/core/v8/ExceptionState.h"
|
| +#include "bindings/core/v8/ScriptWrappableVisitor.h"
|
| #include "bindings/core/v8/V8BindingMacros.h"
|
| #include "bindings/modules/v8/HTMLCanvasElementOrOffscreenCanvas.h"
|
| #include "bindings/modules/v8/WebGLAny.h"
|
| @@ -979,6 +980,11 @@ WebGLRenderingContextBase::WebGLRenderingContextBase(
|
| &WebGLRenderingContextBase::dispatchContextLostEvent),
|
| m_restoreAllowed(false),
|
| m_restoreTimer(this, &WebGLRenderingContextBase::maybeRestoreContext),
|
| + m_boundArrayBuffer(this, nullptr),
|
| + m_boundVertexArrayObject(this, nullptr),
|
| + m_currentProgram(this, nullptr),
|
| + m_framebufferBinding(this, nullptr),
|
| + m_renderbufferBinding(this, nullptr),
|
| m_generatedImageCache(4),
|
| m_synthesizedErrorsToConsole(true),
|
| m_numGLErrorsToConsoleAllowed(maxGLErrorsAllowedToConsole),
|
| @@ -1755,16 +1761,20 @@ void WebGLRenderingContextBase::bindTexture(GLenum target,
|
| }
|
|
|
| if (target == GL_TEXTURE_2D) {
|
| - m_textureUnits[m_activeTextureUnit].m_texture2DBinding = texture;
|
| + m_textureUnits[m_activeTextureUnit].m_texture2DBinding =
|
| + TraceWrapperMember<WebGLTexture>(this, texture);
|
|
|
| if (!m_activeTextureUnit)
|
| drawingBuffer()->setTexture2DBinding(objectOrZero(texture));
|
| } else if (target == GL_TEXTURE_CUBE_MAP) {
|
| - m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding = texture;
|
| + m_textureUnits[m_activeTextureUnit].m_textureCubeMapBinding =
|
| + TraceWrapperMember<WebGLTexture>(this, texture);
|
| } else if (isWebGL2OrHigher() && target == GL_TEXTURE_2D_ARRAY) {
|
| - m_textureUnits[m_activeTextureUnit].m_texture2DArrayBinding = texture;
|
| + m_textureUnits[m_activeTextureUnit].m_texture2DArrayBinding =
|
| + TraceWrapperMember<WebGLTexture>(this, texture);
|
| } else if (isWebGL2OrHigher() && target == GL_TEXTURE_3D) {
|
| - m_textureUnits[m_activeTextureUnit].m_texture3DBinding = texture;
|
| + m_textureUnits[m_activeTextureUnit].m_texture3DBinding =
|
| + TraceWrapperMember<WebGLTexture>(this, texture);
|
| } else {
|
| synthesizeGLError(GL_INVALID_ENUM, "bindTexture", "invalid target");
|
| return;
|
| @@ -7451,6 +7461,13 @@ DEFINE_TRACE(WebGLRenderingContextBase::TextureUnitState) {
|
| visitor->trace(m_texture2DArrayBinding);
|
| }
|
|
|
| +DEFINE_TRACE_WRAPPERS(WebGLRenderingContextBase::TextureUnitState) {
|
| + visitor->traceWrappers(m_texture2DBinding);
|
| + visitor->traceWrappers(m_textureCubeMapBinding);
|
| + visitor->traceWrappers(m_texture3DBinding);
|
| + visitor->traceWrappers(m_texture2DArrayBinding);
|
| +}
|
| +
|
| DEFINE_TRACE(WebGLRenderingContextBase) {
|
| visitor->trace(m_contextObjects);
|
| visitor->trace(m_boundArrayBuffer);
|
| @@ -7474,10 +7491,7 @@ DEFINE_TRACE_WRAPPERS(WebGLRenderingContextBase) {
|
| visitor->traceWrappers(m_currentProgram);
|
| visitor->traceWrappers(m_boundVertexArrayObject);
|
| for (auto& unit : m_textureUnits) {
|
| - visitor->traceWrappers(unit.m_texture2DBinding);
|
| - visitor->traceWrappers(unit.m_textureCubeMapBinding);
|
| - visitor->traceWrappers(unit.m_texture3DBinding);
|
| - visitor->traceWrappers(unit.m_texture2DArrayBinding);
|
| + visitor->traceWrappers(&unit);
|
| }
|
| for (ExtensionTracker* tracker : m_extensions) {
|
| WebGLExtension* extension = tracker->getExtensionObjectIfAlreadyEnabled();
|
|
|