diff options
Diffstat (limited to 'Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp')
-rw-r--r-- | Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp | 107 |
1 files changed, 16 insertions, 91 deletions
diff --git a/Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp b/Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp index ce18a9f18..af5565cd9 100644 --- a/Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp +++ b/Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp @@ -10,10 +10,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -30,125 +30,50 @@ #include "WebGLVertexArrayObjectOES.h" #include "Extensions3D.h" -#include "WebGLRenderingContext.h" +#include "WebGLRenderingContextBase.h" namespace WebCore { -PassRefPtr<WebGLVertexArrayObjectOES> WebGLVertexArrayObjectOES::create(WebGLRenderingContext* ctx, VaoType type) +Ref<WebGLVertexArrayObjectOES> WebGLVertexArrayObjectOES::create(WebGLRenderingContextBase& context, Type type) { - return adoptRef(new WebGLVertexArrayObjectOES(ctx, type)); + return adoptRef(*new WebGLVertexArrayObjectOES(context, type)); } -WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES(WebGLRenderingContext* ctx, VaoType type) - : WebGLContextObject(ctx) - , m_type(type) - , m_hasEverBeenBound(false) - , m_boundElementArrayBuffer(0) +WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES(WebGLRenderingContextBase& context, Type type) + : WebGLVertexArrayObjectBase(context, type) { - m_vertexAttribState.resize(ctx->getMaxVertexAttribs()); - - Extensions3D* extensions = context()->graphicsContext3D()->getExtensions(); - switch (m_type) { - case VaoTypeDefault: + switch (type) { + case Type::Default: break; - default: - setObject(extensions->createVertexArrayOES()); + case Type::User: + setObject(this->context()->graphicsContext3D()->getExtensions().createVertexArrayOES()); break; } } WebGLVertexArrayObjectOES::~WebGLVertexArrayObjectOES() { - deleteObject(0); + deleteObject(nullptr); } void WebGLVertexArrayObjectOES::deleteObjectImpl(GraphicsContext3D* context3d, Platform3DObject object) { - Extensions3D* extensions = context3d->getExtensions(); switch (m_type) { - case VaoTypeDefault: + case Type::Default: break; - default: - extensions->deleteVertexArrayOES(object); + case Type::User: + context3d->getExtensions().deleteVertexArrayOES(object); break; } if (m_boundElementArrayBuffer) m_boundElementArrayBuffer->onDetached(context3d); - for (size_t i = 0; i < m_vertexAttribState.size(); ++i) { - VertexAttribState& state = m_vertexAttribState[i]; + for (auto& state : m_vertexAttribState) { if (state.bufferBinding) state.bufferBinding->onDetached(context3d); } } - -void WebGLVertexArrayObjectOES::setElementArrayBuffer(PassRefPtr<WebGLBuffer> buffer) -{ - if (buffer) - buffer->onAttached(); - if (m_boundElementArrayBuffer) - m_boundElementArrayBuffer->onDetached(context()->graphicsContext3D()); - m_boundElementArrayBuffer = buffer; - -} - -void WebGLVertexArrayObjectOES::setVertexAttribState( - GC3Duint index, GC3Dsizei bytesPerElement, GC3Dint size, GC3Denum type, GC3Dboolean normalized, GC3Dsizei stride, GC3Dintptr offset, PassRefPtr<WebGLBuffer> buffer) -{ - GC3Dsizei validatedStride = stride ? stride : bytesPerElement; - - VertexAttribState& state = m_vertexAttribState[index]; - - if (buffer) - buffer->onAttached(); - if (state.bufferBinding) - state.bufferBinding->onDetached(context()->graphicsContext3D()); - - state.bufferBinding = buffer; - state.bytesPerElement = bytesPerElement; - state.size = size; - state.type = type; - state.normalized = normalized; - state.stride = validatedStride; - state.originalStride = stride; - state.offset = offset; -} - -void WebGLVertexArrayObjectOES::unbindBuffer(PassRefPtr<WebGLBuffer> buffer) -{ - if (m_boundElementArrayBuffer == buffer) { - m_boundElementArrayBuffer->onDetached(context()->graphicsContext3D()); - m_boundElementArrayBuffer = 0; - } - - for (size_t i = 0; i < m_vertexAttribState.size(); ++i) { - VertexAttribState& state = m_vertexAttribState[i]; - if (state.bufferBinding == buffer) { - buffer->onDetached(context()->graphicsContext3D()); - - if (!i && !context()->isGLES2Compliant()) { - state.bufferBinding = context()->m_vertexAttrib0Buffer; - state.bufferBinding->onAttached(); - state.bytesPerElement = 0; - state.size = 4; - state.type = GraphicsContext3D::FLOAT; - state.normalized = false; - state.stride = 16; - state.originalStride = 0; - state.offset = 0; - } else - state.bufferBinding = 0; - } - } -} - -void WebGLVertexArrayObjectOES::setVertexAttribDivisor(GC3Duint index, GC3Duint divisor) -{ - VertexAttribState& state = m_vertexAttribState[index]; - state.divisor = divisor; -} - } #endif // ENABLE(WEBGL) |