Commit 103a11f4 by Jamie Madill

Implement state and interface for map in gl::Buffer.

Mostly these calls pass through to BufferStorage. BUG=angle:565 Change-Id: I38ab7d4f49bfad940773428f5bb330de55d3f573 Reviewed-on: https://chromium-review.googlesource.com/187080Reviewed-by: 's avatarNicolas Capens <nicolascapens@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent dd6badf0
......@@ -19,15 +19,21 @@
namespace gl
{
Buffer::Buffer(rx::Renderer *renderer, GLuint id) : RefCountObject(id)
Buffer::Buffer(rx::Renderer *renderer, GLuint id)
: RefCountObject(id),
mRenderer(renderer),
mUsage(GL_DYNAMIC_DRAW),
mAccessFlags(0),
mMapped(GL_FALSE),
mMapPointer(NULL),
mMapOffset(0),
mMapLength(0),
mBufferStorage(NULL),
mStaticVertexBuffer(NULL),
mStaticIndexBuffer(NULL),
mUnmodifiedDataUse(0)
{
mRenderer = renderer;
mUsage = GL_DYNAMIC_DRAW;
mBufferStorage = renderer->createBufferStorage();
mStaticVertexBuffer = NULL;
mStaticIndexBuffer = NULL;
mUnmodifiedDataUse = 0;
}
Buffer::~Buffer()
......@@ -67,6 +73,34 @@ void Buffer::copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr d
invalidateStaticData();
}
GLvoid *Buffer::mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access)
{
ASSERT(!mMapped);
void *dataPointer = mBufferStorage->map(access);
mMapped = GL_TRUE;
mMapPointer = static_cast<GLvoid*>(static_cast<GLubyte*>(dataPointer) + offset);
mMapOffset = static_cast<GLint64>(offset);
mMapLength = static_cast<GLint64>(length);
mAccessFlags = static_cast<GLint>(access);
return mMapPointer;
}
void Buffer::unmap()
{
ASSERT(mMapped);
mBufferStorage->unmap();
mMapped = GL_FALSE;
mMapPointer = NULL;
mMapOffset = 0;
mMapLength = 0;
mAccessFlags = 0;
}
rx::BufferStorage *Buffer::getStorage() const
{
return mBufferStorage;
......@@ -82,6 +116,31 @@ GLenum Buffer::usage() const
return mUsage;
}
GLint Buffer::accessFlags() const
{
return mAccessFlags;
}
GLboolean Buffer::mapped() const
{
return mMapped;
}
GLvoid *Buffer::mapPointer() const
{
return mMapPointer;
}
GLint64 Buffer::mapOffset() const
{
return mMapOffset;
}
GLint64 Buffer::mapLength() const
{
return mMapLength;
}
rx::StaticVertexBufferInterface *Buffer::getStaticVertexBuffer()
{
return mStaticVertexBuffer;
......
......@@ -36,8 +36,15 @@ class Buffer : public RefCountObject
void bufferData(const void *data, GLsizeiptr size, GLenum usage);
void bufferSubData(const void *data, GLsizeiptr size, GLintptr offset);
void copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size);
GLvoid *mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access);
void unmap();
GLenum usage() const;
GLint accessFlags() const;
GLboolean mapped() const;
GLvoid *mapPointer() const;
GLint64 mapOffset() const;
GLint64 mapLength() const;
rx::BufferStorage *getStorage() const;
unsigned int size() const;
......@@ -54,6 +61,11 @@ class Buffer : public RefCountObject
rx::Renderer *mRenderer;
GLenum mUsage;
GLint mAccessFlags;
GLboolean mMapped;
GLvoid *mMapPointer;
GLint64 mMapOffset;
GLint64 mMapLength;
rx::BufferStorage *mBufferStorage;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment