return GL_PIXEL_UNPACK_BUFFER;
case GraphicsBuffer::BufferTypeUniform:
return GL_UNIFORM_BUFFER;
return GL_PIXEL_UNPACK_BUFFER;
case GraphicsBuffer::BufferTypeUniform:
return GL_UNIFORM_BUFFER;
if (m_buffer_handle)
{
glDeleteBuffers(1, &m_buffer_handle);
}
glGenBuffers(1, &m_buffer_handle);
if (m_buffer_handle)
{
glDeleteBuffers(1, &m_buffer_handle);
}
glGenBuffers(1, &m_buffer_handle);
+ {
+ m_invalidated = true;
+
+ // Intel's Mesa driver does not rename the buffer when we map with GL_MAP_INVALIDATE_BUFFER_BIT,
+ // resulting in the CPU stalling waiting for rendering from the buffer to complete on the GPU.
+ // We manually force the buffer to be renamed here to avoid this.
+ m_buffer_shape_dirty = true;
+ }
Bind();
glBufferSubData(target, offset, length, data);
Bind();
glBufferSubData(target, offset, length, data);
+ 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;
glGenBuffers(1, &m_buffer_handle);
// Create a new buffer and copy the old data into it.
UnMap();
GLuint old_buffer = m_buffer_handle;
glGenBuffers(1, &m_buffer_handle);
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);
glDeleteBuffers(1, &old_buffer);
m_buffer_size = length;
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);
glDeleteBuffers(1, &old_buffer);
m_buffer_size = length;
{
if (m_buffer_type == BufferTypeUniform)
glBindBufferBase(GL_UNIFORM_BUFFER, 0, m_buffer_handle);
{
if (m_buffer_type == BufferTypeUniform)
glBindBufferBase(GL_UNIFORM_BUFFER, 0, m_buffer_handle);
+void GraphicsBuffer::BindRange(size_t start, size_t size) const
+{
+ glBindBufferRange(BufferTypeToGLType(m_buffer_type), 0, m_buffer_handle, start, size);
+}