blob: 93ec5ab4f664811781f5176faeab2ccd4a5a5a82 [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"
Jamie Madill39b43462014-08-18 16:39:50 -040014#include "common/mathutil.h"
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000015
Geoff Lang0b7eef72014-06-12 14:10:47 -040016#include <GLES2/gl2.h>
17
daniel@transgaming.com6c4b5e02012-01-27 15:39:12 +000018namespace
19{
20 enum { INITIAL_INDEX_BUFFER_SIZE = 4096 * sizeof(GLuint) };
21}
22
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000023namespace gl
24{
25class Buffer;
26}
27
daniel@transgaming.com31240482012-11-28 21:06:41 +000028namespace rx
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000029{
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000030class StaticIndexBufferInterface;
31class StreamingIndexBufferInterface;
32class IndexBuffer;
Brandon Jonesd38f9262014-06-18 16:26:45 -070033class BufferD3D;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000034class Renderer;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000035
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000036struct TranslatedIndexData
37{
Jamie Madill39b43462014-08-18 16:39:50 -040038 RangeUI indexRange;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000039 unsigned int startIndex;
40 unsigned int startOffset; // In bytes
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000041
42 IndexBuffer *indexBuffer;
Brandon Jonesd38f9262014-06-18 16:26:45 -070043 BufferD3D *storage;
Nicolas Capens8d62bcc2014-07-25 15:08:21 -040044 GLenum indexType;
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000045 unsigned int serial;
daniel@transgaming.com83921382011-01-08 05:46:00 +000046};
47
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000048class IndexDataManager
49{
50 public:
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000051 explicit IndexDataManager(Renderer *renderer);
daniel@transgaming.com83921382011-01-08 05:46:00 +000052 virtual ~IndexDataManager();
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000053
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000054 GLenum prepareIndexData(GLenum type, GLsizei count, gl::Buffer *arrayElementBuffer, const GLvoid *indices, TranslatedIndexData *translated);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000055
56 private:
daniel@transgaming.com83921382011-01-08 05:46:00 +000057 DISALLOW_COPY_AND_ASSIGN(IndexDataManager);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000058
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000059 Renderer *const mRenderer;
daniel@transgaming.com3e4c6002010-05-05 18:50:13 +000060
daniel@transgaming.com50cc7252012-12-20 21:09:23 +000061 StreamingIndexBufferInterface *mStreamingBufferShort;
62 StreamingIndexBufferInterface *mStreamingBufferInt;
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_