blob: fef7f3224405167195f2cef2975ea2f8d3b8e3dc [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{
Geoff Lang1c134e62014-09-08 15:32:18 -040030class IndexBufferInterface;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000031class StaticIndexBufferInterface;
32class StreamingIndexBufferInterface;
33class IndexBuffer;
Brandon Jonesd38f9262014-06-18 16:26:45 -070034class BufferD3D;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000035class Renderer;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000036
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000037struct TranslatedIndexData
38{
Jamie Madill39b43462014-08-18 16:39:50 -040039 RangeUI indexRange;
shannon.woods@transgaming.com486d9e92013-02-28 23:15:41 +000040 unsigned int startIndex;
41 unsigned int startOffset; // In bytes
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000042
43 IndexBuffer *indexBuffer;
Brandon Jonesd38f9262014-06-18 16:26:45 -070044 BufferD3D *storage;
Nicolas Capens8d62bcc2014-07-25 15:08:21 -040045 GLenum indexType;
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000046 unsigned int serial;
daniel@transgaming.com83921382011-01-08 05:46:00 +000047};
48
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000049class IndexDataManager
50{
51 public:
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000052 explicit IndexDataManager(Renderer *renderer);
daniel@transgaming.com83921382011-01-08 05:46:00 +000053 virtual ~IndexDataManager();
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000054
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000055 GLenum prepareIndexData(GLenum type, GLsizei count, gl::Buffer *arrayElementBuffer, const GLvoid *indices, TranslatedIndexData *translated);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000056
57 private:
Geoff Lang1c134e62014-09-08 15:32:18 -040058 GLenum getStreamingIndexBuffer(GLenum destinationIndexType, IndexBufferInterface **outBuffer);
59
daniel@transgaming.com83921382011-01-08 05:46:00 +000060 DISALLOW_COPY_AND_ASSIGN(IndexDataManager);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000061
daniel@transgaming.com1e3a8042012-12-20 21:09:55 +000062 Renderer *const mRenderer;
daniel@transgaming.com3e4c6002010-05-05 18:50:13 +000063
daniel@transgaming.com50cc7252012-12-20 21:09:23 +000064 StreamingIndexBufferInterface *mStreamingBufferShort;
65 StreamingIndexBufferInterface *mStreamingBufferInt;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000066};
67
68}
69
daniel@transgaming.com8fd34bd2011-02-18 02:52:14 +000070#endif // LIBGLESV2_INDEXDATAMANAGER_H_