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 // VertexArray9.h: Defines the rx::VertexArray9 class which implements rx::VertexArrayImpl.
8
9 #ifndef LIBANGLE_RENDERER_D3D_D3D9_VERTEXARRAY9_H_
10 #define LIBANGLE_RENDERER_D3D_D3D9_VERTEXARRAY9_H_
11
12 #include "libANGLE/Context.h"
13 #include "libANGLE/renderer/VertexArrayImpl.h"
14 #include "libANGLE/renderer/d3d/d3d9/Context9.h"
15 #include "libANGLE/renderer/d3d/d3d9/Renderer9.h"
16
17 namespace rx
18 {
19 class Renderer9;
20
21 class VertexArray9 : public VertexArrayImpl
22 {
23 public:
VertexArray9(const gl::VertexArrayState & data)24 VertexArray9(const gl::VertexArrayState &data) : VertexArrayImpl(data) {}
25
26 angle::Result syncState(const gl::Context *context,
27 const gl::VertexArray::DirtyBits &dirtyBits,
28 gl::VertexArray::DirtyAttribBitsArray *attribBits,
29 gl::VertexArray::DirtyBindingBitsArray *bindingBits) override;
30
~VertexArray9()31 ~VertexArray9() override {}
32
getCurrentStateSerial()33 UniqueSerial getCurrentStateSerial() const { return mCurrentStateSerial; }
34
35 private:
36 UniqueSerial mCurrentStateSerial;
37 };
38
syncState(const gl::Context * context,const gl::VertexArray::DirtyBits & dirtyBits,gl::VertexArray::DirtyAttribBitsArray * attribBits,gl::VertexArray::DirtyBindingBitsArray * bindingBits)39 inline angle::Result VertexArray9::syncState(const gl::Context *context,
40 const gl::VertexArray::DirtyBits &dirtyBits,
41 gl::VertexArray::DirtyAttribBitsArray *attribBits,
42 gl::VertexArray::DirtyBindingBitsArray *bindingBits)
43 {
44
45 ASSERT(dirtyBits.any());
46 Renderer9 *renderer = GetImplAs<Context9>(context)->getRenderer();
47 mCurrentStateSerial = renderer->generateSerial();
48
49 // Clear the dirty bits in the back-end here.
50 memset(attribBits, 0, sizeof(gl::VertexArray::DirtyAttribBitsArray));
51 memset(bindingBits, 0, sizeof(gl::VertexArray::DirtyBindingBitsArray));
52
53 return angle::Result::Continue;
54 }
55 } // namespace rx
56
57 #endif // LIBANGLE_RENDERER_D3D_D3D9_VERTEXARRAY9_H_
58