1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "WebGLContext.h"
7 #include "WebGLBuffer.h"
8 #include "WebGLVertexAttribData.h"
9 #include "WebGLVertexArray.h"
10 #include "GLContext.h"
12 using namespace mozilla
;
15 WebGLContext::BindVertexArray(WebGLVertexArray
*array
)
20 if (!ValidateObjectAllowDeletedOrNull("bindVertexArrayObject", array
))
23 if (array
&& array
->IsDeleted()) {
24 /* http://www.khronos.org/registry/gles/extensions/OES/OES_vertex_array_object.txt
25 * BindVertexArrayOES fails and an INVALID_OPERATION error is
26 * generated if array is not a name returned from a previous call to
27 * GenVertexArraysOES, or if such a name has since been deleted with
28 * DeleteVertexArraysOES
30 ErrorInvalidOperation("bindVertexArray: can't bind a deleted array!");
34 InvalidateBufferFetching();
39 gl
->fBindVertexArray(array
->GLName());
40 array
->SetHasEverBeenBound(true);
41 mBoundVertexArray
= array
;
44 gl
->fBindVertexArray(0);
45 mBoundVertexArray
= mDefaultVertexArray
;
49 already_AddRefed
<WebGLVertexArray
>
50 WebGLContext::CreateVertexArray()
55 nsRefPtr
<WebGLVertexArray
> globj
= new WebGLVertexArray(this);
58 gl
->fGenVertexArrays(1, &globj
->mGLName
);
60 mVertexArrays
.insertBack(globj
);
62 return globj
.forget();
66 WebGLContext::DeleteVertexArray(WebGLVertexArray
*array
)
74 if (array
->IsDeleted())
77 if (mBoundVertexArray
== array
)
78 BindVertexArray(static_cast<WebGLVertexArray
*>(nullptr));
80 array
->RequestDelete();
84 WebGLContext::IsVertexArray(WebGLVertexArray
*array
)
92 return ValidateObjectAllowDeleted("isVertexArray", array
) &&
93 !array
->IsDeleted() &&
94 array
->HasEverBeenBound();