X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fgraphicsbuffer.cpp;h=da522dc348084c694ca0a61b90f536f60091d94a;hp=eb9845028d1c846e29c021d9fdc3cf8c021953c8;hb=ac518ad085eb5bc84647e4aebe0c5ff06640cd0d;hpb=f8ef964f021d1d6da6ea46bbb1fe8f0250a5be8c diff --git a/src/graphicsbuffer.cpp b/src/graphicsbuffer.cpp index eb98450..da522dc 100644 --- a/src/graphicsbuffer.cpp +++ b/src/graphicsbuffer.cpp @@ -56,6 +56,8 @@ static GLenum BufferTypeToGLType(GraphicsBuffer::BufferType buffer_type) return GL_PIXEL_UNPACK_BUFFER; case GraphicsBuffer::BufferTypeUniform: return GL_UNIFORM_BUFFER; + case GraphicsBuffer::BufferTypeTexture: + return GL_TEXTURE_BUFFER; case GraphicsBuffer::BufferTypeDrawIndirect: return GL_DRAW_INDIRECT_BUFFER; default: @@ -183,12 +185,16 @@ void* GraphicsBuffer::MapRange(int offset, int length, bool read, bool write, bo void GraphicsBuffer::UnMap() { GLenum target = BufferTypeToGLType(m_buffer_type); + + // If we're not mapped, unmapping is a no-op. + if (!m_map_pointer) + return; if (m_faking_map) { Upload(m_buffer_size, m_map_pointer); free(m_map_pointer); - m_map_pointer = nullptr; + m_map_pointer = NULL; m_invalidated = false; m_faking_map = false; return; @@ -196,7 +202,7 @@ void GraphicsBuffer::UnMap() Bind(); glUnmapBuffer(target); - m_map_pointer = nullptr; + m_map_pointer = NULL; m_invalidated = false; } @@ -213,7 +219,7 @@ void GraphicsBuffer::Upload(size_t length, const void* data) Bind(); glBufferData(target, length, data, usage); } - if (data != nullptr) + if (data != NULL) m_invalidated = false; } @@ -240,7 +246,7 @@ void GraphicsBuffer::Resize(size_t length) UnMap(); GLuint old_buffer = m_buffer_handle; glGenBuffers(1, &m_buffer_handle); - Upload(length, nullptr); + Upload(length, NULL); glBindBuffer(GL_COPY_READ_BUFFER, old_buffer); glBindBuffer(GL_COPY_WRITE_BUFFER, m_buffer_handle); glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, 0, 0, m_buffer_size); @@ -257,3 +263,7 @@ void GraphicsBuffer::Bind() const glBindBuffer(BufferTypeToGLType(m_buffer_type), m_buffer_handle); } +void GraphicsBuffer::BindRange(size_t start, size_t size) const +{ + glBindBufferRange(BufferTypeToGLType(m_buffer_type), 0, m_buffer_handle, start, size); +}