Home | History | Annotate | Download | only in libGLESv2
      1 //
      2 // Copyright (c) 2002-2014 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 // Buffer.h: Defines the gl::Buffer class, representing storage of vertex and/or
      8 // index data. Implements GL buffer objects and related functionality.
      9 // [OpenGL ES 2.0.24] section 2.9 page 21.
     10 
     11 #ifndef LIBGLESV2_BUFFER_H_
     12 #define LIBGLESV2_BUFFER_H_
     13 
     14 #include "common/angleutils.h"
     15 #include "common/RefCountObject.h"
     16 #include "libGLESv2/renderer/IndexRangeCache.h"
     17 
     18 namespace rx
     19 {
     20 class Renderer;
     21 class BufferStorage;
     22 class StaticIndexBufferInterface;
     23 class StaticVertexBufferInterface;
     24 };
     25 
     26 namespace gl
     27 {
     28 
     29 class Buffer : public RefCountObject
     30 {
     31   public:
     32     Buffer(rx::Renderer *renderer, GLuint id);
     33 
     34     virtual ~Buffer();
     35 
     36     void bufferData(const void *data, GLsizeiptr size, GLenum usage);
     37     void bufferSubData(const void *data, GLsizeiptr size, GLintptr offset);
     38     void copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size);
     39     GLvoid *mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access);
     40     void unmap();
     41 
     42     GLenum usage() const;
     43     GLint accessFlags() const;
     44     GLboolean mapped() const;
     45     GLvoid *mapPointer() const;
     46     GLint64 mapOffset() const;
     47     GLint64 mapLength() const;
     48 
     49     rx::BufferStorage *getStorage() const;
     50     GLint64 size() const;
     51 
     52     void markTransformFeedbackUsage();
     53 
     54     rx::StaticVertexBufferInterface *getStaticVertexBuffer();
     55     rx::StaticIndexBufferInterface *getStaticIndexBuffer();
     56     void invalidateStaticData();
     57     void promoteStaticUsage(int dataSize);
     58 
     59     rx::IndexRangeCache *getIndexRangeCache();
     60 
     61   private:
     62     DISALLOW_COPY_AND_ASSIGN(Buffer);
     63 
     64     rx::Renderer *mRenderer;
     65     GLenum mUsage;
     66     GLint mAccessFlags;
     67     GLboolean mMapped;
     68     GLvoid *mMapPointer;
     69     GLint64 mMapOffset;
     70     GLint64 mMapLength;
     71 
     72     rx::BufferStorage *mBufferStorage;
     73 
     74     rx::IndexRangeCache mIndexRangeCache;
     75 
     76     rx::StaticVertexBufferInterface *mStaticVertexBuffer;
     77     rx::StaticIndexBufferInterface *mStaticIndexBuffer;
     78     unsigned int mUnmodifiedDataUse;
     79 };
     80 
     81 }
     82 
     83 #endif   // LIBGLESV2_BUFFER_H_
     84