Line data Source code
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/. */
5 :
6 : #ifndef WEBGL_TRANSFORM_FEEDBACK_H_
7 : #define WEBGL_TRANSFORM_FEEDBACK_H_
8 :
9 : #include "mozilla/LinkedList.h"
10 : #include "nsWrapperCache.h"
11 : #include "WebGLObjectModel.h"
12 :
13 : namespace mozilla {
14 :
15 : class WebGLTransformFeedback final
16 : : public nsWrapperCache
17 : , public WebGLRefCountedObject<WebGLTransformFeedback>
18 : , public LinkedListElement<WebGLTransformFeedback>
19 : {
20 : friend class ScopedDrawHelper;
21 : friend class ScopedDrawWithTransformFeedback;
22 : friend class WebGLContext;
23 : friend class WebGL2Context;
24 : friend class WebGLProgram;
25 :
26 : public:
27 : const GLuint mGLName;
28 : private:
29 : // GLES 3.0.4 p267, Table 6.24 "Transform Feedback State"
30 : WebGLRefPtr<WebGLBuffer> mGenericBufferBinding;
31 : std::vector<IndexedBufferBinding> mIndexedBindings;
32 : bool mIsPaused;
33 : bool mIsActive;
34 : // Not in state tables:
35 : WebGLRefPtr<WebGLProgram> mActive_Program;
36 : MOZ_INIT_OUTSIDE_CTOR GLenum mActive_PrimMode;
37 : MOZ_INIT_OUTSIDE_CTOR size_t mActive_VertPosition;
38 : MOZ_INIT_OUTSIDE_CTOR size_t mActive_VertCapacity;
39 :
40 : public:
41 : WebGLTransformFeedback(WebGLContext* webgl, GLuint tf);
42 : private:
43 : ~WebGLTransformFeedback();
44 :
45 : public:
46 0 : NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLTransformFeedback)
47 0 : NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLTransformFeedback)
48 :
49 : void Delete();
50 0 : WebGLContext* GetParentObject() const { return mContext; }
51 : virtual JSObject* WrapObject(JSContext*, JS::Handle<JSObject*>) override;
52 :
53 0 : bool IsActiveAndNotPaused() const { return mIsActive && !mIsPaused; }
54 :
55 : void AddBufferBindCounts(int8_t addVal) const;
56 :
57 : // GL Funcs
58 : void BeginTransformFeedback(GLenum primMode);
59 : void EndTransformFeedback();
60 : void PauseTransformFeedback();
61 : void ResumeTransformFeedback();
62 : };
63 :
64 : } // namespace mozilla
65 :
66 : #endif // WEBGL_TRANSFORM_FEEDBACK_H_
|