blob: b27c223d866502de4f0b5495d82d13d147ce1a32 [file] [log] [blame]
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +00001//
Nicolas Capens8d62bcc2014-07-25 15:08:21 -04002// Copyright (c) 2002-2014 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
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000013#include "common/angleutils.h"
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000014
daniel@transgaming.com6c4b5e02012-01-27 15:39:12 +000015namespace
16{
17 enum { INITIAL_INDEX_BUFFER_SIZE = 4096 * sizeof(GLuint) };
18}
19
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000020namespace gl
21{
22class Buffer;
23}
24
daniel@transgaming.com31240482012-11-28 21:06:41 +000025namespace rx
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000026{
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000027class StaticIndexBufferInterface;
28class StreamingIndexBufferInterface;
29class IndexBuffer;
Brandon Jonesd38f9262014-06-18 16:26:45 -070030class BufferD3D;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000031class Renderer;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000032
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000033struct TranslatedIndexData
34{
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000035 unsigned int minIndex;
36 unsigned int maxIndex;
37 unsigned int startIndex;
38 unsigned int startOffset; // In bytes
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000039
40 IndexBuffer *indexBuffer;
Brandon Jonesd38f9262014-06-18 16:26:45 -070041 BufferD3D *storage;
Nicolas Capens8d62bcc2014-07-25 15:08:21 -040042 GLenum indexType;
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000043 unsigned int serial;
daniel@transgaming.com83921382011-01-08 05:46:00 +000044};
45
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000046class IndexDataManager
47{
48 public:
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000049 explicit IndexDataManager(Renderer *renderer);
daniel@transgaming.com83921382011-01-08 05:46:00 +000050 virtual ~IndexDataManager();
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000051
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000052 GLenum prepareIndexData(GLenum type, GLsizei count, gl::Buffer *arrayElementBuffer, const GLvoid *indices, TranslatedIndexData *translated);
daniel@transgaming.com50cc7252012-12-20 21:09:23 +000053 StaticIndexBufferInterface *getCountingIndices(GLsizei count);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000054
55 private:
daniel@transgaming.com83921382011-01-08 05:46:00 +000056 DISALLOW_COPY_AND_ASSIGN(IndexDataManager);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000057
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000058 Renderer *const mRenderer;
daniel@transgaming.com3e4c6002010-05-05 18:50:13 +000059
daniel@transgaming.com50cc7252012-12-20 21:09:23 +000060 StreamingIndexBufferInterface *mStreamingBufferShort;
61 StreamingIndexBufferInterface *mStreamingBufferInt;
62 StaticIndexBufferInterface *mCountingBuffer;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000063};
64
65}
66
daniel@transgaming.com8fd34bd2011-02-18 02:52:14 +000067#endif // LIBGLESV2_INDEXDATAMANAGER_H_