summaryrefslogtreecommitdiffstats
path: root/dom/canvas/WebGL2ContextTransformFeedback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/WebGL2ContextTransformFeedback.cpp')
-rw-r--r--dom/canvas/WebGL2ContextTransformFeedback.cpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/dom/canvas/WebGL2ContextTransformFeedback.cpp b/dom/canvas/WebGL2ContextTransformFeedback.cpp
new file mode 100644
index 0000000000..3dc6484604
--- /dev/null
+++ b/dom/canvas/WebGL2ContextTransformFeedback.cpp
@@ -0,0 +1,94 @@
+/* -*- 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 "WebGL2Context.h"
+#include "WebGLProgram.h"
+#include "WebGLTransformFeedback.h"
+#include "GLContext.h"
+
+namespace mozilla {
+
+// -------------------------------------------------------------------------
+// Transform Feedback
+
+RefPtr<WebGLTransformFeedback> WebGL2Context::CreateTransformFeedback() {
+ const FuncScope funcScope(*this, "createTransformFeedback");
+ if (IsContextLost()) return nullptr;
+
+ GLuint tf = 0;
+ gl->fGenTransformFeedbacks(1, &tf);
+
+ return new WebGLTransformFeedback(this, tf);
+}
+
+void WebGL2Context::BindTransformFeedback(WebGLTransformFeedback* tf) {
+ FuncScope funcScope(*this, "bindTransformFeedback");
+ if (IsContextLost()) return;
+ funcScope.mBindFailureGuard = true;
+
+ if (tf && !ValidateObject("tf", *tf)) return;
+
+ if (mBoundTransformFeedback->mIsActive &&
+ !mBoundTransformFeedback->mIsPaused) {
+ ErrorInvalidOperation(
+ "Currently bound transform feedback is active and not"
+ " paused.");
+ return;
+ }
+
+ ////
+
+ mBoundTransformFeedback = (tf ? tf : mDefaultTransformFeedback.get());
+
+ gl->fBindTransformFeedback(LOCAL_GL_TRANSFORM_FEEDBACK,
+ mBoundTransformFeedback->mGLName);
+
+ if (mBoundTransformFeedback) {
+ mBoundTransformFeedback->mHasBeenBound = true;
+ }
+
+ funcScope.mBindFailureGuard = false;
+}
+
+void WebGL2Context::BeginTransformFeedback(GLenum primMode) {
+ const FuncScope funcScope(*this, "beginTransformFeedback");
+ if (IsContextLost()) return;
+
+ mBoundTransformFeedback->BeginTransformFeedback(primMode);
+}
+
+void WebGL2Context::EndTransformFeedback() {
+ const FuncScope funcScope(*this, "endTransformFeedback");
+ if (IsContextLost()) return;
+
+ mBoundTransformFeedback->EndTransformFeedback();
+}
+
+void WebGL2Context::PauseTransformFeedback() {
+ const FuncScope funcScope(*this, "pauseTransformFeedback");
+ if (IsContextLost()) return;
+
+ mBoundTransformFeedback->PauseTransformFeedback();
+}
+
+void WebGL2Context::ResumeTransformFeedback() {
+ const FuncScope funcScope(*this, "resumeTransformFeedback");
+ if (IsContextLost()) return;
+
+ mBoundTransformFeedback->ResumeTransformFeedback();
+}
+
+void WebGL2Context::TransformFeedbackVaryings(
+ WebGLProgram& program, const std::vector<std::string>& varyings,
+ GLenum bufferMode) const {
+ const FuncScope funcScope(*this, "transformFeedbackVaryings");
+ if (IsContextLost()) return;
+
+ if (!ValidateObject("program", program)) return;
+
+ program.TransformFeedbackVaryings(varyings, bufferMode);
+}
+
+} // namespace mozilla