#include <msp/gl/extensions/oes_mapbuffer.h>
#include "buffer.h"
#include "buffer_backend.h"
+#include "device.h"
using namespace std;
namespace Msp {
namespace GL {
-OpenGLBuffer *OpenGLBuffer::scratch_binding = 0;
-
OpenGLBuffer::OpenGLBuffer()
{
static Require _req(ARB_vertex_buffer_object);
OpenGLBuffer::~OpenGLBuffer()
{
- if(this==scratch_binding)
+ if(this==Device::get_current().get_state().scratch_buffer)
unbind_scratch();
if(id)
glDeleteBuffers(1, &id);
void OpenGLBuffer::allocate()
{
- size_t size = static_cast<const Buffer *>(this)->size;
+ size_t size = static_cast<const Buffer *>(this)->get_total_size();
if(ARB_buffer_storage)
{
bool OpenGLBuffer::unmap()
{
- // TODO check if it's mapped
if(ARB_direct_state_access)
return glUnmapNamedBuffer(id);
else if(OES_mapbuffer)
void OpenGLBuffer::bind_scratch()
{
+ const OpenGLBuffer *&scratch_binding = Device::get_current().get_state().scratch_buffer;
if(scratch_binding!=this)
{
glBindBuffer(GL_ARRAY_BUFFER, id);
void OpenGLBuffer::unbind_scratch()
{
+ const OpenGLBuffer *&scratch_binding = Device::get_current().get_state().scratch_buffer;
if(scratch_binding)
{
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
}
+
+void Buffer::AsyncTransfer::allocate()
+{
+ dest_addr = buffer->map();
+}
+
+void Buffer::AsyncTransfer::finalize()
+{
+ buffer->unmap();
+}
+
} // namespace GL
} // namespace Msp