blob: 506cfdb89aed6dad43e3e32aedf13fe23b9b1f4f [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
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000019#include "common/angleutils.h"
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000020
daniel@transgaming.com6c4b5e02012-01-27 15:39:12 +000021namespace
22{
23 enum { INITIAL_INDEX_BUFFER_SIZE = 4096 * sizeof(GLuint) };
24}
25
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000026namespace gl
27{
28class Buffer;
29}
30
daniel@transgaming.com31240482012-11-28 21:06:41 +000031namespace rx
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000032{
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000033class StaticIndexBufferInterface;
34class StreamingIndexBufferInterface;
35class IndexBuffer;
36class BufferStorage;
37class Renderer;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000038
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000039struct TranslatedIndexData
40{
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000041 unsigned int minIndex;
42 unsigned int maxIndex;
43 unsigned int startIndex;
44 unsigned int startOffset; // In bytes
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000045
46 IndexBuffer *indexBuffer;
shannon.woods@transgaming.coma1229a32013-02-28 23:08:40 +000047 BufferStorage *storage;
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000048 unsigned int serial;
daniel@transgaming.com83921382011-01-08 05:46:00 +000049};
50
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000051class IndexDataManager
52{
53 public:
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000054 explicit IndexDataManager(Renderer *renderer);
daniel@transgaming.com83921382011-01-08 05:46:00 +000055 virtual ~IndexDataManager();
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000056
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000057 GLenum prepareIndexData(GLenum type, GLsizei count, gl::Buffer *arrayElementBuffer, const GLvoid *indices, TranslatedIndexData *translated);
daniel@transgaming.com50cc7252012-12-20 21:09:23 +000058 StaticIndexBufferInterface *getCountingIndices(GLsizei count);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000059
60 private:
daniel@transgaming.com83921382011-01-08 05:46:00 +000061 DISALLOW_COPY_AND_ASSIGN(IndexDataManager);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000062
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000063 Renderer *const mRenderer;
daniel@transgaming.com3e4c6002010-05-05 18:50:13 +000064
daniel@transgaming.com50cc7252012-12-20 21:09:23 +000065 StreamingIndexBufferInterface *mStreamingBufferShort;
66 StreamingIndexBufferInterface *mStreamingBufferInt;
67 StaticIndexBufferInterface *mCountingBuffer;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000068};
69
70}
71
daniel@transgaming.com8fd34bd2011-02-18 02:52:14 +000072#endif // LIBGLESV2_INDEXDATAMANAGER_H_