/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "WebGLVertexArrayFake.h" #include "GLContext.h" #include "WebGLContext.h" namespace mozilla { WebGLVertexArrayFake::WebGLVertexArrayFake(WebGLContext* webgl) : WebGLVertexArray(webgl, 0) {} void WebGLVertexArrayFake::BindVertexArray() { // Go through and re-bind all buffers and setup all // vertex attribute pointers gl::GLContext* gl = mContext->gl; WebGLRefPtr prevVertexArray = mContext->mBoundVertexArray; mContext->mBoundVertexArray = this; WebGLRefPtr prevBuffer = mContext->mBoundArrayBuffer; mContext->BindBuffer(LOCAL_GL_ELEMENT_ARRAY_BUFFER, mElementArrayBuffer); size_t i = 0; for (const auto& vd : mAttribs) { mContext->BindBuffer(LOCAL_GL_ARRAY_BUFFER, vd.mBuf); vd.DoVertexAttribPointer(gl, i); if (vd.mEnabled) { gl->fEnableVertexAttribArray(i); } else { gl->fDisableVertexAttribArray(i); } ++i; } size_t len = prevVertexArray->mAttribs.size(); for (; i < len; ++i) { const auto& vd = prevVertexArray->mAttribs[i]; if (vd.mEnabled) { gl->fDisableVertexAttribArray(i); } } mContext->BindBuffer(LOCAL_GL_ARRAY_BUFFER, prevBuffer); } } // namespace mozilla