]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/opengl/buffer_backend.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / backends / opengl / buffer_backend.cpp
index a0404e7b143066a479efe1c67f33adb117aa0676..dc081b1c76517852a5b832a8918b06b7896b8990 100644 (file)
@@ -6,14 +6,13 @@
 #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);
@@ -24,16 +23,23 @@ OpenGLBuffer::OpenGLBuffer()
                glGenBuffers(1, &id);
 }
 
+OpenGLBuffer::OpenGLBuffer(OpenGLBuffer &&other):
+       id(other.id)
+{
+       other.id = 0;
+}
+
 OpenGLBuffer::~OpenGLBuffer()
 {
-       if(this==scratch_binding)
+       if(this==Device::get_current().get_state().scratch_buffer)
                unbind_scratch();
-       glDeleteBuffers(1, &id);
+       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)
        {
@@ -84,7 +90,6 @@ void *OpenGLBuffer::map()
 
 bool OpenGLBuffer::unmap()
 {
-       // TODO check if it's mapped
        if(ARB_direct_state_access)
                return glUnmapNamedBuffer(id);
        else if(OES_mapbuffer)
@@ -109,6 +114,7 @@ void OpenGLBuffer::set_debug_name(const string &name)
 
 void OpenGLBuffer::bind_scratch()
 {
+       const OpenGLBuffer *&scratch_binding = Device::get_current().get_state().scratch_buffer;
        if(scratch_binding!=this)
        {
                glBindBuffer(GL_ARRAY_BUFFER, id);
@@ -118,6 +124,7 @@ void OpenGLBuffer::bind_scratch()
 
 void OpenGLBuffer::unbind_scratch()
 {
+       const OpenGLBuffer *&scratch_binding = Device::get_current().get_state().scratch_buffer;
        if(scratch_binding)
        {
                glBindBuffer(GL_ARRAY_BUFFER, 0);
@@ -125,5 +132,16 @@ void OpenGLBuffer::unbind_scratch()
        }
 }
 
+
+void Buffer::AsyncTransfer::allocate()
+{
+       dest_addr = buffer->map();
+}
+
+void Buffer::AsyncTransfer::finalize()
+{
+       buffer->unmap();
+}
+
 } // namespace GL
 } // namespace Msp