X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fbuffer_backend.cpp;h=c59540834615c61062ccd81ad33428fe90c764c4;hb=c356a20547afae97b412da36e0b0a7d51e879401;hp=e0f5525a9a2b211f8b2f5367ee78379aa8415146;hpb=6c5c2bcbd4025cba36f48f6f326466351f4f2971;p=libs%2Fgl.git diff --git a/source/backends/opengl/buffer_backend.cpp b/source/backends/opengl/buffer_backend.cpp index e0f5525a..c5954083 100644 --- a/source/backends/opengl/buffer_backend.cpp +++ b/source/backends/opengl/buffer_backend.cpp @@ -6,14 +6,13 @@ #include #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); @@ -32,7 +31,7 @@ OpenGLBuffer::OpenGLBuffer(OpenGLBuffer &&other): OpenGLBuffer::~OpenGLBuffer() { - if(this==scratch_binding) + if(this==Device::get_current().get_state().scratch_buffer) unbind_scratch(); if(id) glDeleteBuffers(1, &id); @@ -40,7 +39,7 @@ OpenGLBuffer::~OpenGLBuffer() void OpenGLBuffer::allocate() { - size_t size = static_cast(this)->size; + size_t size = static_cast(this)->get_total_size(); if(ARB_buffer_storage) { @@ -115,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); @@ -124,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); @@ -131,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