1b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com//
2b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
3b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
4b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com// found in the LICENSE file.
5b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com//
6b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
7b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com// VertexBuffer9.h: Defines the D3D9 VertexBuffer implementation.
8b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
9b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com#ifndef LIBGLESV2_RENDERER_VERTEXBUFFER9_H_
10b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com#define LIBGLESV2_RENDERER_VERTEXBUFFER9_H_
11b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
12b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com#include "libGLESv2/renderer/VertexBuffer.h"
13b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
14b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.comnamespace rx
15b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com{
16486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass Renderer9;
17b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
18b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.comclass VertexBuffer9 : public VertexBuffer
19b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com{
20b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com  public:
21b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    explicit VertexBuffer9(rx::Renderer9 *const renderer);
22b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    virtual ~VertexBuffer9();
23b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
24b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    virtual bool initialize(unsigned int size, bool dynamicUsage);
25b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
26b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    static VertexBuffer9 *makeVertexBuffer9(VertexBuffer *vertexBuffer);
27b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
28a857c36bc1e9f1178c5eaa3e80bfe543a5408467Jamie Madill    virtual bool storeVertexAttributes(const gl::VertexAttribute &attrib, const gl::VertexAttribCurrentValueData &currentValue,
29a857c36bc1e9f1178c5eaa3e80bfe543a5408467Jamie Madill                                       GLint start, GLsizei count, GLsizei instances, unsigned int offset);
30b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
31a36ead4a7d5641181ab994a13b7d5027c1b5bd07Geoff Lang    virtual bool getSpaceRequired(const gl::VertexAttribute &attrib, GLsizei count, GLsizei instances, unsigned int *outSpaceRequired) const;
32b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
33b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    virtual unsigned int getBufferSize() const;
34b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    virtual bool setBufferSize(unsigned int size);
35b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    virtual bool discard();
36b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
37b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    IDirect3DVertexBuffer9 *getBuffer() const;
38b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
39b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com  private:
40b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    DISALLOW_COPY_AND_ASSIGN(VertexBuffer9);
41b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
42b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    rx::Renderer9 *const mRenderer;
43b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
44b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    IDirect3DVertexBuffer9 *mVertexBuffer;
45b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    unsigned int mBufferSize;
46b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com    bool mDynamicUsage;
47b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
48a36ead4a7d5641181ab994a13b7d5027c1b5bd07Geoff Lang    static bool spaceRequired(const gl::VertexAttribute &attrib, std::size_t count, GLsizei instances,
49a36ead4a7d5641181ab994a13b7d5027c1b5bd07Geoff Lang                              unsigned int *outSpaceRequired);
50b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com};
51b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
52b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com}
53b80a190156f46ce50c6872b8b079c93f24256e9cdaniel@transgaming.com
54315b6403eb0d36c7311204def76dc75fff69caafshannon.woods@transgaming.com#endif // LIBGLESV2_RENDERER_VERTEXBUFFER9_H_
55