mirror of
https://github.com/love2d/love.git
synced 2026-08-21 13:09:56 +02:00
Fixed SpriteBatch:unbind
This commit is contained in:
@@ -57,7 +57,8 @@ VertexBuffer *VertexBuffer::Create(size_t size, GLenum target, GLenum usage)
|
|||||||
}
|
}
|
||||||
|
|
||||||
VertexBuffer::VertexBuffer(size_t size, GLenum target, GLenum usage)
|
VertexBuffer::VertexBuffer(size_t size, GLenum target, GLenum usage)
|
||||||
: size(size)
|
: is_bound(false)
|
||||||
|
, size(size)
|
||||||
, target(target)
|
, target(target)
|
||||||
, usage(usage)
|
, usage(usage)
|
||||||
{
|
{
|
||||||
@@ -91,10 +92,12 @@ void VertexArray::unmap()
|
|||||||
|
|
||||||
void VertexArray::bind()
|
void VertexArray::bind()
|
||||||
{
|
{
|
||||||
|
is_bound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VertexArray::unbind()
|
void VertexArray::unbind()
|
||||||
{
|
{
|
||||||
|
is_bound = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VertexArray::fill(size_t offset, size_t size, const void *data)
|
void VertexArray::fill(size_t offset, size_t size, const void *data)
|
||||||
@@ -160,10 +163,16 @@ void VBO::unmap()
|
|||||||
if (!is_mapped)
|
if (!is_mapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// VBO::bind is a no-op when the VBO is mapped, so we have to make sure it's
|
||||||
|
// bound here.
|
||||||
|
if (is_bound)
|
||||||
|
glBindBufferARB(getTarget(), vbo);
|
||||||
|
|
||||||
// "orphan" current buffer to avoid implicit synchronisation on the gpu:
|
// "orphan" current buffer to avoid implicit synchronisation on the gpu:
|
||||||
// http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-AsynchronousBufferTransfers.pdf
|
// http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-AsynchronousBufferTransfers.pdf
|
||||||
glBufferDataARB(getTarget(), getSize(), NULL, getUsage());
|
glBufferDataARB(getTarget(), getSize(), NULL, getUsage());
|
||||||
glBufferDataARB(getTarget(), getSize(), memory_map, getUsage());
|
glBufferDataARB(getTarget(), getSize(), memory_map, getUsage());
|
||||||
|
|
||||||
is_mapped = false;
|
is_mapped = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,12 +180,16 @@ void VBO::bind()
|
|||||||
{
|
{
|
||||||
if (!is_mapped)
|
if (!is_mapped)
|
||||||
glBindBufferARB(getTarget(), vbo);
|
glBindBufferARB(getTarget(), vbo);
|
||||||
|
|
||||||
|
is_bound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VBO::unbind()
|
void VBO::unbind()
|
||||||
{
|
{
|
||||||
if (!is_mapped)
|
if (!is_mapped)
|
||||||
glBindBufferARB(getTarget(), 0);
|
glBindBufferARB(getTarget(), 0);
|
||||||
|
|
||||||
|
is_bound = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VBO::fill(size_t offset, size_t size, const void *data)
|
void VBO::fill(size_t offset, size_t size, const void *data)
|
||||||
|
|||||||
@@ -106,6 +106,11 @@ public:
|
|||||||
return usage;
|
return usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isBound() const
|
||||||
|
{
|
||||||
|
return is_bound;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map the VertexBuffer to client memory.
|
* Map the VertexBuffer to client memory.
|
||||||
*
|
*
|
||||||
@@ -222,6 +227,11 @@ public:
|
|||||||
void *elems;
|
void *elems;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Whether the buffer is currently bound.
|
||||||
|
bool is_bound;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// The size of the buffer, in bytes.
|
// The size of the buffer, in bytes.
|
||||||
|
|||||||
Reference in New Issue
Block a user