1 //
2 // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6
7 // VertexAttribImpl.h: Defines the abstract rx::VertexAttribImpl class.
8
9 #ifndef LIBANGLE_RENDERER_VERTEXARRAYIMPL_H_
10 #define LIBANGLE_RENDERER_VERTEXARRAYIMPL_H_
11
12 #include "common/angleutils.h"
13 #include "libANGLE/Buffer.h"
14 #include "libANGLE/VertexArray.h"
15
16 // This is a helper X macro for iterating over all dirty attribs/bindings. Useful for dirty bits.
17 static_assert(gl::MAX_VERTEX_ATTRIBS == 16, "Invalid max vertex attribs");
18 static_assert(gl::MAX_VERTEX_ATTRIB_BINDINGS == 16, "Invalid max vertex bindings");
19 #define ANGLE_VERTEX_INDEX_CASES(FUNC) \
20 FUNC(0) \
21 FUNC(1) \
22 FUNC(2) \
23 FUNC(3) \
24 FUNC(4) \
25 FUNC(5) FUNC(6) FUNC(7) FUNC(8) FUNC(9) FUNC(10) FUNC(11) FUNC(12) FUNC(13) FUNC(14) FUNC(15)
26
27 namespace rx
28 {
29 class ContextImpl;
30
31 class VertexArrayImpl : angle::NonCopyable
32 {
33 public:
VertexArrayImpl(const gl::VertexArrayState & state)34 VertexArrayImpl(const gl::VertexArrayState &state) : mState(state) {}
35
36 // It's up to the implementation to reset the attrib and binding dirty bits.
37 // This is faster than the front-end having to clear all the bits after they have been scanned.
38 virtual angle::Result syncState(const gl::Context *context,
39 const gl::VertexArray::DirtyBits &dirtyBits,
40 gl::VertexArray::DirtyAttribBitsArray *attribBits,
41 gl::VertexArray::DirtyBindingBitsArray *bindingBits);
42
destroy(const gl::Context * context)43 virtual void destroy(const gl::Context *context) {}
~VertexArrayImpl()44 virtual ~VertexArrayImpl() {}
45
getState()46 const gl::VertexArrayState &getState() const { return mState; }
47
48 protected:
49 const gl::VertexArrayState &mState;
50 };
51
syncState(const gl::Context * context,const gl::VertexArray::DirtyBits & dirtyBits,gl::VertexArray::DirtyAttribBitsArray * attribBits,gl::VertexArray::DirtyBindingBitsArray * bindingBits)52 inline angle::Result VertexArrayImpl::syncState(const gl::Context *context,
53 const gl::VertexArray::DirtyBits &dirtyBits,
54 gl::VertexArray::DirtyAttribBitsArray *attribBits,
55 gl::VertexArray::DirtyBindingBitsArray *bindingBits)
56 {
57 return angle::Result::Continue;
58 }
59
60 } // namespace rx
61
62 #endif // LIBANGLE_RENDERER_VERTEXARRAYIMPL_H_
63