X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fgraphicsbuffer.cpp;h=8075453903f5edfed59045130f76f86c1efc03ce;hb=ef0af5fd0129161a9e079bd3cd1298b53f1fe11a;hp=da522dc348084c694ca0a61b90f536f60091d94a;hpb=ac518ad085eb5bc84647e4aebe0c5ff06640cd0d;p=ipdf%2Fcode.git diff --git a/src/graphicsbuffer.cpp b/src/graphicsbuffer.cpp index da522dc..8075453 100644 --- a/src/graphicsbuffer.cpp +++ b/src/graphicsbuffer.cpp @@ -74,6 +74,7 @@ GraphicsBuffer::GraphicsBuffer() m_buffer_handle = 0; m_buffer_usage = BufferUsageDynamicDraw; m_faking_map = false; + m_name = "Unnamed Buffer"; SetUsage(BufferUsageStaticDraw); } @@ -91,6 +92,11 @@ void GraphicsBuffer::SetType(GraphicsBuffer::BufferType bufType) m_buffer_type = bufType; } +void GraphicsBuffer::SetName(const char *name) +{ + m_name = name; +} + void GraphicsBuffer::SetUsage(GraphicsBuffer::BufferUsage bufUsage) { if (bufUsage != m_buffer_usage) @@ -125,6 +131,7 @@ bool GraphicsBuffer::RecreateBuffer(const void *data) glDeleteBuffers(1, &m_buffer_handle); } glGenBuffers(1, &m_buffer_handle); + glObjectLabel(GL_BUFFER, m_buffer_handle, -1, m_name); m_buffer_shape_dirty = false; if (m_buffer_size) Upload(m_buffer_size, data); @@ -217,7 +224,7 @@ void GraphicsBuffer::Upload(size_t length, const void* data) if (!RecreateBuffer(data)) { Bind(); - glBufferData(target, length, data, usage); + glBufferData(target, length+1, data, usage); } if (data != NULL) m_invalidated = false; @@ -236,12 +243,14 @@ void GraphicsBuffer::UploadRange(size_t length, intptr_t offset, const void* dat void GraphicsBuffer::Resize(size_t length) { - if (m_invalidated) + if (m_invalidated && m_buffer_size > length) { m_buffer_size = length; } else { + glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, "Resizing buffer."); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, NULL, GL_TRUE); // Create a new buffer and copy the old data into it. UnMap(); GLuint old_buffer = m_buffer_handle; @@ -252,6 +261,7 @@ void GraphicsBuffer::Resize(size_t length) glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, m_buffer_size); glDeleteBuffers(1, &old_buffer); m_buffer_size = length; + glPopDebugGroup(); } }