namespace IPDF
{
- /*
+ /**
* Implementation of an OpenGL buffer, with some extra cleverness.
*/
class GraphicsBuffer
BufferTypePixelPack, // Pixel Pack buffer
BufferTypePixelUnpack,
BufferTypeUniform, // Uniform/Constant buffer
+ BufferTypeTexture, // I was hoping to avoid this one.
BufferTypeDrawIndirect,
};
const size_t GetSize() const { return m_buffer_size; }
void Invalidate();
+
+ // WARNING: The buffer handle can change for (almost) no reason.
+ // If you do _anything_ to the buffer, you'll need to call this
+ // again to see if we've recreated it in a vain attempt to outsmart
+ // the driver.
+ GLuint GetHandle() const { return m_buffer_handle; }
void Bind() const;
private:
- void RecreateBuffer();
+ bool RecreateBuffer(const void *data = nullptr);
GLuint m_buffer_handle;
BufferType m_buffer_type;
BufferUsage m_buffer_usage;
size_t m_buffer_size;
bool m_invalidated;
bool m_buffer_shape_dirty;
+ bool m_faking_map;
};
}