1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // IndexDataManager.h: Defines the IndexDataManager, a class that 16 // runs the Buffer translation process for index buffers. 17 18 #ifndef LIBGLES_CM_INDEXDATAMANAGER_H_ 19 #define LIBGLES_CM_INDEXDATAMANAGER_H_ 20 21 #include "Context.h" 22 23 #include <GLES/gl.h> 24 25 namespace es1 26 { 27 28 struct TranslatedIndexData 29 { 30 unsigned int minIndex; 31 unsigned int maxIndex; 32 unsigned int indexOffset; 33 34 sw::Resource *indexBuffer; 35 }; 36 37 class StreamingIndexBuffer 38 { 39 public: 40 StreamingIndexBuffer(unsigned int initialSize); 41 virtual ~StreamingIndexBuffer(); 42 43 void *map(unsigned int requiredSpace, unsigned int *offset); 44 void unmap(); 45 void reserveSpace(unsigned int requiredSpace, GLenum type); 46 47 sw::Resource *getResource() const; 48 49 private: 50 sw::Resource *mIndexBuffer; 51 unsigned int mBufferSize; 52 unsigned int mWritePosition; 53 }; 54 55 class IndexDataManager 56 { 57 public: 58 IndexDataManager(); 59 virtual ~IndexDataManager(); 60 61 GLenum prepareIndexData(GLenum type, GLsizei count, Buffer *arrayElementBuffer, const void *indices, TranslatedIndexData *translated); 62 63 static std::size_t typeSize(GLenum type); 64 65 private: 66 StreamingIndexBuffer *mStreamingBuffer; 67 }; 68 69 } 70 71 #endif // LIBGLES_CM_INDEXDATAMANAGER_H_ 72