summaryrefslogtreecommitdiffstats
path: root/dom/canvas/WebGLContextVertexArray.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/WebGLContextVertexArray.cpp')
-rw-r--r--dom/canvas/WebGLContextVertexArray.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/dom/canvas/WebGLContextVertexArray.cpp b/dom/canvas/WebGLContextVertexArray.cpp
new file mode 100644
index 000000000..5b7a10f22
--- /dev/null
+++ b/dom/canvas/WebGLContextVertexArray.cpp
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* 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 "WebGLContext.h"
+
+#include "GLContext.h"
+#include "WebGLBuffer.h"
+#include "WebGLVertexArray.h"
+#include "WebGLVertexAttribData.h"
+
+namespace mozilla {
+
+void
+WebGLContext::BindVertexArray(WebGLVertexArray* array)
+{
+ if (IsContextLost())
+ return;
+
+ if (array && !ValidateObject("bindVertexArrayObject", *array))
+ return;
+
+ InvalidateBufferFetching();
+
+ MakeContextCurrent();
+
+ if (mBoundVertexArray) {
+ mBoundVertexArray->AddBufferBindCounts(-1);
+ }
+
+ if (array == nullptr) {
+ array = mDefaultVertexArray;
+ }
+
+ array->BindVertexArray();
+
+ MOZ_ASSERT(mBoundVertexArray == array);
+ if (mBoundVertexArray) {
+ mBoundVertexArray->AddBufferBindCounts(+1);
+ }
+}
+
+already_AddRefed<WebGLVertexArray>
+WebGLContext::CreateVertexArray()
+{
+ if (IsContextLost())
+ return nullptr;
+
+ RefPtr<WebGLVertexArray> globj = CreateVertexArrayImpl();
+
+ MakeContextCurrent();
+ globj->GenVertexArray();
+
+ return globj.forget();
+}
+
+WebGLVertexArray*
+WebGLContext::CreateVertexArrayImpl()
+{
+ return WebGLVertexArray::Create(this);
+}
+
+void
+WebGLContext::DeleteVertexArray(WebGLVertexArray* array)
+{
+ if (!ValidateDeleteObject("deleteVertexArray", array))
+ return;
+
+ if (mBoundVertexArray == array)
+ BindVertexArray(static_cast<WebGLVertexArray*>(nullptr));
+
+ array->RequestDelete();
+}
+
+bool
+WebGLContext::IsVertexArray(const WebGLVertexArray* array)
+{
+ if (!ValidateIsObject("isVertexArray", array))
+ return false;
+
+ MakeContextCurrent();
+ return array->IsVertexArray();
+}
+
+} // namespace mozilla