blob: ff30f32fb0eff78106bd24e55b815537b474552c [file] [log] [blame]
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +00001//
daniel@transgaming.comf6549452012-01-27 15:39:08 +00002// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +00003// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
daniel@transgaming.com8fd34bd2011-02-18 02:52:14 +00007// IndexDataManager.h: Defines the IndexDataManager, a class that
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +00008// runs the Buffer translation process for index buffers.
9
daniel@transgaming.com8fd34bd2011-02-18 02:52:14 +000010#ifndef LIBGLESV2_INDEXDATAMANAGER_H_
11#define LIBGLESV2_INDEXDATAMANAGER_H_
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000012
daniel@transgaming.com83921382011-01-08 05:46:00 +000013#include <vector>
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000014#include <cstddef>
15
16#define GL_APICALL
17#include <GLES2/gl2.h>
18
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000019#include "libGLESv2/Context.h"
daniel@transgaming.com955377e2012-12-20 21:09:15 +000020#include "libGLESv2/renderer/IndexBuffer.h"
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000021
daniel@transgaming.com6c4b5e02012-01-27 15:39:12 +000022namespace
23{
24 enum { INITIAL_INDEX_BUFFER_SIZE = 4096 * sizeof(GLuint) };
25}
26
daniel@transgaming.com31240482012-11-28 21:06:41 +000027namespace rx
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000028{
29
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000030struct TranslatedIndexData
31{
daniel@transgaming.com83921382011-01-08 05:46:00 +000032 UINT minIndex;
33 UINT maxIndex;
34 UINT startIndex;
daniel@transgaming.com83921382011-01-08 05:46:00 +000035};
36
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000037class IndexDataManager
38{
39 public:
daniel@transgaming.com76d3e6e2012-10-31 19:55:33 +000040 IndexDataManager(rx::Renderer9 *renderer);
daniel@transgaming.com83921382011-01-08 05:46:00 +000041 virtual ~IndexDataManager();
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000042
daniel@transgaming.com31240482012-11-28 21:06:41 +000043 GLenum prepareIndexData(GLenum type, GLsizei count, gl::Buffer *arrayElementBuffer, const GLvoid *indices, TranslatedIndexData *translated, IDirect3DIndexBuffer9 **indexBuffer, unsigned int *serial);
daniel@transgaming.comf6549452012-01-27 15:39:08 +000044 StaticIndexBuffer *getCountingIndices(GLsizei count);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000045
46 private:
daniel@transgaming.com83921382011-01-08 05:46:00 +000047 DISALLOW_COPY_AND_ASSIGN(IndexDataManager);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000048
daniel@transgaming.com83921382011-01-08 05:46:00 +000049 std::size_t typeSize(GLenum type) const;
50 std::size_t indexSize(D3DFORMAT format) const;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000051
daniel@transgaming.com76d3e6e2012-10-31 19:55:33 +000052 rx::Renderer9 *const mRenderer; // D3D9_REPLACE
daniel@transgaming.com3e4c6002010-05-05 18:50:13 +000053
daniel@transgaming.com83921382011-01-08 05:46:00 +000054 StreamingIndexBuffer *mStreamingBufferShort;
55 StreamingIndexBuffer *mStreamingBufferInt;
daniel@transgaming.comf6549452012-01-27 15:39:08 +000056 StaticIndexBuffer *mCountingBuffer;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000057};
58
59}
60
daniel@transgaming.com8fd34bd2011-02-18 02:52:14 +000061#endif // LIBGLESV2_INDEXDATAMANAGER_H_