| Index: Source/core/html/canvas/WebGLVertexArrayObjectOES.cpp
|
| diff --git a/Source/core/html/canvas/WebGLVertexArrayObjectOES.cpp b/Source/core/html/canvas/WebGLVertexArrayObjectOES.cpp
|
| index a1d8f858ab7c23e42fbae0649bcd61a046c445b8..35260b393eeb49e03ddc2e0a583c63508bed06ca 100644
|
| --- a/Source/core/html/canvas/WebGLVertexArrayObjectOES.cpp
|
| +++ b/Source/core/html/canvas/WebGLVertexArrayObjectOES.cpp
|
| @@ -31,9 +31,9 @@
|
|
|
| namespace blink {
|
|
|
| -PassRefPtr<WebGLVertexArrayObjectOES> WebGLVertexArrayObjectOES::create(WebGLRenderingContextBase* ctx, VaoType type)
|
| +PassRefPtrWillBeRawPtr<WebGLVertexArrayObjectOES> WebGLVertexArrayObjectOES::create(WebGLRenderingContextBase* ctx, VaoType type)
|
| {
|
| - return adoptRef(new WebGLVertexArrayObjectOES(ctx, type));
|
| + return adoptRefWillBeNoop(new WebGLVertexArrayObjectOES(ctx, type));
|
| }
|
|
|
| WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES(WebGLRenderingContextBase* ctx, VaoType type)
|
| @@ -56,7 +56,23 @@ WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES(WebGLRenderingContextBase*
|
|
|
| WebGLVertexArrayObjectOES::~WebGLVertexArrayObjectOES()
|
| {
|
| - deleteObject(0);
|
| +#if ENABLE(OILPAN)
|
| + // These heap objects must not be accessed by deleteObjectImpl(),
|
| + // clear them out before a call to it is triggered below. The
|
| + // finalizers of these two (and their elements) will themselves
|
| + // handle detachment.
|
| + m_boundElementArrayBuffer.clear();
|
| + m_vertexAttribState.clear();
|
| +#endif
|
| + // Delete the platform framebuffer resource. Explicit detachment
|
| + // is for the benefit of Oilpan, where this vertex array object
|
| + // isn't detached when it and the WebGLRenderingContextBase object
|
| + // it is registered with are both finalized. Without Oilpan, the
|
| + // object will have been detached.
|
| + //
|
| + // To keep the code regular, the trivial detach()ment is always
|
| + // performed.
|
| + detachAndDeleteObject();
|
| }
|
|
|
| void WebGLVertexArrayObjectOES::deleteObjectImpl(blink::WebGraphicsContext3D* context3d, Platform3DObject object)
|
| @@ -65,7 +81,7 @@ void WebGLVertexArrayObjectOES::deleteObjectImpl(blink::WebGraphicsContext3D* co
|
| case VaoTypeDefault:
|
| break;
|
| default:
|
| - context()->webContext()->deleteVertexArrayOES(object);
|
| + context3d->deleteVertexArrayOES(object);
|
| break;
|
| }
|
|
|
| @@ -79,18 +95,17 @@ void WebGLVertexArrayObjectOES::deleteObjectImpl(blink::WebGraphicsContext3D* co
|
| }
|
| }
|
|
|
| -void WebGLVertexArrayObjectOES::setElementArrayBuffer(PassRefPtr<WebGLBuffer> buffer)
|
| +void WebGLVertexArrayObjectOES::setElementArrayBuffer(PassRefPtrWillBeRawPtr<WebGLBuffer> buffer)
|
| {
|
| if (buffer)
|
| buffer->onAttached();
|
| if (m_boundElementArrayBuffer)
|
| m_boundElementArrayBuffer->onDetached(context()->webContext());
|
| m_boundElementArrayBuffer = buffer;
|
| -
|
| }
|
|
|
| void WebGLVertexArrayObjectOES::setVertexAttribState(
|
| - GLuint index, GLsizei bytesPerElement, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset, PassRefPtr<WebGLBuffer> buffer)
|
| + GLuint index, GLsizei bytesPerElement, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset, PassRefPtrWillBeRawPtr<WebGLBuffer> buffer)
|
| {
|
| GLsizei validatedStride = stride ? stride : bytesPerElement;
|
|
|
| @@ -111,7 +126,7 @@ void WebGLVertexArrayObjectOES::setVertexAttribState(
|
| state.offset = offset;
|
| }
|
|
|
| -void WebGLVertexArrayObjectOES::unbindBuffer(PassRefPtr<WebGLBuffer> buffer)
|
| +void WebGLVertexArrayObjectOES::unbindBuffer(PassRefPtrWillBeRawPtr<WebGLBuffer> buffer)
|
| {
|
| if (m_boundElementArrayBuffer == buffer) {
|
| m_boundElementArrayBuffer->onDetached(context()->webContext());
|
| @@ -133,4 +148,16 @@ void WebGLVertexArrayObjectOES::setVertexAttribDivisor(GLuint index, GLuint divi
|
| state.divisor = divisor;
|
| }
|
|
|
| +void WebGLVertexArrayObjectOES::VertexAttribState::trace(Visitor* visitor)
|
| +{
|
| + visitor->trace(bufferBinding);
|
| +}
|
| +
|
| +void WebGLVertexArrayObjectOES::trace(Visitor* visitor)
|
| +{
|
| + visitor->trace(m_boundElementArrayBuffer);
|
| + visitor->trace(m_vertexAttribState);
|
| + WebGLContextObject::trace(visitor);
|
| +}
|
| +
|
| }
|
|
|