blob: 00ebed25a438a3294afcbf620f28bf6b0ed68ea5 [file] [log] [blame]
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +00001//
2// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// geometry/IndexDataManager.h: Defines the IndexDataManager, a class that
8// runs the Buffer translation process for index buffers.
9
10#ifndef LIBGLESV2_GEOMETRY_INDEXDATAMANAGER_H_
11#define LIBGLESV2_GEOMETRY_INDEXDATAMANAGER_H_
12
13#include <bitset>
14#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.comf8b58a02010-03-26 04:08:45 +000020
21namespace gl
22{
23
24class Buffer;
25class BufferBackEnd;
26class TranslatedIndexBuffer;
27struct FormatConverter;
28
29struct TranslatedIndexData
30{
31 GLuint minIndex;
32 GLuint maxIndex;
33 GLuint count;
daniel@transgaming.com3e4c6002010-05-05 18:50:13 +000034 GLuint indexSize;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000035
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000036 TranslatedIndexBuffer *buffer;
37 GLsizei offset;
38};
39
40class IndexDataManager
41{
42 public:
43 IndexDataManager(Context *context, BufferBackEnd *backend);
44 ~IndexDataManager();
45
daniel@transgaming.com41d8dd82010-05-12 03:45:03 +000046 GLenum preRenderValidate(GLenum mode, GLenum type, GLsizei count, Buffer *arrayElementBuffer, const void *indices, TranslatedIndexData *translated);
daniel@transgaming.com81655a72010-05-20 19:18:17 +000047 GLenum preRenderValidateUnindexed(GLenum mode, GLsizei count, TranslatedIndexData *indexInfo);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000048
49 private:
daniel@transgaming.com41d8dd82010-05-12 03:45:03 +000050 std::size_t IndexDataManager::typeSize(GLenum type) const;
daniel@transgaming.com3e4c6002010-05-05 18:50:13 +000051 std::size_t IndexDataManager::indexSize(GLenum type) const;
52 std::size_t spaceRequired(GLenum type, GLsizei count) const;
53 TranslatedIndexBuffer *prepareIndexBuffer(GLenum type, std::size_t requiredSpace);
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000054
55 Context *mContext;
56 BufferBackEnd *mBackend;
57
daniel@transgaming.com3e4c6002010-05-05 18:50:13 +000058 bool mIntIndicesSupported;
59
60 TranslatedIndexBuffer *mStreamBufferShort;
61 TranslatedIndexBuffer *mStreamBufferInt;
daniel@transgaming.com81655a72010-05-20 19:18:17 +000062
63 TranslatedIndexBuffer *mCountingBuffer;
64 GLsizei mCountingBufferSize;
65
66 TranslatedIndexBuffer *mLineLoopBuffer;
daniel@transgaming.comf8b58a02010-03-26 04:08:45 +000067};
68
69}
70
71#endif // LIBGLESV2_GEOMETRY_INDEXDATAMANAGER_H_