1// 2// Copyright (c) 2002-2012 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// VertexDataManager.h: Defines the VertexDataManager, a class that 8// runs the Buffer translation process. 9 10#ifndef LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_ 11#define LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_ 12 13#include "libGLESv2/Constants.h" 14#include "common/angleutils.h" 15 16namespace gl 17{ 18class VertexAttribute; 19class ProgramBinary; 20} 21 22namespace rx 23{ 24class BufferStorage; 25class StreamingVertexBufferInterface; 26class VertexBuffer; 27class Renderer; 28 29struct TranslatedAttribute 30{ 31 bool active; 32 33 const gl::VertexAttribute *attribute; 34 unsigned int offset; 35 unsigned int stride; // 0 means not to advance the read pointer at all 36 37 VertexBuffer *vertexBuffer; 38 BufferStorage *storage; 39 unsigned int serial; 40 unsigned int divisor; 41}; 42 43class VertexDataManager 44{ 45 public: 46 VertexDataManager(rx::Renderer *renderer); 47 virtual ~VertexDataManager(); 48 49 GLenum prepareVertexData(const gl::VertexAttribute attribs[], gl::ProgramBinary *programBinary, GLint start, GLsizei count, TranslatedAttribute *outAttribs, GLsizei instances); 50 51 private: 52 DISALLOW_COPY_AND_ASSIGN(VertexDataManager); 53 54 rx::Renderer *const mRenderer; 55 56 StreamingVertexBufferInterface *mStreamingBuffer; 57 58 float mCurrentValue[gl::MAX_VERTEX_ATTRIBS][4]; 59 StreamingVertexBufferInterface *mCurrentValueBuffer[gl::MAX_VERTEX_ATTRIBS]; 60 std::size_t mCurrentValueOffsets[gl::MAX_VERTEX_ATTRIBS]; 61}; 62 63} 64 65#endif // LIBGLESV2_RENDERER_VERTEXDATAMANAGER_H_ 66