X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fgraphicsbuffer.cpp;h=c3d9620d36138631f25896053995540bef50268f;hp=844dfe86e9835a6b6238106893bae9b38b90223f;hb=1a234dbfe3aaa80894807d1a9f4a2abeb3ad1411;hpb=80c609660b049d1bf62d98acfb0c1aa893278123 diff --git a/src/graphicsbuffer.cpp b/src/graphicsbuffer.cpp index 844dfe8..c3d9620 100644 --- a/src/graphicsbuffer.cpp +++ b/src/graphicsbuffer.cpp @@ -130,11 +130,13 @@ 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) + { + glGenBuffers(1, &m_buffer_handle); + glObjectLabel(GL_BUFFER, m_buffer_handle, -1, m_name); + m_buffer_shape_dirty = false; Upload(m_buffer_size, data); + } return true; } @@ -156,6 +158,10 @@ void* GraphicsBuffer::Map(bool read, bool write, bool invalidate) if (m_map_pointer) Warn("Tried to map already mapped buffer!"); + // Intel really doesn't seem to like this. + if (!m_buffer_size) + return (m_map_pointer = 0); + if (!read && m_buffer_usage == BufferUsage::BufferUsageStaticDraw) { @@ -181,6 +187,10 @@ void* GraphicsBuffer::MapRange(int offset, int length, bool read, bool write, bo if (m_map_pointer) Warn("Tried to map already mapped buffer!"); + // This sometimes makes Intel corrupt memory? + if (!length) return (m_map_pointer = 0); + + RecreateBuffer(); Bind(); @@ -243,10 +253,19 @@ void GraphicsBuffer::UploadRange(size_t length, intptr_t offset, const void* dat void GraphicsBuffer::Resize(size_t length) { + if (!m_buffer_size) + { + m_buffer_size = length; + return; + } if (m_invalidated && m_buffer_size >= length) { m_buffer_size = length; } + else if (length <= m_buffer_size) + { + // Don't need to do anything. + } else { glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, "Resizing buffer.");