1//
2// Copyright (c) 2002-2012 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// Indexffer9.h: Defines the D3D9 IndexBuffer implementation.
8
9#ifndef LIBGLESV2_RENDERER_INDEXBUFFER9_H_
10#define LIBGLESV2_RENDERER_INDEXBUFFER9_H_
11
12#include "libGLESv2/renderer/IndexBuffer.h"
13
14namespace rx
15{
16class Renderer9;
17
18class IndexBuffer9 : public IndexBuffer
19{
20  public:
21    explicit IndexBuffer9(Renderer9 *const renderer);
22    virtual ~IndexBuffer9();
23
24    virtual bool initialize(unsigned int bufferSize, GLenum indexType, bool dynamic);
25
26    static IndexBuffer9 *makeIndexBuffer9(IndexBuffer *indexBuffer);
27
28    virtual bool mapBuffer(unsigned int offset, unsigned int size, void** outMappedMemory);
29    virtual bool unmapBuffer();
30
31    virtual GLenum getIndexType() const;
32    virtual unsigned int getBufferSize() const;
33    virtual bool setSize(unsigned int bufferSize, GLenum indexType);
34
35    virtual bool discard();
36
37    D3DFORMAT getIndexFormat() const;
38    IDirect3DIndexBuffer9 *getBuffer() const;
39
40  private:
41    DISALLOW_COPY_AND_ASSIGN(IndexBuffer9);
42
43    rx::Renderer9 *const mRenderer;
44
45    IDirect3DIndexBuffer9 *mIndexBuffer;
46    unsigned int mBufferSize;
47    GLenum mIndexType;
48    bool mDynamic;
49};
50
51}
52
53#endif // LIBGLESV2_RENDERER_INDEXBUFFER9_H_
54